2

假设我有一组以某种方式格式化的字符串:

$string1 = "(substring1) Hello";
$string2 = "(substring2) Hi";

我如何将“()”的内部作为单个字符串。我知道这可以通过使用:

$substring = explode( ")",$string1 );

但是我留下了包含"(substring"的$substring[0]和包含其余部分的$substring[1]。有没有快速获取'()' 内部的方法?谢谢,我知道这很简单问题。

4

3 回答 3

3

explode可能需要一种解决方法,因为()是不同的。一个简单的正则表达式将完成工作。

$string1 = "(substring1) Hello";
preg_match('#\((.*?)\)#', $string1, $match);  // preg_match_all if there can be multiple such substrings
print $match[1];
于 2013-09-09T07:35:24.490 回答
1

好吧,如果您想保持爆炸,请使用您的子字符串 [0] 执行此操作:

$substring[0] = substr($substring[0],1);

这将返回“(”之后的部分。

否则,使用正则表达式来匹配您需要的内容!

编辑:

检查上面的答案以查看正则表达式解决方案,这家伙为您提供了解决问题的好方法!:]

于 2013-09-09T07:36:12.537 回答
0

如果你想用来explode做这个工作:

<?php
$string1 = "(substring1) Hello";

function between($delimiter1, $delimiter2, $subject)
{
    $arr = explode($delimiter2, $subject);
    if (!$arr || empty($arr) || count($arr) == 1)
    {
        return '';
    }
    $oldStr = trim(array_shift($arr));
    $arr = explode($delimiter1, $oldStr);
    if (!$arr || empty($arr))
    {
        return '';
    }
    return trim(array_pop($arr));
}

$result = between('(', ')', $string1);
echo $result, "\n";

但我建议你使用preg_match函数,它是使用正则表达式匹配字符串,更强大和更复杂:

<?php
$string1 = "(substring1) Hello";

$pattern = '/\((.*?)\)/';
$match = array();
preg_match($pattern, $string1, $match);
echo $match[1], "\n";
于 2013-09-09T07:46:31.357 回答