■文字
[flag]#1#
[name]#田中#
■取り出したい文字
"1"と"田中"
^\[flag\]#([\d+])#\\n\[name\]#(.+?)#
で取り出せると思うのですが、結果は何も取り出せずうまくいきません。
根本に誤りがあると思いますが、よろしくお願いいたします。
[角括弧]で囲って、いずれかにマッチという判断をさせる。
\n
を
[\r\n|\r|\n]
に変更。
(ちょっと横道)
取り扱いが少し複雑になるかもしれませんが、
後々になって改変が発生した場合に応用が利きますので、
お時間あれば出力結果を確認してみてください。
<?php $a = "[flag]#1#\n[name]#田中#"; preg_match_all('/\[(.+?)\]#(.+?)#/', $a, $m); print_r($m) ; ?>
(前提)
過去質問からphpだと仮定します。
(推理)
不要と思われる部分が3箇所(太赤字)
^\[flag\]#([</span>\d+])#\\n\[name\]#(.+?)#
(確認)
テストコードと出力結果
<?php $a = "[flag]#1#\n[name]#田中#"; preg_match('/^\[flag\]#(\d+)#\n\[name\]#(.+?)#/', $a, $m); print_r($m); ?> Array ( [0] => [flag]#1# [name]#田中# [1] => 1 [2] => 田中 )
URL必須という事なので記載してますがURLに特に意味はありません。
ありがとうございます。
①のケースではご指摘とおり期待値を取り出すことができるのですが、②のケースで悩んでいます。
① $a = "[flag]#1#\n[name]#田中#";
② $a = "[flag]#1#
[name]#田中#";
私の環境はWindowsであり、この場合、
②のケースは以下の(A)の方法で対応できることを確認したのですが、
「改行」コードは機種依存なので、どのような機種になっても動作する方法で悩んでいます。
(A) ^\[flag\]#(\d+)#\r\n\[name\]#(.+?)#/ … パターンマッチする
(B) ^\[flag\]#(\d+)#\n\\r[name\]#(.+?)#/ … パターンマッチしない
機種依存とならない方法について、もう少しご教授いただけないでしょうか?
質問の内容が少し変わって申し訳ありません。
よろしくお願いいたします。
[角括弧]で囲って、いずれかにマッチという判断をさせる。
\n
を
[\r\n|\r|\n]
に変更。
(ちょっと横道)
取り扱いが少し複雑になるかもしれませんが、
後々になって改変が発生した場合に応用が利きますので、
お時間あれば出力結果を確認してみてください。
<?php $a = "[flag]#1#\n[name]#田中#"; preg_match_all('/\[(.+?)\]#(.+?)#/', $a, $m); print_r($m) ; ?>
なるほど、そういう手もありますね。
ありがとうございました。
なるほど、そういう手もありますね。
ありがとうございました。