当前位置:  开发笔记 > 编程语言 > 正文

PHP:在括号内提取文本的最佳方法?

如何解决《PHP:在括号内提取文本的最佳方法?》经验,为你挑选了3个好方法。

在括号之间提取文本集的最佳/最有效方法是什么?假设我想以最有效的方式从字符串"忽略除此(文本)之外的所有内容"中获取字符串"text".

到目前为止,我提出的最好的是:

$fullString = "ignore everything except this (text)";
$start = strpos('(', $fullString);
$end = strlen($fullString) - strpos(')', $fullString);

$shortString = substr($fullString, $start, $end);

有一个更好的方法吗?我知道通常使用正则表达式往往效率较低,但除非我可以减少函数调用的数量,否则这可能是最好的方法吗?思考?



1> Owen..:

我只是做一个正则表达式并完成它.除非你做了足够的迭代以致它成为一个巨大的性能问题,它只是更容易编码(并且当你回顾它时理解)

$text = 'ignore everything except this (text)';
preg_match('#\((.*?)\)#', $text, $match);
print $match[1];


/ src ="([^"]*)"/比/src="(.*?)"/更有效

2> Edward Z. Ya..:

所以,实际上,你发布的代码不起作用:substr()'s参数是$ string,$ start和$ length,strpos()'s参数是$haystack,$needle.略有修改:

$str = "ignore everything except this (text)";
$start  = strpos($str, '(');
$end    = strpos($str, ')', $start + 1);
$length = $end - $start;
$result = substr($str, $start + 1, $length - 1);

一些细微之处:我$start + 1在offset参数中使用以帮助PHP strpos()在第二个括号上进行搜索时输出; 我们递增$start一个并减少$length以从匹配中排除括号.

此外,此代码中没有错误检查:在执行之前,您需要确保$start并且$end不要=== false substr.

至于使用strpos/substr与正则表达式; 在性能方面,这段代码将击败正则表达式.虽然这有点讽刺.我吃饭和呼吸strpos/substr,所以我不太介意,但其他人可能更喜欢正则表达式的紧凑性.



3> Rob..:

使用正则表达式:

if( preg_match( '!\(([^\)]+)\)!', $text, $match ) )
    $text = $match[1];

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有