3

我有一个正则表达式,

end\\s+[a-zA-Z]{1}[a-zA-Z_0-9]

这应该与规范相匹配

end abcdef123

whereabcdef123必须以字母和后续的字母数字字符开头。

但是目前它也匹配这个

foobar barfooend
bar fred bob

end在结束时拾取它,barfooend并且bar实际上end bar作为合法结果返回。

我试过了

^end\\s+[a-zA-Z]{1}[a-zA-Z_0-9]

但这似乎根本不起作用。它最终什么都不匹配。它应该相当简单,但我似乎无法弄清楚。

4

3 回答 3

11

\s还包括换行符。因此,您要么需要指定一个仅包含所需空白字符的字符类,要么排除不想要的字符类。

使用而不是\\s+其中之一:

于 2013-09-17T14:36:44.407 回答
4

您可以使用\b(字边界检测)检查字边界。在我们的例子中,我们将使用它来匹配单词 end 的开头。它也可以用于匹配单词的结尾。

正如@nhahtdh 在他的评论中所说,这{1}是多余的,因为[a-zA-Z]已经匹配给定范围内的一个字母。

此外,您的正则表达式不会执行您想要的操作,因为它仅匹配第一个字母后的一个字母数字字符。在末尾添加 a +(一次或多次)或*(零次或多次)。

这应该有效:

"\\bend\\s+[a-zA-Z]{1}[a-zA-Z_0-9]*"

编辑:我认为\b比后者更好,^因为后者只匹配一行的开头。

例如,输入以下内容:“end azd123 end bfg456” 只有一个匹配,^何时\b将有助于匹配两者。

于 2013-09-17T14:33:12.437 回答
0

试试正则表达式:

end[ ]+[a-zA-Z]\w+

\w是一个单词字符:[a-zA-Z_0-9]

于 2013-09-17T14:32:24.870 回答