如果一个字符串的格式符合预测的格式:
value = "hello and good morning"
我想匹配引号之间的字符串,其中引号可能是双引号 " ,也可能是单引号 ' ,闭合引号(' 或 ")与开头的引号相同。
\bvalue\s*=\s*(["'])([^\1]*)\1
第一个“捕获组”(在第一对括号内) - 应该匹配开头的引号,可以是单引号或双引号,然后 - 我应该允许任何不是第一个组中捕获的字符,并且接着期望被捕获的字符(包含引号)。
需要捕获的字符串应该在第二个捕获组中。
虽然这并不起作用。
这个可以:
\bvalue\s*=\s*(['"])([^"']*)["']
但我希望确保开头和结尾的引号(无论是双引号还是单引号)相同。
编辑
目标基本上是获取具有特定类名的锚点的开放标签,并且我想覆盖包括(')或(")的类属性的罕见情况。
在这里遵循所有建议,我使用了模式:
<\s*\ba\b[^<>]+\bclass\s*=\s*("|'|\\"|\\')(?:(?!\1).)*\s*classname\s*(?:(?!\1).)*\1[^>]*>
< p >意义:找到标签的开头符号。
允许任何空格。
找到单词a。
允许任何非闭合标签。
找到"class (任何空格) =(任何空格)"
获取引号,可以是以下之一:(" 或 ' 或 \" 或 ')。
根据Alan Moore的回答:允许任何不是开头引号的字符。
找到类名。
允许任何不是引号的字符。
找到与开头引号相同的闭合引号。
允许任何未闭合的标签字符。
找到闭合标签字符。
value = 'O\'Neill'
。 - Bart Kiers