如何编写正则表达式来匹配任何不符合特定模式的字符串?我面临着必须匹配(A 和〜B)模式的情况。

有帮助吗?

解决方案

您可以使用前瞻声明:

(?!999)\d{3}

此示例匹配999以外的三个数字。


但是如果您没有使用此功能的正则表达式实现(请参阅正则表达式的比较),您可能需要自己构建一个具有基本功能的正则表达式。

仅具有基本语法的兼容正则表达式为:

[0-8]\d\d|\d[0-8]\d|\d\d[0-8]

这也匹配任何不是<=>的三位数序列。

其他提示

如果要匹配字符串中的单词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

匹配模式并使用宿主语言反转匹配的布尔结果。这将更加清晰易读。

notnot,复活这个古老的问题,因为它有一个没有提到的简单解决方案。 (在为正则表达式赏金任务进行一些研究时找到您的问题。)

  

我面临的情况是我必须匹配(A和~B)   图案。

基本的正则表达式非常简单:B|(A)

您只需忽略整体匹配并检查第1组捕获,其中包含A。

一个例子(关于在正则表达式中解析html的所有免责声明):A是数字,B是<a tag

中的数字

正则表达式:<a.*?<\/a>|(\d+)

演示(查看右下方的第1组)

参考

除情况s1,s2,s3外,如何匹配模式

如何匹配模式,除非......

常规语言的补充也是常用语言,但要构建它,您必须构建 DFA 用于常规语言,并将任何有效状态更改为错误。有关示例,请参见。页面没有说的是它将/(ac|bd)/转换为/(a[^c]?|b[^d]?|[^ab])/。从DFA转换回正则表达式并非易事。如果您可以更改正则表达式并更改代码中的语义(如之前建议的那样),则会更容易。

模式 - 重新

str.split(/re/g) 

将返回除模式之外的所有内容。

测试此处

我在这里的回答也许也能解决你的问题:

https://stackoverflow.com/a/27967674/543814

  • 您可以使用“匹配”而不是“替换”。
  • 而不是团体 $1, ,你会读到组 $2.
  • 团体 $2 在那里被设为非捕获,你会避免这种情况。

例子:

Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");

第一个捕获组指定您希望避免的模式。最后一个捕获组捕获其他所有内容。只需读出该组, $2.

(B)|(A)

然后使用第2组捕获的内容......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top