正则表达式匹配任何HTML属性值和引号

时间:2014-02-02 22:12:06

标签: objective-c regex

我之前在SO上看过这个问题,但它是特定于标签或属性的

我需要将任何属性值与正则表达式匹配。我有以下内容,它匹配属性和值:

(\S+)=["']?((?:.(?!["']?\\s+(?:\S+)=|[>"']))+.)["']?

但是,我只希望它匹配值和值的引号。它还需要考虑单引号和双引号。

我理解避免使用HTML和使用解析器的建议,但这是一个特定的需要情况。我只是用它来对属性值进行颜色编码。

任何帮助?

1 个答案:

答案 0 :(得分:3)

我对你的正则表达式字符串做了一个微调。

我将(\S+)=替换为(?<==)

我认为你的正则表达式实现应该能够做一个积极的观察。

当使用嵌套在其内部的引号/双引号时,此正则表达式将显示不一致:<a onclick='StackExchange.switchMobile("on")'>mobile</a>

您可能需要考虑更改角色类以解决这个问题。

以下是完整的正则表达式字符串:

(?<==)["']?((?:.(?!["']?\\s+(?:\S+)=|[>"']))+.)["']?


根据我们的在线聊天讨论,我想出了一个更短更清洁的新正则表达式:

(?<==)('|").*?\1(?=.*?>)

这个正则表达式的作用如下:

  1. 断言我们可以找到=符号 - (?<==)
  2. 后跟单引号/双引号(将其放入捕获组) - ('|")
  3. 匹配任何内容(非贪婪),直到找到相同类型的其他引文 - .*?\1
  4. 断言我们的比赛前某处有一个结束标记> - (?=.*?>)