Answers:
您可以使用先行断言:
(?!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
不是,请复活这个古老的问题,因为它有一个未提及的简单解决方案。(在进行正则表达式赏金任务研究时发现了您的问题。)
我面临着必须匹配(A和〜B)模式的情况。
基本的正则表达式非常简单: B|(A)
您只需忽略整体匹配并检查第一个组捕获的数据,其中将包含A。
一个示例(包含所有在正则表达式中解析html的免责声明):A是数字,B是其中的数字 <a tag
正则表达式: <a.*?<\/a>|(\d+)
演示(在右下方窗格中查看第1组)
参考
\d
为之后,也无法在Emacs中使用[[:digit:]]
。第一个参考文献提到它特定于Perl和PHP:“使用特定于Perl和PHP的语法的一种变体可以实现相同的功能。”
常规语言的补充也是一种常规语言,但是要构造它,您必须为常规语言构建DFA,并将任何有效的状态更改都转化为错误。见这是一个例子。页面未说的是它已转换/(ac|bd)/
为/(a[^c]?|b[^d]?|[^ab])/
。从DFA转换回正则表达式并非易事。如果像以前建议的那样,可以不变地使用正则表达式并更改代码中的语义会更容易。
replace
str.replace(/re/g, '')
,因此无需重新加入它们。还可以把尾随\扔进去吗?就像str.replace(/\re\s?/g, '')
这样,您摆脱了在字符串中间替换
我在这里的答案也可以解决您的问题:
https://stackoverflow.com/a/27967674/543814
$1
您可以阅读group 而不是group $2
。$2
禁止在该群组中进行分组,您可以避免。例:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
第一个捕获组指定您要避免的模式。最后一个捕获组捕获其他所有内容。只需读出该组,即可$2
。
findstr
标签,因为此处的所有答案均不适用于该标签。