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