简单的正则表达式问题..
我有一个非常基本的表达式,用于在两个单词之间拉出文本:
BEGN: (.*?)DETAIL:
当两个单词都存在时哪个有效,但在某些情况下没有" DETAIL:"所以在那些情况下我只想捕捉到文本的结尾。这可能是单个表达式,还是需要某种类型的条件语句?
答案 0 :(得分:2)
如果可以缺少尾随分隔符,请使用tempered greedy token或展开的分隔符:
BEGN: ((?:(?!DETAIL:).)*)
(?:(?!DETAIL:).)*
匹配第一个DETAIL:
之前的任何文字。您可以在\b
之前添加单词边界D
,以便仅匹配整个单词的DETAIL
。
如果文本可以跨越多行,请不要忘记DOTALL修饰符。如果使用展开的版本,则不需要DOTALL修饰符:
BEGN: ([^D]*(?:D(?!ETAIL:)[^D]*)*)
请参阅another demo