如果字符串具有这种预测格式:
value = "hello and good morning"
其中 " (引号)也可能是 ' (单引号),并且结束字符(' 或 ")将与开始字符相同。我想匹配引号之间的字符串。
\bvalue\s*=\s*(["'])([^\1]*)\1
(两个 \s 允许 = 符号附近的任何空格)
第一个“捕获的组”(在第一对括号内) - 应该与应该是 ' 或 " 的开头引号匹配然后 - 我应该允许任何数量的字符不是第一组中捕获的字符,然后我期望在组中捕获的字符(括起来的引号)。
(所需的字符串应在第二个捕获组中捕获)。
但这不起作用。
这样做:
\bvalue\s*=\s*(['"])([^"']*)["']
但我想确保左引号和右引号(双引号或单引号)相同。
编辑
目标基本上是获取一个锚的开始标签,该锚的类属性中包含某个类名,我想涵盖类属性的罕见情况,包括 (') 或 (")。
遵循此处的所有建议,我使用了以下模式:
<\s*\ba\b[^<>]+\bclass\s*=\s*("|'|\\"|\\')(?:(?!\1).)*\s*classname\s*(?:(?!\1).)*\1[^>]*>
含义:
找到一个标签打开的标志。
允许任何空格。
找到单词a。
允许任何非结束标签。
Find "class (any spaces) = (any spaces)"
获取开引号,以下之一:(" or ' or \" or \')。
来自 Alan Moore 的回答:允许任何不是开头引号的字符。
find classname
允许任何不是开头引号的字符。
找到与开头相同的结尾引号。
允许任何未关闭标签字符。
找到结束标记 char。