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