正则expression式 – 如何匹配除特定模式以外的所有内容
如何编写正则expression式来匹配任何不符合特定模式的string? 我面临的情况是必须匹配(A和B)模式。
你可以使用前瞻性的断言:
(?!999)\d{3}  这个例子匹配999以外的三个数字。 
但是,如果您碰巧没有使用此function进行正则expression式实现(请参阅正则expression式风格的比较 ),则可能必须自行构build带有基本function的正则expression式。
只有基本语法的兼容正则expression式是:
 [0-8]\d\d|\d[0-8]\d|\d\d[0-8] 
 这也匹配任何不是999三位数字序列。 
如果要在string中匹配单词A而不匹配单词B.例如:如果您有一个文本:
 1. I have a two pets - dog and a cat 2. I have a pet - dog 
如果你想search一条有宠物狗的文本行,而且没有猫,你可以使用这个正则expression式:
 ^(?=.*?\bdog\b)((?!cat).)*$ 
它只会find第二行:
 2. I have a pet - dog 
匹配模式并使用主机语言来反转匹配的布尔结果。 这将更清晰和可维护。
而不是复活这个古老的问题,因为它有一个没有提到的简单解决scheme。 (find你的问题,同时做一个正则expression式赏金任务的研究 。)
我面临的情况是必须匹配(A和B)模式。
 这个基本的正则expression式非常简单: B|(A) 
你只是忽略整个比赛,并检查第1组捕获,其中将包含A.
 一个例子(关于在正则expression式中parsinghtml的所有免责声明):A是数字,B是<a tag内的数字 
 正则expression式: <a.*?<\/a>|(\d+) 
演示 (查看右下窗格中的组1)
参考
除了情况s1,s2,s3,如何匹配模式
除非…匹配模式
 常规语言的补充也是一种常规语言,但要构build它,必须为常规语言构buildDFA ,并使任何有效的状态更改为错误。 看到这个例子。 页面没有说的是它将/(ac|bd)/转换为/(a[^c]?|b[^d]?|[^ab])/ 。 从DFA转换回正则expression式并不是微不足道的。 如果您可以使用正则expression式并更改代码中的语义,就像前面提出的一样,这样会更容易。 
模式 – 重新
 str.split(/re/g) 
将返回除模式外的所有内容。
在这里testing
我的答案也可以解决你的问题:
https://stackoverflow.com/a/27967674/543814
- 而不是replace,你可以使用匹配。
-  您可以读取组$2,而不是组$1。
-  组$2被捕获在那里,你会避免。
例:
 Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)"); 
 第一个捕获组指定了你希望避免的模式。 最后一个捕获组捕获其他所有内容。 简单地读出那个组, $2 。 
 (B)|(A) 
然后使用什么组2捕获…