Regex 与单词匹配的正则表达式,或不匹配

Regex 与单词匹配的正则表达式,或不匹配,regex,perl,pcre,Regex,Perl,Pcre,我真的很难给它贴上标签,这可能就是为什么我无法通过搜索找到我需要的东西 我希望符合以下条件: /[aA]uto(?:matic)?[ ]*[rR]eply/ /[aA]uto(?:matic[ ]*|[ ]+)[rR]eply/ 自动回复 自动回复 自动折叠 我使用的平台不允许指定不区分大小写的搜索。我尝试了以下正则表达式: .*[aA]uto(?:matic)[ ]*[rR]eply.* 认为(?:matic)会使我的表达式匹配Auto或Automatic。但是,它只匹配自动 我做

我真的很难给它贴上标签,这可能就是为什么我无法通过搜索找到我需要的东西

我希望符合以下条件:

/[aA]uto(?:matic)?[ ]*[rR]eply/
/[aA]uto(?:matic[ ]*|[ ]+)[rR]eply/
  • 自动回复
  • 自动回复
  • 自动折叠
我使用的平台不允许指定不区分大小写的搜索。我尝试了以下正则表达式:

.*[aA]uto(?:matic)[ ]*[rR]eply.*
认为
(?:matic)
会使我的表达式匹配
Auto
Automatic
。但是,它只匹配
自动

  • 我做错了什么
  • 这里合适的术语是什么

这是将Perl用于正则表达式引擎(我认为这是
PCRE
,但我不确定)。

您可以将此正则表达式与行开始/结束锚一起使用:

^[aA]uto(?:matic)? *[rR]eply$
说明:

^ assert position at start of the string
[aA] match a single character present in the list below
aA a single character in the list aA literally (case sensitive)
uto matches the characters uto literally (case sensitive)
(?:matic)? Non-capturing group
Quantifier: Between zero and one time, as many times as possible, giving back as needed 
[greedy]
matic matches the characters matic literally (case sensitive)
 * matches the character   literally
Quantifier: Between zero and unlimited times, as many times as possible, giving back 
as needed [greedy]
[rR] match a single character present in the list below
rR a single character in the list rR literally (case sensitive)
eply matches the characters eply literally (case sensitive)
$ assert position at end of the string
(?:…)
与regex模式的关系就像
(…)
与算术的关系一样:它只是覆盖优先级

 ab|cd        # Matches ab or cd
 a(?:b|c)d    # Matches abd or acd
一个
量词使匹配成为可选的

 a?           # Matches a or an empty string
 abc?d        # Matches abcd or abd
 a(?:bc)?d    # Matches abcd or ad
你想要

(?:matic)?
如果没有不必要的前导和尾随
*
,我们将得到以下结果:

/[aA]uto(?:matic)?[ ]*[rR]eply/
/[aA]uto(?:matic[ ]*|[ ]+)[rR]eply/

正如@adamdc78所指出的,它自动匹配
AutoReply
。使用以下方法可以避免这种情况:

/[aA]uto(?:matic)?[ ]*[rR]eply/
/[aA]uto(?:matic[ ]*|[ ]+)[rR]eply/

这应该起作用:

/.*[aA]uto(?:matic)? *[rR]eply/
您只是在
(?:matic)

这假设您不希望
AutoReply
成为有效的点击


你只是错过了正则表达式中的。如果您希望在回复后匹配整行内容,那么在末尾添加
*
就可以了,但是您的问题没有指定您要查找的内容。

略有不同。同样的结果

m/([aA]uto(matic)? ?[rR]eply)/
测试依据:

Some other stuff....
    Auto Reply
    Automatic Reply
    AutomaticReply

Now some similar stuff that shouldn't match (auto).

是否需要
?:
?我可以只做
(matic)
吗?@crush你可以,但是那时
matic
将被放在一个捕获组中;除非您确实需要
matic
的值,否则捕获组没有意义。@HunterMcMillen感谢您的澄清。我是这么想的,但我不确定。捕获组后是否有
的技术名称?@crush它是一个量词。
(matic)?
不必要地捕获。你可以那样做,但那是浪费。在我的回答中将“修饰符”更改为“量词”。如果这是一个Perl正则表达式,则在开始和结束时不需要
*
,因为默认情况下正则表达式可以匹配字符串的任何部分,而不需要匹配所有部分。您可以使用
(?^i:…)
扩展模式向正则表达式添加修饰符。@TLP我会尝试一下。我所拥有的只是OTRS中web表单上的一个输入字段,它允许我指定一个正则表达式。我还没有深入研究源代码以了解它对输入的作用,但是您所说的可能会很好地工作。谢谢。
perl
!=<代码>PCRE。另外,您的平台如何不允许区分大小写?您是否尝试过在您的正则表达式中设置
i
修饰符,如
(?i)auto(?:matic)?\s*reply
?仅供参考,PCRE和Perl正则表达式引擎是不同的,但大多数是兼容的正则表达式系统。现代Perl甚至支持可插入的正则表达式引擎。有关更多信息,请参阅和。感谢提供信息。我使用的是OTRS,它提供了一个提交正则表达式的Web表单。我不确定在那里之后它会做什么。我知道OTRS是用Perl编写的。我没有发现任何关于使用哪种类型的正则表达式引擎的文档,也没有关于它在输入值后如何处理该值的文档。