我正在尝试匹配(在此选择之后)一行中的所有单词,除了那些包含数字的单词 例如,我有一行:
After this select word word1 worldtwo word3 word4 wordfive 502 875
我想只匹配没有数字的单词,结果应该是:
word worldtwo wordfive
该行中的字数可能会改变
我试过了
After this select ([a-zA-Z]*)
但它只匹配一个单词
http://www.rubular.com/r/MP4eDbTFhZ
我正在使用带正则表达式的php
答案 0 :(得分:4)
问题在于,通过在正则表达式中包含“After this select”,您将正则表达式锚定到这些单词。也就是说,正则表达式正在寻找紧跟字符串“After this select”之后的单词。
我要做的是从输入中删除字符串“After this select”,然后然后,您可以使用正则表达式获取仅包含字母字符的所有单词。您没有指定正在使用的正则表达式的语言/风格,因此我将在JavaScript中演示:
var input = 'After this select word word1 worldtwo word3 word4 wordfive 502 875';
var prefix = 'After this select ';
input = input.substring( prefix.length ); // remove prefix
var matches = input.match( /\b[a-z]+\b/ig );
我使用的正则表达式使用单词边界标记(\b
)来避免与选择单词相关的常见问题。另外,我没有使用[a-zA-Z]
,而是使用了[a-z]
并添加了i
标志,以使其不区分大小写。
preg_replace_callback
函数。我将证明这一点,因为它更灵活(如果你需要做替换,你就在那里!):
$input = "After this select word word1 worldtwo word3 word4 wordfive 502 875";
$output = preg_replace_callback(
'|After this match (.*)|',
function( $matches ) {
preg_match_all( "|\\b[a-zA-Z]+\\b|", $matches[1], $words );
// $words[0] now contains all words consisting only of alpha characters
return $matches[0];
}, $input );
以下是在PHP 5.3之前(在匿名函数可用之前)的方法:
function replaceWords( $matches ) {
preg_match_all( "|\\b[a-zA-Z]+\\b|", $matches[1], $words );
// $words[0] now contains all words consisting only of alpha characters
return $matches[0];
}
$input = "After this select word word1 worldtwo word3 word4 wordfive 502 875";
$output = preg_replace_callback(
"|After this select (.*)|",
"replaceWords", $input );