原始regexp:

$str = '"foo" <[email protected]>';
preg_replace('/\s(<.*?>)|"/', '', $str);

我想摘录以下内容:
"foo" <[email protected]> extract only => foo
<[email protected]>       extract only => <[email protected]>
"" <[email protected]>    extract only => <[email protected]>

谢谢

最佳答案

当你做替换的时候,你需要在引号里加上一些东西。

$str = '"foo" <[email protected]>';
preg_replace('/"([^"]+)"\s(<.*?>)/', '$1', $str);
preg_replace('/""\s(<.*?>)/', '$1', $str);

试试看。如果前面没有引用的名字,就应该把地址留下。
编辑:根据新的示例输入和输出,尝试以下操作:
$str = '"foo" <[email protected]>';
preg_replace('/"([^"]+)"\s(<.*?>)/', '$1', $str);
preg_replace('/(?:""\s)?(<.*?>)/', '$1', $str);

它应该具有以下输入/输出结果:
"foo" <[email protected]>  -> foo
"" <[email protected]>     -> <[email protected]>
<[email protected]>        -> <[email protected]>

关于php - PHP的preg_replace字符串提取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5884627/

10-09 08:22