我正在尝试捕获2到30个字符之间的单词或多个单词。这些字符可以包含。,'或 - 。这个正则表达式实现了这一点。
[A-Za-z.'-]{2,30}
然而,有一点需要注意的是,我需要确保最后一个字符不是连字符,我对负面预测的尝试似乎被第一个匹配允许连字符的事实所推翻。
如果某人有一个可以在一个正则表达式中解决这个问题的解决方案,我将不胜感激。
答案 0 :(得分:4)
另一种解决此问题的方法
[A-Za-z.'-]{2,30}(?<!-)
在(?<!-)
之后放置negative-look-behind [A-Za-z.'-]{2,30}
可确保此匹配的最后一个字符不是-
。换句话说,在-
[A-Za-z.'-]{2,30}
答案 1 :(得分:2)
匹配除最后一个字符以外的所有字符,然后将最后一个字符与非连字符匹配:
[A-Za-z.'-]{1,29}[A-Za-z.']
答案 2 :(得分:1)
您可以使用以下内容。
[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', '.', '''