Я пытаюсь получить строку hello world
.
Это то, что у меня есть до сих пор:
$file = "1232#hello world#";
preg_match("#1232\#(.*)\##", $file, $match)
Я пытаюсь получить строку hello world
.
Это то, что у меня есть до сих пор:
$file = "1232#hello world#";
preg_match("#1232\#(.*)\##", $file, $match)
Рекомендуется использовать разделитель, отличный от #
, так как ваша строка содержит #
, а не жадный (.*?)
для захвата символов до #
. Кстати, #
не нужно экранировать в выражении, если оно не является также разделителем.
$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#
)