我在使用正则表达式匹配时遇到问题。这是字符串:
(<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
问题在于,由于正则表达式模式中最后一个匹配组之前的.*
,它只获得了一个匹配。我希望它找到该模式的两个匹配(在此字符串中有)。如何在搜索时在>
的第一个实例中查找停靠点?我认为这样可以解决问题。
我听说它叫'非贪心'?我尝试了+
和?
,但似乎都不能解决我正在做的事情。
谢谢!
答案 0 :(得分:1)
以下内容从>
的第一次出现开始和停止匹配,正则表达式中的>
也匹配以下>
符号。
\(<[^>]*>
如果您只想匹配<a href
链接,请尝试使用此正则表达式
\(?(<a[^>]*>)
答案 1 :(得分:1)
.*
量词会将所有字符都占用到字符串的末尾。这可以通过添加?
来修复,使量词“懒惰”:.*?
*
量词表示zero or more
。它会导致.
点将每个字符匹配到字符串的末尾...然后,为了使正则表达式的其余部分匹配,引擎会回溯...因此.*
结束匹配最长的匹配,而不是最短的匹配。相比之下,.*?
会让你走上最短的比赛之路(下面的文章中有一些注意事项。)
<强>参考强>