Yuv*_* A. 41 regex backreference negate regex-group
如果字符串具有此预测格式:
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.
Ala*_*ore 60
而不是否定的字符类,你必须使用否定的前瞻:
\bvalue\s*=\s*(["'])(?:(?!\1).)*\1
Run Code Online (Sandbox Code Playgroud)
(?:(?!\1).)*在前瞻确认角色不是捕获组匹配的任何角色后,一次消耗一个角色,(["'']).一个否定或不否定的字符类一次只能匹配一个字符.就正则表达式引擎而言,\1可以表示任意数量的字符,并且没有办法说服\1它只包含"或'在这种情况下.因此,您必须使用更通用(且不太可读)的解决方案.
| 归档时间: |
|
| 查看次数: |
12845 次 |
| 最近记录: |