|
プログラマーだと正規表現使わずともちょこっとプログラム書けば色々出来てしまうので、今までほとんど正規表現使う事がなかった。
今回、1行で書けそうな処理だったので、勉強しつつ挑戦(プログラムだとその何倍にもなるので…)。
入力された文字列を『空白』と『ダブルクォーテーション』で分割します。
検索エンジンで『blog "atom site"』みたいに入力するそのキーワード取得です(この例だと「blog」「atom site」がキーワード)。
以下、試行錯誤のアレコレです(書き込みの関係上、半角を全角にしてあります)。
動かないのもあります。
$cut_strs = mb_split(’[¥s]’, $in_str);
mb_ereg(”[¥s]”, $in_str, $cut_strs);
preg_match_all(’|”([^”]*)”(?=[¥s,]+)[¥s,]+|U’, $in_str, $cut_strs);
preg_match_all(”|<[^>]+>(.*)</[^>]+>|U”, $in_str, $cut_strs);
preg_match_all(’|<b>(.*)<¥/b>|U’, $in_str, $cut_strs);
preg_match_all(’|a(.*)b|U’, $in_str, $cut_strs);
preg_match_all(’|”(.*)”|U’, $in_str, $cut_strs);
preg_match_all(’/(”[^”]*(?:””[^”]*)*”/u’, $in_str, $cut_strs);
preg_match_all(’/¥¥G(”(?:[^”]|””)*”|[^¥s]*)¥s/u’, $in_str, $cut_strs);
preg_match_all(’/¥¥G(”(?:[^”]|””)*”|[^ ]*)[ ]/u’, $in_str.” ”, $cut_strs);
単純にmb_split()では出来なさそう。
mb_ereg()でなくpreg_match_all()を使うのは処理が早い(らしい)から(//uオプションを使えば、UNICODE対応しているらしい)。
…で、近い正規表現はこれ!
preg_match_all(’/(”(?:[^”]|””)*”|[^ ]*)[ ]/u’, $in_str.” ”, $cut_strs);
preg_match_allは、分割した語句は配列の[1]に入るみたいです。
if($cut_strs[1]) {
foreach($cut_strs[1] as $cut_str) {
//ダブルクォーテーションが入るので削除します
$cut_str = preg_replace(’/[”]/u’, ’’, $cut_str);
こんな感じにしました。
それにしても、分かりづらいですねぇ『正規表現』って。
何書いてあるのか、一見して分からない。
※ 『php』に繋がる関連物を 視覚的に探しだせるサイトを作ってみました(よろしければクリックしてみてくださいね)。
リンク元:
(1) : http://www.google.co.jp/hws/search?hl=ja&q=in_str+php&client=fenrir&adsafe=off&safe=off&lr=lang_ja
ページ閲覧者数:6人
[ php ] 一覧へ
|