如何使用正则表达式来删除除一些单词的一切吗? [重复](How to use regex to

2019-10-16 20:33发布

可能重复:
正则表达式:匹配除了所有单词

我需要你在PHP中使用正则表达式来否定一个选择帮助。 所以我有一个这样的字符串:“你好,我的名字是汤姆”

我需要做的就是从这个字符串巫删除一切都没有“汤姆”和“杰克”或“亚历克斯”,所以我尝试:

$MyString = "Hello my name is tom"
print_r(preg_replace('#^tom|^jack|^alex#i', '', $MyString));

但它不工作...

你能帮助我吗? 谢谢

Answer 1:

如果你想删除的东西之外的一切,可它做得更好周围的其他方法:只捕捉的东西吗? 例如...

$testString = 'Hello my name is tom or jack';
$matches = array();
preg_match_all('/\b(tom|jack|alex)\b/i', $testString, $matches);
$result = implode('', $matches[0]);
echo $result; // tomjack

什么你试图做的是使用字符类语法([ ^s]将匹配任何字符,但S)。 但是,这并不具有一系列字符的工作,有没有这样的事情“字类”。 )



Answer 2:

如果你想删除的一切,是不是 “汤姆”和“杰克”或“亚历克斯”您可以使用以下命令:

$MyString = "Hello my name is jack";
print_r(preg_replace('#.*(tom|jack|alex)#i', '$1', $MyString));

这将替换整个字符串只用一致的姓名。



Answer 3:

正则表达式:

\b(?!tom|jack|alex)[^\s]+\b


Answer 4:

你可以匹配你想要什么,然后重建字符串:

$s = 'hello my name is tom, jack and alex';

if (preg_match_all('/(?:tom|jack|alex)/', $s, $matches)) {
print_r($matches);
        $s = join('', $matches[0]);
} else {
        $s = '';
}

echo $s;

输出:

tomjackalex


文章来源: How to use regex to delete everything except some words? [duplicate]