首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php preg_replace字符串提取

php preg_replace字符串提取
EN

Stack Overflow用户
提问于 2011-05-04 22:02:28
回答 2查看 1.4K关注 0票数 3

原始regexp:

代码语言:javascript
运行
复制
$str = '"foo" <bar@baz.com>';
preg_replace('/\s(<.*?>)|"/', '', $str);

我想摘录以下内容:

代码语言:javascript
运行
复制
"foo" <bar@baz.com> extract only => foo
<bar@baz.com>       extract only => <bar@baz.com>
"" <bar@baz.com>    extract only => <bar@baz.com>

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-04 22:05:52

在进行替换时,您需要在引号中包含一些内容。

代码语言:javascript
运行
复制
$str = '"foo" <bar@baz.com>';
preg_replace('/"([^"]+)"\s(<.*?>)/', '$1', $str);
preg_replace('/""\s(<.*?>)/', '$1', $str);

试试看。如果前面没有引用的名称,它应该保留地址。

编辑:根据您的新示例输入和输出,尝试如下:

代码语言:javascript
运行
复制
$str = '"foo" <bar@baz.com>';
preg_replace('/"([^"]+)"\s(<.*?>)/', '$1', $str);
preg_replace('/(?:""\s)?(<.*?>)/', '$1', $str);

它应该有以下输入/输出结果:

代码语言:javascript
运行
复制
"foo" <bar@baz.com>  -> foo
"" <bar@baz.com>     -> <bar@baz.com>
<bar@baz.com>        -> <bar@baz.com>
票数 0
EN

Stack Overflow用户

发布于 2011-05-04 22:26:10

好的,看起来您想要获取一个值,而不是替换一个值,所以您应该使用preg_match,而不是preg_replace (尽管从技术上讲,您可以间接地使用preg_replace ...)

代码语言:javascript
运行
复制
preg_match('~(?:"([^"]*)")?\s*(.*)~',$str,$match);
$var = ($match[1])? $match[1] : $match[2];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5884627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档