0

代码

我有这个正则表达式:

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

电流输出

如果我有这个输入:

<div data-foo="bar">

比赛是:

  • 数据-foo="栏"
  • 酒吧

但如果我给出这个输入:

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

然后比赛是:

  • 数据-foo="ba'

期望的输出

如果我有这个输入:

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

然后我不会比赛是:

  • 数据-foo="ba'r"
  • 酒吧
4

3 回答 3

1

添加要查找的所需字符 [a-zA-Z0-9_\"'] --> 请注意,我还添加了 " 和 '

于 2013-04-23T11:59:27.623 回答
1

请注意,您可以使用支持 pcre 的语言(php、ruby、java...)来执行此操作。带有 php 语法的示例(带有反向引用):

$pattern = "~data-([a-zA-Z_]+\d*)=([\"'])(.*?)\2~";

但是通过这种方法,您捕获了不需要的报价。

另一种方式:

 $pattern = "~data-([a-zA-Z_]+\d*)=(?|'([^']++)'|\"([^\"]++)\")~";

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

于 2013-04-23T13:09:09.620 回答
1

'\' 用于跳跃引号?

也许,如果你同时跳跃

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

如果您需要内容有引号,您需要使用 - \' 或 \" 或 \'" 进入引号之间的组 - 这样您现在可以将其他字符放在一起。

于 2013-04-23T12:12:06.573 回答