如何匹配使用Perl regexp在字符串的结尾/开头用空格包围的单词?

baz*_*lic 7 regex perl

我想找到与我的正则表达式匹配的序列,如果它们位于由空格包围的字符串的中间,在结尾或开头,或者是字符串中唯一的东西.

示例: 假设序列'qwe45rty'是我们正在寻找的.我希望能够对所有这些字符串产生积极影响:

'qwe45rty' 'qwe45rty blabla' 'smth qwe45rty blabla' 'smth qwe45rty' ' qwe45rty '

但这些都不是:

'aaqwe45rty' 'qwe45rtybb' 'aaqwe45rtybb'

我想出的最好的是像这样:

if ( ($a =~ /\s+$re\s+/) or
     ($a =~ /^$re\s+/)   or
     ($a =~ /\s+$re$/)   or
     ($a =~ /^$re$/)        )
{
    # do stuff
}
Run Code Online (Sandbox Code Playgroud)

这不是最好的方式:)

有什么建议?

And*_*eKR 19

你可以做正则表达式中:

/(^|\s+)qwe45rty(\s+|$)/
Run Code Online (Sandbox Code Playgroud)

  • @bazzilic我以这种方式使用锚没有任何问题.唯一的问题是,如果您使用括号进行匹配,括号将添加到您的计数中.您可以使用`(?:^ |\s +)`来解决这个问题. (2认同)

Ala*_*ore 6

尝试从不同的方向解决问题.说一些东西可以匹配空格,或者没有什么可以说它不能匹配非空格字符:

(?<!\S)qwe45rty(?!\S)
Run Code Online (Sandbox Code Playgroud)

只是视角的一点点转变,正则表达式实际上写出了自己.