考虑到PHP中的一些分隔符,减去字符串的一部分

时间:2014-09-19 07:41:32

标签: php substr

我在php中有一个变量女巫可以有这样的形状:

$a = 'help&type=client';
$b = 'account#client';
$c = 'info&type=client#new';

我需要创建一个像这样工作的substract函数:

echo myFunction($a); //&type=client
echo myFunction($b); //#client
echo myFunction($c); //&type=client#new

我会评价更简化的回答。

5 个答案:

答案 0 :(得分:4)

我认为最简单的方法是使用strpbrk

$a = 'help&type=client';
$b = 'account#client';
$c = 'info&type=client#new';
echo strpbrk($a, '&#') . PHP_EOL; //&type=client
echo strpbrk($b, '&#') . PHP_EOL; //#client
echo strpbrk($c, '&#') . PHP_EOL; //&type=client#new

答案 1 :(得分:0)

您可以为此

使用正则表达式
preg_match('[^help](.*)', $help, $match)
echo $match[0]; //&type=client

preg_match('[^account](.*)', $help, $match)
echo $match[0]; //#client

您可以看到此网站:http://regex101.com/r/zR9eD1/1,了解有关这些表达的更多信息。

快速解释一下: 我们不匹配'帮助',我们匹配其他所有内容(在'帮助'之后)

编辑: 如果你只有&或#作为分隔符,你可以使用它:

preg_match('([#].+)', $help, $match)
echo $match[0]; //#client

这匹配以#

开头的所有内容

答案 2 :(得分:0)

myFunction将是这样的:

function myFunction($string) {

    $amp = strpos($string, '&');
        if($amp) {
            return substr($string,$amp,strlen($string)-$amp);
        } else {
            $hash= strpos($string, '#');
            return substr($string,$hash,strlen($string)-$hash);
        }
}

您可能需要将if($amp)更改为if($amp > 0),具体取决于strpos的输出结果。

答案 3 :(得分:0)

这是怎么回事。

$re = "/[&#]([a-z=]+)/"; 
$str = "help&type=client\naccount#client"; 

preg_match_all($re, $str, $matches);

http://regex101.com/r/cW3yL6/1

答案 4 :(得分:0)

使用简单的preg_split

function myFunction($var) {
            return $var . "\n";
        }

$a = 'help&type=client';
$b = 'account#client';

$as = preg_split('/(\w+)/', $a, 2); 
$bs = preg_split('/(\w+)/', $b, 2); 

echo myFunction($as[1]);  // &type=client
echo myFunction($bs[1]);  // #client