原始regexp:
$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>谢谢
发布于 2011-05-04 22:05:52
在进行替换时,您需要在引号中包含一些内容。
$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>发布于 2011-05-04 22:26:10
好的,看起来您想要获取一个值,而不是替换一个值,所以您应该使用preg_match,而不是preg_replace (尽管从技术上讲,您可以间接地使用preg_replace ...)
preg_match('~(?:"([^"]*)")?\s*(.*)~',$str,$match);
$var = ($match[1])? $match[1] : $match[2];https://stackoverflow.com/questions/5884627
复制相似问题