正規表現で、次の文字の##内を取り出したいと思います。


■文字
[flag]#1#
[name]#田中#

■取り出したい文字
"1"と"田中"

^\[flag\]#([\d+])#\\n\[name\]#(.+?)#
で取り出せると思うのですが、結果は何も取り出せずうまくいきません。

根本に誤りがあると思いますが、よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/20 16:18:18
  • 終了:2009/10/20 18:29:45

ベストアンサー

id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/10/20 18:12:30

ポイント35pt

[角括弧]で囲って、いずれかにマッチという判断をさせる。

\n

[\r\n|\r|\n]

に変更。


(ちょっと横道)

取り扱いが少し複雑になるかもしれませんが、

後々になって改変が発生した場合に応用が利きますので、

お時間あれば出力結果を確認してみてください。

<?php
$a = "[flag]#1#\n[name]#田中#";
preg_match_all('/\[(.+?)\]#(.+?)#/', $a, $m);
print_r($m) ;
?>

PHP: preg_match_all - Manual

id:cochoo

なるほど、そういう手もありますね。

ありがとうございました。

2009/10/20 18:19:27

その他の回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/10/20 16:49:13

ポイント35pt

(前提)

過去質問から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に特に意味はありません。

PHP: PCRE 正規表現構文 - Manual

PHP: preg_match - Manual

PHP: print_r - Manual

id:cochoo

ありがとうございます。

①のケースではご指摘とおり期待値を取り出すことができるのですが、②のケースで悩んでいます。

① $a = "[flag]#1#\n[name]#田中#";

② $a = "[flag]#1#

  [name]#田中#";

私の環境はWindowsであり、この場合、

②のケースは以下の(A)の方法で対応できることを確認したのですが、

「改行」コードは機種依存なので、どのような機種になっても動作する方法で悩んでいます。

(A) ^\[flag\]#(\d+)#\r\n\[name\]#(.+?)#/ … パターンマッチする

(B) ^\[flag\]#(\d+)#\n\\r[name\]#(.+?)#/ … パターンマッチしない

機種依存とならない方法について、もう少しご教授いただけないでしょうか?

質問の内容が少し変わって申し訳ありません。

よろしくお願いいたします。

2009/10/20 17:38:10
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/10/20 18:12:30ここでベストアンサー

ポイント35pt

[角括弧]で囲って、いずれかにマッチという判断をさせる。

\n

[\r\n|\r|\n]

に変更。


(ちょっと横道)

取り扱いが少し複雑になるかもしれませんが、

後々になって改変が発生した場合に応用が利きますので、

お時間あれば出力結果を確認してみてください。

<?php
$a = "[flag]#1#\n[name]#田中#";
preg_match_all('/\[(.+?)\]#(.+?)#/', $a, $m);
print_r($m) ;
?>

PHP: preg_match_all - Manual

id:cochoo

なるほど、そういう手もありますね。

ありがとうございました。

2009/10/20 18:19:27
  • id:kn1967
    [各括弧]じゃなくて(括弧)・・・恥ずかしい・・・。

    たった20日間PCから離れただけで、どんだけスキル下がったんだか・・・。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません