PHP preg совпадение между строками
Я пытаюсь получить строку hello world
.
Вот что у меня пока есть:
$file = "1232#hello world#";
preg_match("#1232\#(.*)\##", $file, $match)
5 answers
Рекомендуется использовать разделитель, отличный от #
, поскольку ваша строка содержит #
, и нежадный (.*?)
для захвата символов перед #
. Кстати, #
не нужно экранировать в выражении, если оно также не является разделителем.
$file = "1232#hello world#";
preg_match('/1232#(.*?)#/', $file, $match);
var_dump($match);
// Prints:
array(2) {
[0]=>
string(17) "1232#hello world#"
[1]=>
string(11) "hello world"
}
Еще лучше использовать [^#]+
(или *
вместо +
, если символы могут отсутствовать), чтобы сопоставить все символы до следующего #
.
preg_match('/1232#([^#]+)#/', $file, $match);
Используйте поисковые системы:
preg_match("/(?<=#).*?(?=#)/", $file, $match)
Демонстрация:
preg_match("/(?<=#).*?(?=#)/", "1232#hello world#", $match);
print_r($match)
Вывод:
Array
(
[0] => hello world
)
Проверьте это здесь.
Мне кажется, что тебе просто нужно получить $match[1]
:
php > $file = "1232#hello world#";
php > preg_match("/1232\\#(.*)\\#/", $file, $match);
php > print_r($match);
Array
(
[0] => 1232#hello world#
[1] => hello world
)
php > print_r($match[1]);
hello world
Вы получаете другие результаты?
preg_match('/1232#(.*)#$/', $file, $match);
Что делать, если вы хотите, чтобы разделитель также был включен в массив, это было бы более полезно для preg_split, где вы, возможно, не захотите, чтобы каждый элемент массива начинался и заканчивался разделителями, пример, который я собираюсь показать, включал бы разделители внутри значений массива. это было бы то, что вам нужно preg_match('/\#(.*?)#/', $file, $match); print_r($match);
это привело бы к array(
[0]=> #hello world#
)