停在第一个角色匹配?

时间:2014-09-21 10:04:20

标签: regex regex-greedy

我想在一个大的html文本中获取某个html节点,但是我的正则表达式中的某些内容很糟糕。

我想获取所有看起来像这样的网址:

<a href="ftp://mysite.com"> some stuff </a>

我正在尝试:

/<a href="ftp:(.+)">/

但有时它会起作用,但有时会抓住所有内容直到下一次关闭>

有没有办法重写这个正则表达式,所以它会停在第一个>

3 个答案:

答案 0 :(得分:1)

让你的正则表达不成熟:

/<a href="ftp:(.+?)">/
//        here __^

或:

/<a href="ftp:([^>"]+)">/

但使用解析器会更好。

答案 1 :(得分:1)

*+是绿色的(尽可能匹配)。通过在他们之后附加?,您可以非贪婪。

/<a href="ftp:(.+?)">/

或者您可以使用否定字符类(")指定排除[^...]

/<a href="ftp:([^"]+)">/

BTW, it's not a good idea to use regular expression to parse HTML.

答案 2 :(得分:1)

+是一个贪心运算符,意味着它尽可能匹配,并且仍允许正则表达式的其余部分匹配。为此,我建议使用否定类,表示除"&#34;一个或多个&#34;之外的任何字符。次。

/<a href="ftp:([^"]+)">/

Live Demo