Regex 正则表达式负前瞻,以防止最后一个字符为连字符
我正在尝试捕获一个或多个2到30个字符之间的单词。这些字符可以包含.、'或-。这个正则表达式实现了这一点Regex 正则表达式负前瞻,以防止最后一个字符为连字符,regex,Regex,我正在尝试捕获一个或多个2到30个字符之间的单词。这些字符可以包含.、'或-。这个正则表达式实现了这一点 [A-Za-z.'-]{2,30} 然而,有一个警告是,我需要确保最后一个字符不是连字符,我尝试的消极前瞻似乎被第一个匹配允许连字符的事实所推翻 如果有人能用一个正则表达式解决这个问题,我将不胜感激 您可以使用以下命令 [a-zA-Z.'-]{1,29}[a-zA-Z.'] 说明: [a-zA-Z.'-]{1,29} # any character of: 'a' to 'z',
[A-Za-z.'-]{2,30}
然而,有一个警告是,我需要确保最后一个字符不是连字符,我尝试的消极前瞻似乎被第一个匹配允许连字符的事实所推翻
如果有人能用一个正则表达式解决这个问题,我将不胜感激 您可以使用以下命令
[a-zA-Z.'-]{1,29}[a-zA-Z.']
说明:
[a-zA-Z.'-]{1,29} # any character of: 'a' to 'z', 'A' to 'Z',
# '.', ''', '-' (between 1 and 29 times)
[a-zA-Z.'] # any character of: 'a' to 'z', 'A' to 'Z', '.', '''
您可以使用以下命令
[a-zA-Z.'-]{1,29}[a-zA-Z.']
说明:
[a-zA-Z.'-]{1,29} # any character of: 'a' to 'z', 'A' to 'Z',
# '.', ''', '-' (between 1 and 29 times)
[a-zA-Z.'] # any character of: 'a' to 'z', 'A' to 'Z', '.', '''
以一种方式匹配除最后一个字符以外的所有字符,然后将最后一个字符匹配为非连字符:
[A-Za-z.'-]{1,29}[A-Za-z.']
以一种方式匹配除最后一个字符以外的所有字符,然后将最后一个字符匹配为非连字符:
[A-Za-z.'-]{1,29}[A-Za-z.']
另一种解决这个问题的方法
[A-Za-z.'-]{2,30}(?<!-)
[A-Za-z.-]{2,30}(?)?
在[A-Za-z.-]{2,30}
之后放置(?确保此匹配中的最后一个字符不是-
。换句话说,在[A-Za-z.-]{2,30}
的匹配之后放置之前没有-
,这是解决此问题的另一种方法
[A-Za-z.'-]{2,30}(?<!-)
[A-Za-z.-]{2,30}(?)?
在[A-Za-z.-]{2,30}
之后放置(?确保此匹配中的最后一个字符不是-
。换句话说,在[A-Za-z.-]{2,30}匹配后的位置之前没有-
不要在字符类中转义特殊字符。谢谢,起初我实际上没有转义,但一位同事告诉我这样做,我将编辑问题。[-a-Za-z.]{2,29}[^-]@qdii,这不会像我相信OP想要的那样匹配2个字符串。它也会匹配像F-&
这样的东西,我相信OP不想要这些东西。@smerny你完全正确!不过,我会留下我的评论,供未来想知道如何不匹配字符的读者(结构[^-]
不要在character类中转义特殊字符。谢谢,起初我实际上没有转义,但一位同事告诉我这样做,我将编辑问题。[-a-Za-z.]{2,29}[^-]@qdii,这不会像我相信OP想要的那样匹配2个字符串。它也会匹配像F-&
这样的东西,我相信OP不想要这些东西。@smerny你完全正确!不过,我会留下我的评论,供未来想知道如何不匹配字符的读者(结构[^-]
谢谢这是一个完美的答案,比hwnd晚了大约20秒,所以我必须在实际回答的问题上给他评分,但我正在投票。谢谢。谢谢。这是一个完美的答案,比hwnd晚了大约20秒,所以我必须在实际回答的问题上给他评分,但我正在投票。谢谢。这在所有版本的regex上都可用吗?@qdii可能不可用,例如JavaScript不支持look back,但由于问题没有使用任何特定的语言标记,我决定将此作为解决所述问题的其他可能方法发布。这在所有版本的regex上都可用吗?@qdii可能不可用,例如JavaScript不支持回头看看,但由于这个问题并没有任何特定的语言标记,所以我决定将此作为解决所描述问题的另一种可能的方法。