【问题标题】:What does regular expression (?<=[\\S])[\\S]*\\s* do? [duplicate]正则表达式 (?<=[\\S])[\\S]*\\s* 做什么? [复制]
【发布时间】:2020-02-11 15:23:37
【问题描述】:

我在this其他stackoverflow问题中看到了一个正则表达式,但我不明白每个部分的含义。

String[] split = s.split("(?<=[\\S])[\\S]*\\s*");

这样的结果是一个句子的首字母缩写词。

为了理解链接正则表达式,我应该从左到右还是从左到右开始阅读?如何识别(或限制)每个部分?

感谢您的回答。

【问题讨论】:

标签: java regex regex-lookarounds


【解决方案1】:

(?&lt;=[\\S]) 声明匹配项前面应有\\S,即除空格之外的任何内容。

[\\S]* 声明正则表达式应该匹配零个或多个非空格字符

\\s* 匹配零个或多个空格。

本质上,正则表达式找到一个非空格字符,并匹配它前面的所有非空格字符,以及它们后面的空格。
正则表达式匹配来自Mohandas Karamchand Gohandas&lt;space&gt;&lt;space&gt;aramchand&lt;space&gt;

因此,在使用这些匹配来拆分字符串后,您最终会得到{"M", "K", "G"}

注意正则表达式匹配的两个空格 Mohandas,因为\\s* 部分匹配零个或多个 个空格

【讨论】:

  • 另外,方括号是多余的。
【解决方案2】:

为了澄清 suspircius 正则表达式,您可以使用网站 https://regexr.com/https://regex101.com/

两者都用颜色标记零件并解释它们的作用。但是你必须用单反斜杠替换双反斜杠。

【讨论】:

  • 仅仅链接到场外资源并不是一种特别有用的回答方式——这些外部网站可能会在未来的某个时候离线,如果/当他们这样做时,您的回答将失去任何价值它有。链接到场外资源很好,但您的答案需要能够在没有这些链接的情况下独立存在。在这种情况下,您需要解释相关正则表达式的实际作用。回答完问题后,然后您可以将链接设置为“顺便说一句,这些工具将来可以帮助您”部分。
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2014-09-26
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2013-03-15
相关资源
最近更新 更多