繁体   English   中英

Java正则表达式匹配空格或字符串开头

[英]Java Regex to match space or beginning of string

我正在尝试匹配不带前缀或后缀的单词的所有实例,基本上是单词的任何实例前面都带有空格或出现在字符串的开头,后跟空格或标点。 以下应匹配:

"This is the word."
"word is this."

并且以下内容不应:

"This is preword."
"wordness is this."

我最初的解决方案是这样的:

(^|\\s)word(\\s|,|\\.)

但是,它不能捕获单词出现在字符串开头的情况。 如何正确使用克拉来做到这一点?

看来您正在寻找字边界 \\b

您可能遇到的问题是,像\\sword\\s这样的正则表达式将占用搜索到的单词周围的空格,因此在当前匹配后这些空格将不会被重复使用以查找下一个单词。

foo foo foo foo foo

如果您想寻找foo ,例如

  • 在字符串或空白开始之前
  • 在字符串或空白结束之后

因此正则表达式可能看起来像(^|\\\\s)foo(\\\\s|$)

你会匹配

foo foo foo foo foo
^^^^   ^^^^^   ^^^^

第二个foo不会被匹配,因为第一个foo的匹配已经使用了它之前的空格,

foo foo foo foo foo
   X^^^^             cant use space marked with `X`

所以下一个子串是

foo foo foo foo foo
       ^^^^^

接着

foo foo foo foo foo
               ^^^^

要解决此问题,您可以使用\\b来表示\\w字符( az AZ 0-9_ )与\\w不存在的任何字符之间的位置。

因此,请改用\\bword\\b (在Java字符串中需要将其写为"\\\\bword\\\\b"


顺便说一句,如果您的单词包含正则表达式特殊字符,则可能应该用\\Q...\\E 起来。

因此,您的正则表达式可以看起来像"\\\\b\\\\Qword\\\\E\\\\b"

Java regex支持单词boundary \\b元字符:

\bword\b

请注意, Java将对该单词接受任何有效的Unicode字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM