web-dev-qa-db-ja.com

PHP preg_match文字列の間に入る

文字列hello worldを取得しようとしています。

これは私がこれまでに得たものです:

$file = "1232#hello world#";

preg_match("#1232\#(.*)\##", $file, $match)
15
Kevin King

文字列には#が含まれているため、#以外の区切り文字を使用することをお勧めします。(.*?)の前の文字をキャプチャするには、貪欲でない#を使用します。ちなみに、#は、区切り文字でもない場合、式でエスケープする必要はありません。

$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);
21

ルックアラウンドを使用します。

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

デモ:

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

出力:

Array
(
    [0] => hello world
)

テストしてくださいここ

11
Ωmega

デリミタも配列に含めたい場合、これはpreg_splitでより役立ちます。各配列要素をデリミタで開始および終了させたくない場合、表示しようとするimの例では、中にデリミタが含まれます。配列値。これはあなたが必要とするものですpreg_match('/\#(.*?)#/', $file, $match); print_r($match);これはarray( [0]=> #hello world# )を出力します

0
Jevon McPherson

$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
Sean Redmond
preg_match('/1232#(.*)#$/', $file, $match);
0
Pankaj Khairnar