用于执行和查找最后匹配项的正则表达式
RegEx for enforcing and finding the last match
我正在尝试从字符串中提取名称的一部分。我几乎做到了,但是我使用正向前瞻的地方有些不对。
这是我的正则表达式:(?=s\s(.*?)$)
我已经用粗体文本标记了我想要的所有结果。
Trittbergets Ronja
Minitiger's Samanta Junior
Björntorpets Cita
Sors Kelly's Majsskalle
问题是 Kelly's Majsskalle
被返回,而它应该只返回 select Majsskalle
.
这里有一个link到regex101调试用:
https://regex101.com/r/PZWxr7/1
如何让前瞻性忽略第一场比赛?
您需要强制执行正则表达式引擎以使用 dot-star:
查找最后一个匹配项
^.*s\s(.*)$
A .*
立即消耗所有内容直至换行符,然后引擎回溯以匹配下一个模式。
或使用钢化点:
s(?= ((?:(?!s ).)+)$)
^^^^^^^^^^
Match a byte only if we are not pointing at a `s[ ]`
注意:前者为优
前瞻应用于确定捕获的开始或捕获的结束。要在第一次捕获 之后开始捕获,您需要使用后视 - 这可确保捕获之前的文本是该搜索模式。
将您在 regex101 上的模式更新为此,您将看到不同之处:
(?<=s\s).*?$
编辑 - 不好意思,我没看到最后一行。
您还可以包含一个 negative 前瞻以确保在下一个匹配中没有另一个词以 s
结尾:
(?<=s\s)(?!.+?s\s).*?$
这解决了最后一行的问题。
不需要向前看。试试这个:
.*s\s(.*?)$
我正在尝试从字符串中提取名称的一部分。我几乎做到了,但是我使用正向前瞻的地方有些不对。
这是我的正则表达式:(?=s\s(.*?)$)
我已经用粗体文本标记了我想要的所有结果。
Trittbergets Ronja
Minitiger's Samanta Junior
Björntorpets Cita
Sors Kelly's Majsskalle
问题是 Kelly's Majsskalle
被返回,而它应该只返回 select Majsskalle
.
这里有一个link到regex101调试用: https://regex101.com/r/PZWxr7/1
如何让前瞻性忽略第一场比赛?
您需要强制执行正则表达式引擎以使用 dot-star:
查找最后一个匹配项^.*s\s(.*)$
A .*
立即消耗所有内容直至换行符,然后引擎回溯以匹配下一个模式。
或使用钢化点:
s(?= ((?:(?!s ).)+)$)
^^^^^^^^^^
Match a byte only if we are not pointing at a `s[ ]`
注意:前者为优
前瞻应用于确定捕获的开始或捕获的结束。要在第一次捕获 之后开始捕获,您需要使用后视 - 这可确保捕获之前的文本是该搜索模式。
将您在 regex101 上的模式更新为此,您将看到不同之处:
(?<=s\s).*?$
编辑 - 不好意思,我没看到最后一行。
您还可以包含一个 negative 前瞻以确保在下一个匹配中没有另一个词以 s
结尾:
(?<=s\s)(?!.+?s\s).*?$
这解决了最后一行的问题。
不需要向前看。试试这个:
.*s\s(.*?)$