Regex 在单词中的任意位置匹配零个或一个特定字符
我正在努力寻找一个正则表达式来满足这个规则: 单词可以包含任何英文字母字符、撇号和单连字符,但不接受双连字符 所以这些都很好:Regex 在单词中的任意位置匹配零个或一个特定字符,regex,Regex,我正在努力寻找一个正则表达式来满足这个规则: 单词可以包含任何英文字母字符、撇号和单连字符,但不接受双连字符 所以这些都很好: o'clock brother-in-law 但这不是: stack--overflow 到目前为止,我得到的是: ^[a-zA-Z\']*\-?$ 如果连字符位于字符串的末尾,但显然不是我所需要的字符串中的任何位置,那么它将起作用 提前感谢,, 卢克你可以试试这个 ^(?!.*--)[A-Za-z'-]+$ 但这允许”如果您不喜欢,请使用以下选项 ^(?!.*
o'clock
brother-in-law
但这不是:
stack--overflow
到目前为止,我得到的是:
^[a-zA-Z\']*\-?$
如果连字符位于字符串的末尾,但显然不是我所需要的字符串中的任何位置,那么它将起作用
提前感谢,,
卢克你可以试试这个
^(?!.*--)[A-Za-z'-]+$
但这允许”
如果您不喜欢,请使用以下选项
^(?!.*(?:--|''))[A-Za-z'-]+$
我认为您可以只使用简单的正则表达式,而不使用任何lookaheads:
^[A-Za-z']+(?:[-'][A-Za-z]+)*$
看
说明:
-字符串的开头^
-1个或多个英文字母或A[A-Za-z']+
'
-与0次或多次出现的(?:[-'][A-Za-z]+)*
-连字符或撇号[-']
-1个或多个英文字母[A-Za-z]+
-字符串结尾$
”
又有-
,并且“单词”可以以连字符结尾,则可以使用:
^-?[A-Za-z']+(?:-['A-Za-z]+)*-?$
说明:
-字符串的开头^
-可选连字符-?
-1个或多个字母或撇号[A-Za-z']+
-一个非捕获组,与序列的0倍或更多倍相匹配(?:-['A-Za-z]+)*
-连字符-
-1个或多个撇号或字母['A-Za-z]+
-在-?
-字符串结束$
/i
,您还可以将其缩短为
/^-?[a-z']+(?:-['a-z]+)*-?$/i
请参见也将匹配。可以吗?如果你不想在一开始就允许hypen
^(?。*(?:-|“”)[A-Za-z'-]+$
我认为这实际上很好@Stribizev,但是谢谢你在编辑后提供的额外答案,这也很好,非常感谢:)是的,我知道,有时候,比比比比比比比比比比比比比比比比比比比比比比比比比比比比好。@Jonny5:现在,我没有环顾四周就成功了。无论什么时候,只要有一条路没有它们,我就更喜欢那条路。斯特里比雪夫的优势是什么?速度简单我需要它来配摇滚乐way@LukeBenting:是的,性能。既然你说可以使用连续撇号,我想你可以试试。或者,如果您的“单词”可以以连字符结尾,您可以尝试。您是否一定要使用单个正则表达式来确保字符串包含字母、撇号和单个连字符?首先确保这些字符的存在,然后测试是否有连续的连字符,这样会更简单、更快。@Jerry:我更愿意,只是为了让代码更干净一点,你为什么不建议这样做?性能?性能和可读性。可靠性是因为。。。如果没有解释的话,你能告诉我下面的正则表达式实际上是怎么做的吗?下一个接替您的人(在业务环境中)会怎样?如果有更高的限制,他们是否能够修改代码?