C# 正则表达式先于破折号

C# 正则表达式先于破折号,c#,regex,character,C#,Regex,Character,我想编写一个正则表达式模式,该模式需要检查以下内容: 每个破折号(-)字符的前面和后面必须紧跟一个字母或数字;不允许使用连续破折号 如何做到这一点?您可以使用下面的简单正则表达式,它使用负前瞻断言 ^(?!-|.*-$|.*-[\W_]|.*[\W_]-).*$ 负前瞻断言中的*-[\W\u]-部分确保-前面或后面没有非单词字符或符号 ^(?!(?:.*-(?=$|-))|-).*$ 试试这个。看演示 这使用了负前瞻来确保-后面没有-或$,并且不是以-开头。我们只知道每个破折号都应该用字

我想编写一个正则表达式模式,该模式需要检查以下内容:

每个破折号(-)字符的前面和后面必须紧跟一个字母或数字;不允许使用连续破折号


如何做到这一点?

您可以使用下面的简单正则表达式,它使用负前瞻断言

^(?!-|.*-$|.*-[\W_]|.*[\W_]-).*$

负前瞻断言中的
*-[\W\u]-
部分确保
-
前面或后面没有非单词字符或
符号

^(?!(?:.*-(?=$|-))|-).*$
试试这个。看演示


这使用了
负前瞻
来确保
-
后面没有
-
$
,并且不是以
-

开头。我们只知道每个破折号都应该用字母或数字包围,但我们不知道整个字符串是否仅限于字母、数字和破折号。此外,如果字符串必须包含破折号,则未指定

假设
@#$abc def#%
是一个有效字符串,我们需要使用以下内容:

@"^[^-]+?(?:(?<=[\da-z])-(?=[\da-z])[^-]+?)*$"

提供一些有效和无效匹配的示例。此示例成功验证了
@-#
,这显然不是有效的输入。@AlexSkalozub这是一个简单的修复方法。您可以用任何需要的内容替换
*
。但OP没有指定任何内容
@"^[\da-z]+(?:-[\da-z]+)*$"