可能重复:
正则表达式:匹配所有单词,除了
我需要您的帮助才能在 PHP 中使用 Regex 来否定选择。所以我有一个这样的字符串:“你好,我的名字是汤姆”
我需要做的是从这个字符串中删除所有内容,而不是“tom”或“jack”或“alex”,所以我尝试了:
$MyString = "Hello my name is tom"
print_r(preg_replace('#^tom|^jack|^alex#i', '', $MyString));
但它不工作...
你能帮我吗?谢谢
可能重复:
正则表达式:匹配所有单词,除了
我需要您的帮助才能在 PHP 中使用 Regex 来否定选择。所以我有一个这样的字符串:“你好,我的名字是汤姆”
我需要做的是从这个字符串中删除所有内容,而不是“tom”或“jack”或“alex”,所以我尝试了:
$MyString = "Hello my name is tom"
print_r(preg_replace('#^tom|^jack|^alex#i', '', $MyString));
但它不工作...
你能帮我吗?谢谢
如果您想删除除某些东西之外的所有内容,最好反过来做:仅捕获某些东西?例如...
$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 之外的任何字符)。但这不适用于一系列字符,没有“单词类”之类的东西。)
正则表达式:
\b(?!tom|jack|alex)[^\s]+\b
如果要删除不是“tom”、“jack”或“alex”的所有内容,可以使用以下命令:
$MyString = "Hello my name is jack";
print_r(preg_replace('#.*(tom|jack|alex)#i', '$1', $MyString));
这会将整个字符串替换为匹配的名称。
你可以匹配你想要的,然后重建字符串:
$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