我希望创建一个正则表达式,该表达式匹配以可选减号-开头并以减号结尾的字符串。两者之间必须以字母(大写或小写)开头,字母、数字的任何组合都可以跟着,最多可以包含一个asterix (*)。
到目前为止我已经想出了这个
[-]?[a-zA-Z]+[a-zA-Z0-9(*{0,1})]*[-]一些我想要达到的目标的例子。
"-yyy-" // valid
"-u8r*y75-" // valid
"-u8r**y75-" // invalid发布于 2017-11-30 19:39:53
代码
^-?[a-z](?!(?:.*\*){2})[a-z\d*]*-$或者,您可以使用下面的regex实现相同的结果,而不必使用负前瞻性。
^-?[a-z][a-z\d]*(?:\*[a-z\d]*)?-$结果
输入
** VALID **
-yyy-
-u8r*y75-
** INVALID **
-u8r**y75-输出
-yyy-
-u8r*y75-解释
^在行开始处的断言位置-?匹配零或连字符-之一[a-z]在a和z之间匹配一个alpha字符。请注意,i修饰符是打开的,因此这也将匹配相同字母的大写变体。(?!(?:.*\*){2})负前瞻性确保以下内容与不匹配(?:.*\*){2}匹配星号*两次
[a-z\d*]*匹配a和z之间的任意ASCII字母,或数字,或星号符号*,任意次数。-与这个字符匹配$断言在行尾的位置https://stackoverflow.com/questions/47581197
复制相似问题