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

Suj*_*wal 2 php regex

假设我有一个字符串:

$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)

任何人都可以帮我解决这个问题吗?

Joe*_*oey 5

您可以用第一个单词替换每两个单词.所以,替换

(\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.

  • 好主意.在PHP中:`$ result = preg_replace('/(\ w +)\ w + /','\ 1',$ subject);` (6认同)