文字列"/test:n(0-2)/div/"
をRegex経由で配列に分割したいと思います。出力は次のようになります。PHP正規表現/デリミタ
output = {
[0]=>"test:n(0-2)"
[1]=>"div"
}
しかし、それは私が思っていたほど簡単ではないようです。ここに私の試みです:https://regex101.com/r/iP2lD8/1
私は間違って何ですか?
文字列"/test:n(0-2)/div/"
をRegex経由で配列に分割したいと思います。出力は次のようになります。PHP正規表現/デリミタ
output = {
[0]=>"test:n(0-2)"
[1]=>"div"
}
しかし、それは私が思っていたほど簡単ではないようです。ここに私の試みです:https://regex101.com/r/iP2lD8/1
私は間違って何ですか?
だけexplode()
を使用します。
$result = array_filter(explode('/', $string));
array_filter()
は、どちらかの端に/
から空に削除されます。
$result = explode('/', trim($string, '/'));
しかし、質問に答えるために、あなただけのpreg_split()
ためのパターンとして/
を使用して/\//
のよう/
をエスケープするか、別の区切り文字を使用するかになります:
$result = array_filter(preg_split('#/#', $string));
もう一つ別の方法として、あなたはそれtrim()
できました文字列のコンテンツのニーズと複雑さに応じて、次のようになります。
preg_match_all('#/([^/]+)#', $string, $result);
print_r($result[1]);
$result[0]
は完全一致の配列で、$result[1]
は最初のキャプチャグループ()
の配列です。より多くのキャプチャグループがある場合、より多くの配列要素が$result
にあります。
あなたは
'~/([^/]+)~'
がregex demoを参照してください使用することができます。このパターンは/
と一致し、グループ1に取り込み、/
以外の1文字以上をキャプチャします。
問題は、後続のスラッシュが消費されたことです。また、あなたは貪欲なマッチングを使用して、それはあまりにも多くをつかんだ。
$re = '~/([^/]+)~';
$str = "/test:n(0-2)/div/";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
なぜ$ matches [1]に保存されますか?私は$ matches [0]と$ matches [1]の最初の出現を期待していたでしょう。[1] – marius
あなたの持っている部品の数によって異なります。それは常にちょうど2ですか?すると、 ''〜/([^ /] +)/([^ /] +)〜 ''](https://regex101.com/r/nV6eC7/2)が役立ちます。 [** this demo **](http://ideone.com/oDMipZ)を参照してください。 –
が動作しない、これに対する結果である:配列 ( [1] =>表 [2]> TR =:N(1-2) ) – marius
同じ問題2番目のオプションの場合:/ – marius
これらはすべて動作しません。https://3v4l.org/4jFAv間違っていることがわかりません。 – AbraCadaver