Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式负前瞻,以防止最后一个字符为连字符_Regex - Fatal编程技术网

Regex 正则表达式负前瞻,以防止最后一个字符为连字符

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',

我正在尝试捕获一个或多个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' 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不支持回头看看,但由于这个问题并没有任何特定的语言标记,所以我决定将此作为解决所描述问题的另一种可能的方法。