我有这个正则表达式:
data-([a-zA-Z_]+[0-9]*)=[\"']([a-zA-Z0-9_ ]*)[\"']
如果我有这个输入:
<div data-foo="bar">
比赛是:
但如果我提出这个意见:
<div data-foo="ba'r">
然后比赛是:
如果我有这个输入:
<div data-foo="ba'r">
然后我不会比赛:
答案 0 :(得分:1)
添加要查找的所需字符 [a-zA-Z0-9_ \“'] - &gt;请注意我还添加了”和'
答案 1 :(得分:1)
'\'是为了飞跃报价?
也许,如果你跳过两个
数据 - ([a-zA-Z _] + [0-9] *)= [\“\']([a-zA-Z0-9_] *)[\”\']
如果您需要内容包含引号,则需要在引号之间的组中使用 - \'或\“或\'” - 通过这种方式,您现在可以将其他字符组合在一起。
答案 2 :(得分:1)
请注意,您可以使用支持pcre的语言(php,ruby,java ...)来执行此操作。 PHP语法的例子(带后向引用):
$pattern = "~data-([a-zA-Z_]+\d*)=([\"'])(.*?)\2~";
但是通过这种方法,您已经捕获了一个您不需要的引用。
另一种方式:
$pattern = "~data-([a-zA-Z_]+\d*)=(?|'([^']++)'|\"([^\"]++)\")~";
使用(?|...|...|...)
功能时,您允许正则表达式引擎为备选中的不同捕获组提供相同的编号。因此,您可以获得您想要的,没有寄生虫匹配。