我有这个正则表达式
<TAG>foo</TAG>[\s"\w]*\(born[\s<>\w/,]*(\w+)
本文
word word</TAG> "word" <TAG>foo</TAG> (born <TAG>words</TAG>, August 19, 1900
然而,所说的正则表达式只匹配1900年0的最后一个字符。换句话说,从“单词”一直到1900匹配,但只捕获了最后的0。
为什么会这样?
答案 0 :(得分:1)
使用[\s<>\w/,]*(\w+)
时,[\s<>\w/,]*
会占用所有内容并留下足够的字符(\w+)
来匹配(这是最后一个字符)。这解释了你得到了什么。
如果您想获得1900
,那么您可以进行一些小修改:
<TAG>foo</TAG>[\s"\w]*\(born[\s<>\w/,]*\b(\w+)
^^
\b
将匹配单词边界,并强制(\w+)
匹配最后的单词 1 - 因为内部没有单词边界字
1 “Word”是由\w
定义的一个或多个字符的序列。根据模式,\w
可能只包含ASCII字符,也可能包含Unicode字符。
答案 1 :(得分:0)
[\s<>\w/,]*
正在吃你文字中的所有内容。如果它始终固定为四位数,那么您可以使用\d\d\d\d
或\d{4}
,或者如果您坚持使用\ \w{4}
或\w\w\w\w
。
我说的是从最后替换(\w+)
。这意味着最少一个或多个。