PHP preg совпадение между строками


Я пытаюсь получить строку hello world.

Вот что у меня пока есть:

$file = "1232#hello world#";

preg_match("#1232\#(.*)\##", $file, $match)
Author: Alan Moore, 2012-11-26

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);
 19
Author: Michael Berkowski, 2016-12-08 01:05:57

Используйте поисковые системы:

preg_match("/(?<=#).*?(?=#)/", $file, $match)

Демонстрация:

preg_match("/(?<=#).*?(?=#)/", "1232#hello world#", $match);
print_r($match)

Вывод:

Array
(
    [0] => hello world
)

Проверьте это здесь.

 11
Author: Ωmega, 2012-11-26 02:49:17

Мне кажется, что тебе просто нужно получить $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

Вы получаете другие результаты?

 0
Author: Sean Redmond, 2012-11-26 02:38:20
preg_match('/1232#(.*)#$/', $file, $match);
 0
Author: Pankaj Khairnar, 2012-11-26 02:39:55

Что делать, если вы хотите, чтобы разделитель также был включен в массив, это было бы более полезно для preg_split, где вы, возможно, не захотите, чтобы каждый элемент массива начинался и заканчивался разделителями, пример, который я собираюсь показать, включал бы разделители внутри значений массива. это было бы то, что вам нужно preg_match('/\#(.*?)#/', $file, $match); print_r($match); это привело бы к array( [0]=> #hello world# )

 0
Author: Jevon McPherson, 2018-01-28 18:12:57