具有高级字符的非贪婪模式
Non-greedy pattern with advance characters
我有一个想要匹配的简单模式。在这句话中:
great. This is great&great&great. great.
我想立即匹配 仅 'great' 个单词 'This is'。因此,第一个伟大的 不会 被归还,但接下来的三个必须被归还。最后一个应该不是。
我的表情是
This is (great&)*?(great)
但这returns只是第一个伟大的。我阅读了有关贪婪和非贪婪模式的信息,当我不必担心提前 'This is' 时,它非常有效。但是这些高级字符检查对我的用例很重要。我怎样才能得到所需的结果?
我可以使用:
This is (great&){0}(great)
第一场比赛,
This is (great&){1}(great)
第二次,依此类推。但这是一个麻烦的解决方案,我想我遗漏了一些关于非贪婪模式行为的信息。感谢任何帮助。谢谢!
一种选择是使用 alternation 并匹配您不需要的内容,并在单词边界之间使用 great
的捕获组。
^.*?This is |\b(great)\b
^
字符串开头
.*?This is
使用惰性量词 .*?
匹配第一次出现的 This is
|
或
\b(great)\b
捕获组 1 中单词边界之间的伟大
看到一个Regex demo
更新
更新问题的一个可能解决方案是在一个交替中使用 2 个正后视。
(?:(?<=\bThis is )|(?<=\S))\bgreat\b
(?:
非捕获组
(?<=\bThis is )
正面回顾,断言左边的是 This is
|
或
(?<=\S)
正面回顾,断言左边是非空白字符
)
关闭非捕获组
\bgreat\b
单词边界之间的匹配很好
我有一个想要匹配的简单模式。在这句话中:
great. This is great&great&great. great.
我想立即匹配 仅 'great' 个单词 'This is'。因此,第一个伟大的 不会 被归还,但接下来的三个必须被归还。最后一个应该不是。
我的表情是
This is (great&)*?(great)
但这returns只是第一个伟大的。我阅读了有关贪婪和非贪婪模式的信息,当我不必担心提前 'This is' 时,它非常有效。但是这些高级字符检查对我的用例很重要。我怎样才能得到所需的结果?
我可以使用:
This is (great&){0}(great)
第一场比赛,
This is (great&){1}(great)
第二次,依此类推。但这是一个麻烦的解决方案,我想我遗漏了一些关于非贪婪模式行为的信息。感谢任何帮助。谢谢!
一种选择是使用 alternation 并匹配您不需要的内容,并在单词边界之间使用 great
的捕获组。
^.*?This is |\b(great)\b
^
字符串开头.*?This is
使用惰性量词.*?
匹配第一次出现的 |
或\b(great)\b
捕获组 1 中单词边界之间的伟大
This is
看到一个Regex demo
更新
更新问题的一个可能解决方案是在一个交替中使用 2 个正后视。
(?:(?<=\bThis is )|(?<=\S))\bgreat\b
(?:
非捕获组(?<=\bThis is )
正面回顾,断言左边的是This is
|
或(?<=\S)
正面回顾,断言左边是非空白字符
)
关闭非捕获组\bgreat\b
单词边界之间的匹配很好