我想从多行文本字段中排除特定模式。我有一个捕获该模式的正则表达式,所以现在我想创建一个匹配除此模式之外的所有内容的表达式。对此的一般方法是什么?出于某种原因,像这样的负前瞻:^(.(?!expression))*$
对我不起作用。
问问题
356 次
3 回答
3
描述
^(?!.*?\btest\b)
这将搜索要查找的字符串test
,如果字符串中存在,则测试将失败。另请参阅示例
概括
^
匹配字符串的开头(?!
往前看是否有:.*?
除 \n 以外的任何字符(0 次或多次(匹配尽可能少的数量))\b
单词 char (\w) 和非单词 char 之间的边界test
匹配test
\b
单词 char (\w) 和非单词 char 之间的边界)
前瞻结束
于 2013-05-28T14:11:16.690 回答
2
你只是把点放在了错误的地方。您需要在使用下一个字符之前进行前瞻,而不是之后:
^(?:(?!expression).)*$
此外,如果字符串中可以有行分隔符,则需要指定多行/DOTALL 模式。你如何做到这一点取决于你使用的正则表达式风格。一些例子:
(?s)^(?:(?!expression).)*$
/^(?:(?!expression).)*$/s
^(?:(?!expression)[\s\S])*$
或者你可以使用Denomales 的解决方案,它更容易理解。
于 2013-05-28T14:47:47.430 回答
0
我发现这个表达式对我有用:
^.*(?=expression)
whereexpression
表示与我要排除的模式匹配的正则表达式。我推荐这个工具进行测试 - http://gskinner.com/RegExr/
于 2013-05-28T15:47:46.777 回答