检索xml / html属性 - 双引号和单引号问题

时间:2013-04-23 11:55:29

标签: regex

代码

我有这个正则表达式:

data-([a-zA-Z_]+[0-9]*)=[\"']([a-zA-Z0-9_ ]*)[\"']

当前输出

如果我有这个输入:

<div data-foo="bar">

比赛是:

  • 数据富= “酒吧”
  • FOO

但如果我提出这个意见:

<div data-foo="ba'r">

然后比赛是:

  • 数据富=“BA'
  • FOO
  • BA

期望的输出

如果我有这个输入:

<div data-foo="ba'r">

然后我不会比赛:

  • 数据富= “ba'r”
  • FOO
  • ba'r

3 个答案:

答案 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*)=(?|'([^']++)'|\"([^\"]++)\")~";

使用(?|...|...|...)功能时,您允许正则表达式引擎为备选中的不同捕获组提供相同的编号。因此,您可以获得您想要的,没有寄生虫匹配。