У меня есть переменная в 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
Я буду оценивать более упрощенный ответ.
Я думаю, что самый простой способ будет использовать 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
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.
Как насчет этого.
$re = "/[&#]([a-z=]+)/";
$str = "help&type=client\naccount#client";
preg_match_all($re, $str, $matches);
Вы можете использовать регулярные выражения для этого
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
Это соответствует всему, начинающемуся с #
Используйте простой 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