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编写的。我没有发现任何关于使用哪种类型的正则表达式引擎的文档,也没有关于它在输入值后如何处理该值的文档。