假设我有一组以某种方式格式化的字符串:
$string1 = "(substring1) Hello";
$string2 = "(substring2) Hi";
我如何将“()”的内部作为单个字符串。我知道这可以通过使用:
$substring = explode( ")",$string1 );
但是我留下了包含"(substring"的$substring[0]和包含其余部分的$substring[1]。有没有快速获取'()' 内部的方法?谢谢,我知道这很简单问题。
explode
可能需要一种解决方法,因为(
和)
是不同的。一个简单的正则表达式将完成工作。
$string1 = "(substring1) Hello";
preg_match('#\((.*?)\)#', $string1, $match); // preg_match_all if there can be multiple such substrings
print $match[1];
好吧,如果您想保持爆炸,请使用您的子字符串 [0] 执行此操作:
$substring[0] = substr($substring[0],1);
这将返回“(”之后的部分。
否则,使用正则表达式来匹配您需要的内容!
编辑:
检查上面的答案以查看正则表达式解决方案,这家伙为您提供了解决问题的好方法!:]
如果你想用来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";