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

2022-08-30 07:56:59

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

到目前为止,我想出的最好的是这个:

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

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

有没有更好的方法来做到这一点?我知道一般来说使用正则表达式往往效率较低,但除非我能减少函数调用的数量,否则也许这将是最好的方法?思潮?


答案 1

我只是做一个正则表达式,然后把它弄过来。除非你做了足够的迭代,以至于它成为一个巨大的性能问题,否则编码更容易(当你回顾它时,它会更容易理解)

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

答案 2

因此,实际上,您发布的代码不起作用:参数$string,$start和$length,参数是, 。稍作修改:substr()'sstrpos()'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);

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

此外,此代码中没有错误检查:在执行 .$start$endsubstr

至于使用与正则表达式;在性能方面,此代码将击败正则表达式。不过有点冗长。我吃和呼吸 ,所以我不太介意这一点,但其他人可能更喜欢正则表达式的紧凑性。strpos/substrstrpos/substr


推荐