如果字符串具有此预测格式:
value = "hello and good morning"
Run Code Online (Sandbox Code Playgroud)
其中"(引用)也可能是'(单引号),而结束字符('或")与开头字母相同.我想匹配引号之间的字符串.
\bvalue\s*=\s*(["'])([^\1]*)\1
Run Code Online (Sandbox Code Playgroud)
(这两个是允许=符号附近的任何空格)
第一个"捕获的组"(在第一对括号内) - 应该与开头的引号匹配,后者应该是'或'然后 - 我应该允许任何数量的字符不是第一组中捕获的字符,然后我期待在组中捕获的字符(括号引号).
(必须在第二个捕获组中捕获所需的字符串).
但这不起作用.
这样做:
\bvalue\s*=\s*(['"])([^"']*)["']
Run Code Online (Sandbox Code Playgroud)
但我想确保开始和结束引号(双重或单引号)是相同的.
编辑
目标基本上是获取一个锚的开始标记,该锚具有包含在其类属性中的某个类名,我想要涵盖类属性的罕见情况,包括(')或().
根据这里的所有建议,我使用了以下模式:
<\s*\ba\b[^<>]+\bclass\s*=\s*("|'|\\"|\\')(?:(?!\1).)*\s*classname\s*(?:(?!\1).)*\1[^>]*>
Run Code Online (Sandbox Code Playgroud)
含义:
找一个标记 - 开放标志.
允许任何空格.
找到单词 a.
允许任何非关闭标记.
找到"class(任何空格)=(任何空格)"
获取开场引号,以下之一:("或'或\"或\').
来自Alan Moore的回答:允许任何不是开头报价的字符.
find classname
允许任何不是开头引号的字符.
找到与开头相同的收盘价.
允许任何unclosing-tag字符.
找到结束标记char.
<table((?!</table>).)*</table>
Run Code Online (Sandbox Code Playgroud)
但是,匹配我的所有表格标签
<table(.(?!</table>))*</table>
Run Code Online (Sandbox Code Playgroud)
才不是.第二个似乎是有意义的,如果我试图用文字写出表达,但我无法理解第一个.
有人可以向我解释一下这个区别吗?
作为参考,我从这里得到了"Tempered Greedy Token"这个术语:http://www.rexegg.com/regex-quantifiers.html#tempered_greed
我对RegEx表达式很恐怖,我只是不经常使用它们来记住使用之间的语法.
我正在使用grepWin来搜索我的文件.我需要进行搜索,返回两次给定字符串的文件.
所以,例如,如果我在搜索单词"how",那么文件一不匹配:
你好
,今天好吗?
但文件二会:
你好
,今天好吗?我很好,你好吗?
任何人都知道如何制作一个与之匹配的RegEx?