人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

THE HOGExxxx
The HOGExxxxx
the HOGExxxxx
THEHOGExxxxx
TheHOGExxxx
zha HOGExxxx
yhaHOGExxxxxx


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

●質問者: seadwell
●カテゴリ:ウェブ制作
✍キーワード:抽出 文字列 正規表現
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● backupper
●35ポイント ベストアンサー

これでどうでしょう?

<?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 修飾子を付けるのがこの質問のミソですね。

◎質問者からの返答

やっとできました。

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

> i 修飾子・・・

勉強になります。


2 ● tezcello
●35ポイント

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).*/'

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

◎質問者からの返答

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

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

やっとできました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ