正则表达式跳过特定的短语

时间:2015-10-07 13:25:05

标签: regex

让正则表达式通过字符“读取”并停止捕获特定短语的最佳方法是什么?我用了很多时间。*?和。+?将不需要的字符传递给特定的字符串或标记,然后捕获。

我想阅读任何字符,直到我找到特定的短语或标签。我通常会做一些像

这样的事情
date.*?<.*?>(\w+)<.*?>

来自一个看起来像

的字符串

datestuffstuffstuffstuff<tag>animal<tag>

这可以在一个简单的例子中工作,但引擎会丢失10K字符文本以匹配。当我进入捕获时,我需要更具体吗?正则表达式简体中文:跳过字符,直到你到达这个短语然后捕获。

1 个答案:

答案 0 :(得分:1)

由于您在询问如何解析纯文本,我可以建议使用否定字符类,即[^ + CHARACTERS_THAT_SHOULD_NOT_BE_MATCHED + ]

否定字符类是最有效的正则表达式子模式。考虑

word one#word 2#more text

#(.*?)#将需要18个步骤才能找到匹配项,而#(\[^#\]*)#将分6个步骤完成。

此外,.默认情况下与换行符不匹配,您需要使用(?s)/s或其他不同风格的方式指定DOTALL模式。

如果您需要在2个或更多必需字符之间匹配一些不必要的文字,那么您必须使用.* / .*?(带或不带dotall修饰符),或 - 如果您需要最接近的匹配 - tempered greedy token(特别是,如果必须排除某些子字符串)。