当前位置: 首页 > 知识库问答 >
问题:

不包括连字符的正则词边界

朱兴运
2023-03-14

我需要一个正则表达式,它匹配以单词边界结尾的表达式,但不将连字符视为边界。即获取所有匹配的表达式

type ([a-z])\b

但是不匹配,例如。

type a-1

换句话说:我想要一个等效的词边界运算符\b,它不是使用单词字符类[A-Za-z0-9_],而是使用扩展类:[A-Za-z0-9_-]

共有2个答案

沈高峻
2023-03-14

我有一个非常类似的问题,只是我不想将“*”作为边界字符。以下是我所做的:

\b(?<!\*)([^\s\*]+)\b(?!*)

基本上,如果您处于单词边界,则返回一个字符,如果前一个字符是“*”则不匹配。如果你在中间,不要在空格或星号上匹配。如果你在结尾,确保结尾不是星号。在您的情况下,我认为您可以使用\w而不是\s。对我来说,这在以下情况下有效:

*word
wo*rd
word*
唐焕
2023-03-14

您可以为此使用前瞻,最短的方法是使用负前瞻:

type ([a-z])(?![\w-])

<代码>(?![\w-])表示“如果下一个字符在< code>\w中或者是< code>-,则匹配失败”。

下面是一个使用正常前瞻的选项:

type ([a-z])(?=[^\w-]|$)

可以阅读< code >(?=[^\w-]|$)为“仅当下一个字符不在字符类< code>[\w-]中时匹配,否则这是字符串的结尾”。

看到它工作:http://www.rubular.com/r/NHYhv72znm

 类似资料:
  • 问题内容: 当我使用某种方式时,它仍然会触发,好像连字符无效。我试着和 问题答案: 转义使用应该没问题,但是您也可以尝试将其放在字符类的开头或结尾。这应该为您工作:

  • 当我使用之类的东西时,它仍然会触发,就像连字符无效一样。我尝试了和

  • 问题内容: 我需要从字符串中提取两个定界符之间包含的一组字符,而不返回定界符本身。 一个简单的例子应该会有所帮助: 目标:提取方括号之间的子字符串,而不返回括号本身。 基本字串: 如果我使用以下规则。前任。 比赛是。我只需要得到(没有括号)。 有可能做到吗? 问题答案: 简单易行: 从技术上讲,这是使用先行和后备。请参阅前瞻和零宽度断言。该模式包括: 前面有一个[未捕获(向后看); 一个非贪婪的捕

  • 我正在使用以下正则表达式: 我的目标是只验证数字(int和decimal),空格, ( ), 点,AND,OR。其他一切都是不允许的。它看起来像是工作的,但是我对单词边界\bAND\b和\bOR\b Eg有问题。我不能输入ANDWE或EEE或任何组合,但我能做的是AN或A。如何在字符串中只允许两个单词AND或OR?它们在字符串中是可选的。 输入示例 0.10和23-有效 12和(15或0.2)-有

  • 问题内容: 我想编写一个简单的正则表达式来检查给定字符串中是否存在任何特殊字符。我的正则表达式可以工作,但是我不知道为什么它还包括所有数字,所以当我输入一些数字时会返回错误。 我的代码: 问题答案: 请不要那样做…… 像这样的小Unicode BABY ANGEL 快要死了!◕◡◕(←这些不是图像)(箭头也不是!) 而且您正在杀死20年的DOS:-)(最后一个笑脸称为WHITE SMILING F

  • 问题内容: 我想在Elastisearch中使用单词边界进行正则表达式查询,但是看起来Lucene正则表达式引擎不支持。我可以使用哪些解决方法? 问题答案: 在ElasticSearch regex风格中,没有直接等效于单词边界的功能。最初是一样的东西,如果用一个字字符开始,并且尾部就像如果用一个字字符结束。 因此,我们需要确保在字符串的前后或字符串的开始/结束处有一个非单词char 。由于正则表