我正在尝试使用正则表达式将字符串分成两部分。该字符串的格式如下:
text to extract<number>
我一直在使用(.*?)<并且<(.*?)>工作正常,但是在稍微阅读了正则表达式之后,我才开始想知道为什么我需要?在表达式中。我只是在通过这个网站找到它们之后才这样做,所以我不确定有什么区别。
(.*?)<
<(.*?)>
?
这是贪婪量词和非贪婪量词之间的区别。
考虑输入101000000000100。
101000000000100
使用1.*1,*是贪心的 - 它会一直匹配到最后,然后回溯直到它可以匹配1,留下1010000000001. .*?是非贪婪的。*将不匹配任何内容,但随后将尝试匹配额外字符,直到匹配1,最终匹配101.
1.*1
*
1
1010000000001
.*?
101
所有量词都有一个非贪婪模式:.*?, .+?, .{2,6}?, 和 even .??。
.+?
.{2,6}?
.??
在您的情况下,类似的模式可能是<([^>]*)>- 匹配除大于号以外的任何字符(严格来说,它匹配除>中间<和之外的零个或多个字符>)。
<([^>]*)>
>
<
请参阅 量词备忘单 。