首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使字符类中最多可取一个星号的正则表达式?

如何使字符类中最多可取一个星号的正则表达式?
EN

Stack Overflow用户
提问于 2017-11-30 19:28:45
回答 3查看 959关注 0票数 0

我希望创建一个正则表达式,该表达式匹配以可选减号-开头并以减号结尾的字符串。两者之间必须以字母(大写或小写)开头,字母、数字的任何组合都可以跟着,最多可以包含一个asterix (*)。

到目前为止我已经想出了这个

代码语言:javascript
复制
[-]?[a-zA-Z]+[a-zA-Z0-9(*{0,1})]*[-]

一些我想要达到的目标的例子。

代码语言:javascript
复制
"-yyy-" // valid
"-u8r*y75-" // valid
"-u8r**y75-" // invalid
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-30 19:39:53

代码

参见此处使用的regex

代码语言:javascript
复制
^-?[a-z](?!(?:.*\*){2})[a-z\d*]*-$

或者,您可以使用下面的regex实现相同的结果,而不必使用负前瞻性。

参见此处使用的regex

代码语言:javascript
复制
^-?[a-z][a-z\d]*(?:\*[a-z\d]*)?-$

结果

输入

代码语言:javascript
复制
** VALID **
-yyy-
-u8r*y75-

** INVALID **
-u8r**y75-

输出

代码语言:javascript
复制
-yyy-
-u8r*y75-

解释

  • ^在行开始处的断言位置
  • -?匹配零或连字符-之一
  • [a-z]az之间匹配一个alpha字符。请注意,i修饰符是打开的,因此这也将匹配相同字母的大写变体。
  • (?!(?:.*\*){2})负前瞻性确保以下内容与不匹配
    • (?:.*\*){2}匹配星号*两次

  • [a-z\d*]*匹配az之间的任意ASCII字母,或数字,或星号符号*,任意次数。
  • -与这个字符匹配
  • $断言在行尾的位置
票数 4
EN

Stack Overflow用户

发布于 2017-11-30 19:35:21

试试这个:

代码语言:javascript
复制
-(((\w|\d)*)(\*?)((\w|\d)*))-

你可以在这里试试:https://regex101.com/

票数 0
EN

Stack Overflow用户

发布于 2017-11-30 19:49:32

代码语言:javascript
复制
(-)?(\w)+(\*(?!\*)|\w+)(-)

我用分组来更清楚地说明这一点。我把[a-zA-Z0-9]改成了\w,它代表着同样的意思。(\*(?!\*)|\w+)

这是一个重要的变化。用文字解释:如果它是一个星\*,而前面的字符不是星(?!\*)(称为负展望=查看前面的部分),或者如果它是\w = [a-zA-Z0-9]

使用此站点测试:https://regexr.com/

他们有一个很好的解释左菜单下的“参考”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47581197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档