简单的正则表达式问题..
我有一个非常基本的表达式,用于在两个单词之间提取文本:
BEGN: (.*?)DETAIL:
当两个单词都存在时,效果很好,但在某些情况下,没有“DETAIL:”,所以在这些情况下,我只想捕获到文本的末尾。这可以用单个表达式实现吗?还是我需要某种类型的条件语句?
最简单的方法是使用带有$
(字符串末尾锚点)交替:
BEGN: (.*?)(?:DETAIL:|$)
BEGN: (.*?)(?=DETAIL:|$)
(?<=BEGN: ).*?(?=DETAIL:|$)
See the 正则表达式演示.
The (?:DETAIL:|$)
是一个匹配的非捕获组DETAIL:
或字符串末尾。其他两种情况类似,只是将左侧和右侧分隔符放入非消耗环视中,以便可以从匹配值中省略它们匹配的文本。
还有其他解决方案。
如果尾部分隔符可以不存在,请使用脾气暴躁的贪婪令牌或展开的:
BEGN: ((?:(?!DETAIL:).)*)
See a 正则表达式演示
The (?:(?!DETAIL:).)*
匹配第一个之前的任何文本DETAIL:
。您可以添加单词边界\b
before D
以便仅匹配DETAIL
这是一个完整的词。
如果文本可以跨越多行,请不要忘记 DOTALL 修饰符。如果您使用展开版本,则不需要 DOTALL 修饰符:
BEGN: ([^D]*(?:D(?!ETAIL:)[^D]*)*)
See 另一个演示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)