苦手な正規表現の質問です。

php5です。

THE HOGExxxx
The HOGExxxxx
the HOGExxxxx
THEHOGExxxxx
TheHOGExxxx
zha HOGExxxx
yhaHOGExxxxxx


上記文字列の the, THE, The が先頭についている文字列を抽出したいのです。
選択されないのは、下2行です。
正規表現の部分はどのように書くのでしょうか?
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/12/04 21:16:36
  • 終了:2008/12/04 22:42:08

ベストアンサー

id:backupper No.1

backupper回答回数95ベストアンサー獲得回数102008/12/04 22:08:18

ポイント35pt

これでどうでしょう?

<?php

$data =<<<EOD
THE HOGExxxx
The HOGExxxxx
the HOGExxxxx
THEHOGExxxxx
TheHOGExxxx
zha HOGExxxx
yhaHOGExxxxxx
EOD;

$lines = split("\n", $data);
$result = array();
foreach ($lines as $line) {
  if (preg_match('/^the/i', $line)) {
      array_push($result, $line);
  }
}
var_dump($result);
?>

以下の様な出力になります。

array(5) {
  [0]=>
  string(12) "THE HOGExxxx"
  [1]=>
  string(13) "The HOGExxxxx"
  [2]=>
  string(13) "the HOGExxxxx"
  [3]=>
  string(12) "THEHOGExxxxx"
  [4]=>
  string(11) "TheHOGExxxx"
}

/^the/i が正規表現ですが、大文字小文字を区別しない i 修飾子を付けるのがこの質問のミソですね。

id:seadwell

やっとできました。

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

> i 修飾子・・・

勉強になります。

2008/12/04 22:38:54

その他の回答(1件)

id:backupper No.1

backupper回答回数95ベストアンサー獲得回数102008/12/04 22:08:18ここでベストアンサー

ポイント35pt

これでどうでしょう?

<?php

$data =<<<EOD
THE HOGExxxx
The HOGExxxxx
the HOGExxxxx
THEHOGExxxxx
TheHOGExxxx
zha HOGExxxx
yhaHOGExxxxxx
EOD;

$lines = split("\n", $data);
$result = array();
foreach ($lines as $line) {
  if (preg_match('/^the/i', $line)) {
      array_push($result, $line);
  }
}
var_dump($result);
?>

以下の様な出力になります。

array(5) {
  [0]=>
  string(12) "THE HOGExxxx"
  [1]=>
  string(13) "The HOGExxxxx"
  [2]=>
  string(13) "the HOGExxxxx"
  [3]=>
  string(12) "THEHOGExxxxx"
  [4]=>
  string(11) "TheHOGExxxx"
}

/^the/i が正規表現ですが、大文字小文字を区別しない i 修飾子を付けるのがこの質問のミソですね。

id:seadwell

やっとできました。

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

> i 修飾子・・・

勉強になります。

2008/12/04 22:38:54
id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692008/12/04 22:18:52

ポイント35pt

the が大文字小文字を区別しないという事なら、

$str = array(
'THE HOGExxxx',
'The HOGExxxxx',
'the HOGExxxxx',
'THEHOGExxxxx',
'TheHOGExxxx',
'zha HOGExxxx',
'yhaHOGExxxxxx'
);
foreach($str as $s){
  print $s;
  if (preg_match('/^[tT][hH][eE].*/', $s)){
    print " <-- match\n";
  }else{
    print " <-- unmatch\n";
  }
}

結果は
THE HOGExxxx <--- match
The HOGExxxxx <--- match
the HOGExxxxx <--- match
THEHOGExxxxx <--- match
TheHOGExxxx <--- match
zha HOGExxxx <--- unmatch
yhaHOGExxxxxx <--- unmatch

こんな感じ。

本当に例のように、 the, THE, The の3種だけが対象なら、

'/(the|THE|The).*/'

こんな感じでどうですか?

id:seadwell

何度も壁にぶつかる正規表現です。

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

やっとできました!

2008/12/04 22:39:40

コメントはまだありません

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

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

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

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