[英]Regex - how to match everything except a particular pattern
如何编写正则表达式来匹配任何不符合特定模式的字符串? 我面临必须匹配 (A and ~B) 模式的情况。
您可以使用前瞻断言:
(?!999)\d{3}
此示例匹配999
以外的三个数字。
但是,如果您碰巧没有具有此功能的正则表达式实现(请参阅正则表达式风格的比较),您可能必须自己构建具有基本功能的正则表达式。
仅具有基本语法的兼容正则表达式将是:
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
这也匹配任何不是999
的三位数字序列。
如果要匹配字符串中的单词 A 而不是匹配单词 B。例如:如果您有文本:
1. I have a two pets - dog and a cat
2. I have a pet - dog
如果你想搜索有宠物狗但没有猫的文本行,你可以使用这个正则表达式:
^(?=.*?\bdog\b)((?!cat).)*$
它只会找到第二行:
2. I have a pet - dog
匹配模式并使用宿主语言反转匹配的 boolean 结果。 这将更加清晰和可维护。
我在这里的回答也可能解决您的问题:
https://stackoverflow.com/a/27967674/543814
$1
,您将阅读 group $2
。$2
在那里不被捕获,这是你会避免的。例子:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
第一个捕获组指定您希望避免的模式。 最后一个捕获组捕获其他所有内容。 只需读出该组$2
。
(B)|(A)
然后使用第 2 组捕获的内容...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.