2011-04-30 242 views
0

我希望有一个模式匹配字符串如下:正则表达式匹配字符串

count="2" 
count = "2" 
count = "2" 
count='2' 
count = '2' 
count = '2' 
count=2 
count = 2 
count = 2 
+0

正如我所提到的,你可以解释什么*不匹配的正则表达式,你使用什么语言 - 你肯定会得到更好的答案':)' – Kobi 2011-04-30 13:28:03

+0

我想要得到html属性PHP,有更好的主意? :) – 2011-04-30 13:34:07

+0

其实,是的,有更好的想法。使用[html解析器](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)可能比正则表达式容易得多,并获得更好的结果。 – Kobi 2011-04-30 13:36:13

回答

4

这是不是太清楚应该怎样模式比赛,但你可能会寻找这样的事情:

count\s*=\s*(["']?)\d+\1 

该正则表达式将允许数字周围的引号(或无引号)。 \1与之前匹配的第一个捕获组(["']?)相匹配:",',或者什么也没有,因此它不允许混合引号。 (?:"\d+"|'\d+'|\d+)会有类似的工作。

您可能需要字符串或数字的更好的定义,例如:

count\s*=\s*(?:"(?:[^"\n\r\\]|\\.)*"|'(?:[^'\n\r\\]|\\.)*'|\d+) 

正则表达式允许使用转义字符的没有新的线路,或整数文本字符串。

+0

如果你解释分组和回参考:)你的答案会更好:) – 2011-04-30 13:23:00

+0

谢谢,我使用这个:'count \ s * = \ s *([“\']?)([a-我想补充一下,效率(速度):'“(?:[^”\ z0-9] +)\ 1'并且对我来说非常适合,当然在你的帮助下!) – 2011-04-30 13:26:24

+0

+1好的答案。 [\ r \\] | \\。)*“'可以通过改进_”[展开循环](http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/ 0596528124“from:Mastering Regular Expressions(3rd Edition)”)“_ like so:'”[^“\ n \ r \\] *(?:\\。[^”\ n \ r \\] *)* “'。单引号表达式可以应用相同的增强功能。请注意,此速度增强功能仅适用于回溯NFA引擎 - 即Javascript,Ruby,PHP,Perl,Python,.NET等。 – ridgerunner 2011-04-30 15:55:33