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

Я буду оценивать более упрощенный ответ.

0

Решение

Я думаю, что самый простой способ будет использовать 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
4

Другие решения

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.

0

Как насчет этого.

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

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

http://regex101.com/r/cW3yL6/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

Это соответствует всему, начинающемуся с #

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
0
По вопросам рекламы [email protected]