我在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
我会评价更简化的回答。
答案 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);
答案 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