RegEx多重匹配

时间:2014-06-26 03:55:27

标签: regex

我在使用正则表达式匹配时遇到问题。这是字符串:

(<a href="HTTP://WWW.TEST.COM/TEST/TEST.JPG">LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT.</a>) LOREM IPSUM DOLOR <a href="HTTP://WWW.TEST.COM/TEST/TEST.JPG">SIT AMET</a> CONSECTETUR ADIPISCING ELIT.

我正在使用的正则表达式模式是:

/(<)(.*=")(.*)(">)(.*)(<\/.*>)/g

问题在于,由于正则表达式模式中最后一个匹配组之前的.*,它只获得了一个匹配。我希望它找到该模式的两个匹配(在此字符串中有)。如何在搜索时在>的第一个实例中查找停靠点?我认为这样可以解决问题。

我听说它叫'非贪心'?我尝试了+?,但似乎都不能解决我正在做的事情。

谢谢!

2 个答案:

答案 0 :(得分:1)

以下内容从>的第一次出现开始和停止匹配,正则表达式中的>也匹配以下>符号。

\(<[^>]*>

DEMO

如果您只想匹配<a href链接,请尝试使用此正则表达式

\(?(<a[^>]*>)

DEMO

答案 1 :(得分:1)

  1. FYI和FWIW,SO上接受的智慧是正则表达式不是解析HTML的最好方法......
  2. 但是如果你坚持使用正则表达式,那么主要的问题是你的.*量词会将所有字符都占用到字符串的末尾。这可以通过添加?来修复,使量词“懒惰”:.*?
  3. *量词表示zero or more。它会导致.点将每个字符匹配到字符串的末尾...然后,为了使正则表达式的其余部分匹配,引擎会回溯...因此.*结束匹配最长的匹配,而不是最短的匹配。相比之下,.*?会让你走上最短的比赛之路(下面的文章中有一些注意事项。)

    <强>参考