假设我有一个字符串:
$s= "The quick brown fox jumps over the lazy dog"
Run Code Online (Sandbox Code Playgroud)
我想使用php正则表达式函数来检索句子中的每个替代单词.与上述句子一样,输出应为:
The brown jumps the dog
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个问题吗?
您可以用第一个单词替换每两个单词.所以,替换
(\w+) \w+
Run Code Online (Sandbox Code Playgroud)
通过$1:
preg_replace('/(\w+) \w+/', "$1", 'The quick brown fox jumps over the lazy dog')
Run Code Online (Sandbox Code Playgroud)
快速测试:
php -r 'echo preg_replace("/(\w+) \w+/", "$1", "The quick brown fox jumps over the lazy dog");'
The brown jumps the dog
Run Code Online (Sandbox Code Playgroud)
如果你想保留第二个,第四个等单词,那么你可以调整正则表达式
\w+ (\w+)
Run Code Online (Sandbox Code Playgroud)
这会将第二个单词放入捕获组.然而.这将保留最后一个字,即使字数是奇数:
php -r "echo preg_replace('/\\w+ (\\w+)/', '\\1', 'The quick brown fox jumps over the lazy dog'),\"\\n\";"
quick fox over lazy dog
Run Code Online (Sandbox Code Playgroud)
最后看到流浪狗?要解决这个问题,如果后面没有一个单词,你需要删除最后一个单词:
\w+(?: (\w+))?
Run Code Online (Sandbox Code Playgroud)
演示:
php -r "echo preg_replace('/\\w+(?: (\\w+))?/', '\\1', 'The quick brown fox jumps over the lazy dog'),\"\\n\";"
quick fox over lazy
Run Code Online (Sandbox Code Playgroud)
该(?:...)部分是所谓的非捕获组.它将对正则表达式的部分进行分组,而不捕获其内容以进行反向引用.这主要是因为你仍然可以替换,$1而不是$2.