【问题标题】:Regex match a word that starts with a string正则表达式匹配以字符串开头的单词
【发布时间】:2017-10-11 17:20:21
【问题描述】:

如何生成一个正则表达式来匹配一个以big开头的单词

我试图用开始和结束字符串形成一个正则表达式。起始字符串为big,结束字符串为\s 空格。

考虑这条线You are my big-big-big friend and also a brother

当我使用下面的正则表达式时,它给我的结果是big-big-bigfriendandalsoabrother

(.big.*\s)

但我期待结果为big-big-big。单词可以在行首或行尾。我想生成一个正则表达式来匹配以big开头的完整单词

我们将不胜感激。

【问题讨论】:

  • 使用(?<!\S)big\S*
  • @WiktorStribiżew 它真的很棒。工作没有任何问题。你能分享一下它是如何工作的吗?
  • 我已经添加了一个答案。抱歉缺少演示和示例代码,我在手机上。

标签: java regex


【解决方案1】:

可以使用以下正则表达式:

(?<!\S)big\S*

详情:

  • (?&lt;!\S) - 一个否定的lookbehind,确保在当前位置的左边有字符串的开头或空格
  • big - 文字子串
  • \S* - 除空白字符外的任何 0 个或多个字符

【讨论】:

  • 用\b匹配词首边界和(?&lt;!\S)有什么区别?
  • 做了一些测试, - 算作单词边界
  • \b before big 仅当 big 前面没有字符字符时才会匹配。它等于(?&lt;!\w)big。 (?&lt;!\S)big 仅在没有非空白字符(即空白边界)时才匹配。由于您的预期匹配不是连续的单词字符,而是所有非空白字符,因此空白边界更有意义。
【解决方案2】:

您可以使用正则表达式

(?!\s)big\S*

它将完全符合您的要求。

解释:

(?!\s)

它后面可能有也可能没有空格,但不应将其计为捕获的一部分(负前瞻)

big

会找到big这个词

\S*

将找到任何不是空格的字符,0 次或更多次

所以:

(?!\s)big\S*

查找单词big,后跟任何不是空格的内容,直到遇到空格。它后面可能有也可能没有空格。

【讨论】:

  • 谢谢。但是当单词结尾时它失败了。
  • (\S+) 应该找到 1 次或多次,而不是 0 次或多次
  • 确实如此。我修好了,你能验证一下吗?
  • @phflack 是的,我在您输入评论的同时编辑了它:P
  • 感谢您的帮助。但是@Wiktor 已经在评论中回答了。很遗憾不能接受你的回答。
猜你喜欢
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多