文字列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
)
テストしてくださいここ。
デリミタも配列に含めたい場合、これはpreg_splitでより役立ちます。各配列要素をデリミタで開始および終了させたくない場合、表示しようとするimの例では、中にデリミタが含まれます。配列値。これはあなたが必要とするものですpreg_match('/\#(.*?)#/', $file, $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);