正则表达式可选或零,(?)使用混乱

时间:2014-10-06 10:04:56

标签: regex

我想匹配这些

<div class="name">a</div>
<div class="name">b</div>
<div class="name">c</div>

这样就足够了:<div class="name">(.*)<\/div> ??

<div class="name">(.*?)<\/div>

以及为什么[<div class="name">](.*)[/div]不匹配?

1 个答案:

答案 0 :(得分:0)

<div class="name">.*?</div>

可能效果最好。使用贪婪版本<div class="name">.*</div>会将多个<div>匹配为一个,例如<div class="name">foo</div><div>bar</div>整体匹配。


[<div class="name">](.*)[/div]

不起作用,因为方括号[]表示字符类。那么模式的作用是:

[<div class="name">] // match one of the characters `<div clas="nme>` literally
(.*) // match any character except newline, any number of times
[/div] // match one of the characters `/div` literally

P.S。:请注意,<div class="name">.*?</div>不能使用嵌套的<div>。 例如。在

<div class="name">
    <div>foo</div>
</div>

它只匹配

<div class="name">
    <div>foo</div>

因为该模式仅使用字符串直到第一次出现</div>