我有一个正则表达式,
end\\s+[a-zA-Z]{1}[a-zA-Z_0-9]
应该匹配具有规范的行
end abcdef123
其中abcdef123
必须以字母和后续字母数字字符开头。
但目前它也匹配此
foobar barfooend
bar fred bob
它在end
结尾处barfooend
,并且有效地bar
将end bar
作为合法结果返回。
我试过
^end\\s+[a-zA-Z]{1}[a-zA-Z_0-9]
但这似乎根本不起作用。它最终没有匹配。 它应该相当简单,但我似乎无法解决它。
答案 0 :(得分:5)
\s
还包含换行符。因此,您需要指定一个只包含想要的空白字符的字符类,或者排除不需要的字符类。
使用其中一个代替\\s+
:
[^\\S\r\n]
这包括所有空格,但不包括\r
和\n
。 See end[^\S\r\n]+[a-zA-Z][a-zA-Z_0-9]+
here on Regexr
[ \t]
这仅包含空格和制表符。 See end[ \t]+[a-zA-Z][a-zA-Z_0-9]+
here on Regexr
答案 1 :(得分:3)
您可以使用\b
(字边界检测)来检查字边界。在我们的例子中,我们将使用它来匹配单词end的开头。它也可以用来匹配单词的结尾。
正如@nhahtdh在评论中所说,{1}
是多余的,因为[a-zA-Z]
已经匹配给定范围内的一个字母。
此外,你的正则表达式不能做你想要的,因为它只匹配第一个字母后面的一个字母数字字符。最后添加+
(一次或多次)或*
(零次或多次)。
这应该有效:
"\\bend\\s+[a-zA-Z]{1}[a-zA-Z_0-9]*"
修改:我认为\b
优于^
,因为后者只匹配一行的开头。
例如,请输入以下内容:“end azd123 end bfg456”当^
有助于匹配两者时,\b
只会有一个匹配。
答案 2 :(得分:0)
尝试使用正则表达式:
end[ ]+[a-zA-Z]\w+
\w
是一个单词字符:[a-zA-Z_0-9]