REGEX打印句子中的每个替换单词

问题描述

假设我有一个字符串:
$s= \"The quick brown fox jumps over the lazy dog\"
我想使用PHP regex函数从句子中检索每个替代词。就像上面的句子一样,输出应为:
The brown jumps the dog
有人可以帮我使用REGEX吗?     

解决方法

        您可以用第一个单词替换每两个单词。因此,更换
(\\w+) \\w+
$1
preg_replace(\'/(\\w+) \\w+/\',\"$1\",\'The quick brown fox jumps over the lazy dog\')
快速测试:
php -r \'echo preg_replace(\"/(\\w+) \\w+/\",\"The quick brown fox jumps over the lazy dog\");\'
The brown jumps the dog
如果要保留第二,第四等单词,则可以使正则表达式适应
\\w+ (\\w+)
这会将第二个单词放入捕获组。然而。即使单词数为奇数,也将保留最后一个单词:
php -r \"echo preg_replace(\'/\\\\w+ (\\\\w+)/\',\'\\\\1\',\'The quick brown fox jumps over the lazy dog\'),\\\"\\\\n\\\";\"
quick fox over lazy dog
看到最后那只流浪的“狗”吗?要解决此问题,如果后面没有一个单词,则需要删除最后一个单词:
\\w+(?: (\\w+))?
演示:
php -r \"echo preg_replace(\'/\\\\w+(?: (\\\\w+))?/\',\\\"\\\\n\\\";\"
quick fox over lazy
“ 10”部分是所谓的非捕获组。它将对正则表达式的各个部分进行分组,而不会捕获其内容以供反向引用。主要是在这里,因此您仍然可以用
$1
代替not12ѭ。     ,        或者,如果要捕获数组中的匹配项,请执行以下操作:
preg_match_all(\'/(?|(\\w+) \\w+|(\\w+)$)/\',$s,$matches);
var_dump($matches[1]);
并抓住相反的立场:
preg_match_all(\'/\\w+ (\\w+)/\',$matches);
var_dump($matches[1]);