正则表达式过度匹配问题

现在有这个字符串,想通过正则匹配name后面的书名,

<book id=100000059 name=测试极品全能巨星></book> <book id=100000059 name=测试极品全能巨星11></book>

正则表达式为  

<book.+.><\/book>

发现只能匹配到第一个,因为有重复元素,这个正则表达式匹配的为开头和结尾,中间的忽略掉了, 这是因为*和+都是贪婪型的元字符,他们在匹配时可能从一段文字开头匹配到文字结尾,而不是从第一段开头碰到第一个匹配为止,

当不需要这种贪婪行为时,可以使用这些元字符的懒惰型版本,会尽可能匹配少的元素,懒惰型元符只需要在贪婪型后面加上?

*   -> *?
+   -> +?
{n,} ->  {n,}?

所有正则表达式变为下面这个,可以全部匹配到

<book.+?.><\/book>

 

  


 

posted @ 2022-05-05 19:40  木马不是马  阅读(116)  评论(0编辑  收藏  举报