正则表达式否定前瞻以防止最后一个字符成为连字符

时间:2014-06-19 18:06:02

标签: regex

我正在尝试捕获2到30个字符之间的单词或多个单词。这些字符可以包含。,'或 - 。这个正则表达式实现了这一点。

[A-Za-z.'-]{2,30}

然而,有一点需要注意的是,我需要确保最后一个字符不是连字符,我对负面预测的尝试似乎被第一个匹配允许连字符的事实所推翻。

如果某人有一个可以在一个正则表达式中解决这个问题的解决方案,我将不胜感激。

3 个答案:

答案 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', '.', '''