原始正则表达式:
$str = '"foo" <bar@baz.com>';
preg_replace('/\s(<.*?>)|"/', '', $str);
我想提取以下内容:
"foo" <bar@baz.com> extract only => foo
<bar@baz.com> extract only => <bar@baz.com>
"" <bar@baz.com> extract only => <bar@baz.com>
由于
答案 0 :(得分:3)
好的,所以看起来你想获取一个值,而不是替换一个值,所以你应该使用preg_match,而不是preg_replace(虽然从技术上讲你可以以圆周方式使用preg_replace ...)
preg_match('~(?:"([^"]*)")?\s*(.*)~',$str,$match);
$var = ($match[1])? $match[1] : $match[2];
答案 1 :(得分:0)
进行替换时,您需要在引号内部使用某些内容。
$str = '"foo" <bar@baz.com>';
preg_replace('/"([^"]+)"\s(<.*?>)/', '$1', $str);
preg_replace('/""\s(<.*?>)/', '$1', $str);
试试吧。如果之前没有引用的名称,它应该单独留下地址。
修改:根据您的新示例输入和输出,试试这个:
$str = '"foo" <bar@baz.com>';
preg_replace('/"([^"]+)"\s(<.*?>)/', '$1', $str);
preg_replace('/(?:""\s)?(<.*?>)/', '$1', $str);
它应具有以下输入/输出结果:
"foo" <bar@baz.com> -> foo
"" <bar@baz.com> -> <bar@baz.com>
<bar@baz.com> -> <bar@baz.com>