首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串中双破折号失败的正则表达式

字符串中双破折号失败的正则表达式
EN

Stack Overflow用户
提问于 2019-06-03 23:21:55
回答 2查看 98关注 0票数 1

我有一个必须遵循的标记(简单字符串)的命名约定。双破折号是不同部分的分隔符。例如:

  • ActiveDirectory--User--<LastName>--Password
  • ActiveDirectory--App--<DisplayName>--Secret

现在,我要检查令牌是否遵循命名约定。

根据命名约定,标记只能包含a-z、A-Z、0-9或破折号(-)。<CustomName>中不允许使用双破折号。

正则表达式

^ActiveDirectory--User--([a-zA-Z0-9-]*)--Password$

如果您使用以下标记作为输入,则可以正常工作

ActiveDirectory--User--Smith--Password

但它不会检查双破折号,比如

ActiveDirectory--User--Sm--ith--Password

在这种情况下,单词"Sm--ith“将是我匹配的一组。期望的状态应该是,没有匹配项。

我已经尝试将被否定的前视(negation)与反向引用结合使用。但在解决如此复杂的问题之前,我必须成为一名正则表达式专家。

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-03 23:30:15

如果您的令牌可以包含前导和尾随-,则可以使用

代码语言:javascript
复制
^ActiveDirectory--User--((?:(?!--)[a-zA-Z0-9-])*)--Password$

请参阅regex demo。在这里,(?:(?!--)[a-zA-Z0-9-])*匹配0个或多个ASCII字母、数字或连字符,但如果与下一个字符一起等于--,则不匹配一个字符。

如果您的令牌不能以-开头/结尾,请使用

代码语言:javascript
复制
^ActiveDirectory--User--([a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)--Password$

参见another demo。在这里,[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*匹配1+字母/数字,然后匹配0个或更多重复的-和1+字母/数字。

票数 2
EN

Stack Overflow用户

发布于 2019-06-04 03:27:11

所有这些都需要在一个正则表达式中完成吗?如果是这样的话,可能会采用Wiktor的解决方案。如果您正在编写可以使用多个正则表达式的代码,一个简单的方法就是在匹配的情况下抛出“不匹配”代码:

代码语言:javascript
复制
".*--.+--.+--.+--.*"

它应该匹配任何具有4组或更多双短划线的字符串,这是您声明的错误情况。顺便说一句,如果你允许在相邻的"tokens“中使用尾随/前导的单破折号,那么你的语法就会有歧义。

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

https://stackoverflow.com/questions/56430308

复制
相关文章

相似问题

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