No.2ベストアンサー
- 回答日時:
/(.)?/ ---- 最短マッチ
/(.)*/ ---- 最長マッチ
ですから、先頭一桁を検索するなら、
No.1さんの回答のように
/^(.)/ か /(.)?/、 /(.).*/、 /(.)/ としないといけないでしょう。
この回答への補足
先頭一桁の検索は、/^(.)/ か /(.)?/、/(.).*/、/(.)/ですか。
ありがとうございます。
(.)*と(.)?と(.).*と(.).*? は、どのような意味なのでしょうか?
ちょっと違いますが、下記を実行すると
<?php
$var="Japan America France England";
if(preg_match("/\b([AIUEOaiueo]*)\b/",$var,$result)){
print_r($result);
print("<br>");
}else{
print(一致しませんでした。);
}
if(preg_match("/\b([AIUEOaiueo]?)\b/",$var,$result)){
print_r($result);
print("<br>");
}else{
print(一致しませんでした。);
}
if(preg_match("/\b([AIUEOaiueo].*)\b/",$var,$result)){
print_r($result);
print("<br>");
}else{
print(一致しませんでした。);
}
if(preg_match("/\b([AIUEOaiueo].*?)\b/",$var,$result)){
print_r($result);
print("<br>");
}else{
print(一致しませんでした。);
}
?>
結果は、
Array ( [0] => [1] => )
Array ( [0] => [1] => )
Array ( [0] => America France England [1] => America France England )
Array ( [0] => America [1] => America )
となりました。
(.)*は最長マッチ、(.)?は最短マッチだそうですが、何もセットされません。
ちょっとお手上げ状態になりました。
正規表現を覚えるのは、パターンでも覚えるのでしょうか?
それとも、こういうのも理解しないといけないでしょうか?
No.5
- 回答日時:
if(preg_match("/\b([AIUEOaiueo]*)\b/",$var,$result))
if(preg_match("/\b([AIUEOaiueo]?)\b/",$var,$result))
こちらの件、
if(preg_match("/\b\b/",$var,$result))
でもマッチします。
境界を表すものを連続して表記してもマッチするようです。(境界を一文字とカウントしないから?)
ソレを踏まえた上で、「*」「?」ですが
「*」は0文字以上にマッチするわけなので、空になるのは分かると思います。
「?」に関してですが、「*?」「+?」とあるときは最短マッチですが
それ以外で「?」と記述した場合は、「直前の文字を0又は1回にマッチ」となります。
その為、後方参照される値には含まれないものと思います。
$var="Japan America France England";
if(preg_match("/\b([AIUEOaiueo]*)\b/",$var,$result))の結果が、
Array ( [0] => [1] => )
となるのは、()の中に量指定子が入っているわけで、
([AIUEOaiueo]*)で検索。
[AIUEOaiueo]が0回以上、つまり「空」を検索して、空がマッチ。$result[0]は「空」
([AIUEOaiueo]*)とグループ化しているので、$result[1]は「空」
if(preg_match("/\b([AIUEOaiueo].*)\b/",$var,$result)){ の結果は、
Array ( [0] => America France England [1] => America France England )
これは、[AIUEOaiueo]の任意の1文字で検索して、最長マッチ
([AIUEOaiueo].*)とグループ化しているので、$result[1]は、America France England
if(preg_match("/\b\b/",$var,$result))の結果は、
Array ( [0] => )
空で検索して、[0]は空
グループ化していないので、ここで検索終了。
/(.)?/は最短マッチ
/(.)*/は最長マッチという意味で、
「*?」「+?」も最短マッチ
$var = "abcd";
preg_match("/(.)*/", $var, $match);
$match[1]にdが入る
最後に検索された値が残る(上書きされる)
(.)を検索しているのではないでしょうか(..)
ありがとうございました。
No.4
- 回答日時:
No.2です。
if(preg_match("/\b([AIUEOaiueo]*)\b/",$var,$result))
if(preg_match("/\b([AIUEOaiueo]?)\b/",$var,$result))
上記は等価で、いずれの「単語」にもマッチします。
結果 Array ( [0] => [1] => ) といことは 「空」が入っているということです。
したがって、量指定子の単なる「*」「?」はこの場合意味が無いです。
場合によって、*?、(..)?、(..)*?、とすると違う意味になります。
No.3
- 回答日時:
あまり自身はないですが・・・・
$var = "abcd";
preg_match("/(.)*/", $var, $match);
これの結果が、$match[1]にdが入るという件、
「.」は任意の一文字をさし、任意の一文字だけをグルーピングしている
グルーピングの外側で「*」を指定しているので
「a」が検索され、「b」が検索され、「c」が検索されて、「d」が検索される。
ただしグルーピングされる内容は一文字だけになるため、最後に検索された値が残る(上書きされる)
というものなのだと、「思われます」。
結果から見る予測なので、実際はどうなっているのかは分かりません。
この回答への補足
回答ありがとうございます。おっしゃっていることはあっているような感じがします。#2の補足で、また質問しました。正規表現は難しいですね。(^_^;)
補足日時:2009/07/04 19:00No.1
- 回答日時:
先頭の文字を取得するには、
preg_match('/^(.)/', $a[0], $match)
とすれば良いと思います。
「^」が先頭であることを示します。
また、「$」を最後に入れると、そこが文末です。
この回答への補足
ありがとうございます。ところで、
preg_match("/(.)*/",$a[0],$match)
は、なぜ下一桁を取得したのでしょうか、
「.」任意の一桁
「*」0回以上の繰り返し
で$a[0]は"1001"となりますが、
次はその中の(.)を検索すると思うのですが、
数字とみなして、右から検索したのでしょうか?
すいません。
$a = (1aaa,xxxx,yyyy)
$a = explode(',',$buffer);
preg_match("/(.)*/",$a[0],$match)と、
"1aaa"で実行すると$a[1]は"a"でした。
"Japan America France England"の検索で
/([AIUaiu].*?)([EOeo].*?)/の場合
preg_matchで値を取得した場合
[0]"America"
[1]"Am"
[2]"erica"
と取得されています。この場合は左から検索しています。
なぜ下1桁を取得したのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) こんにちは。ExcelのVLOOKUP関数のことで教えてください。 2 2022/05/07 11:33
- その他(プログラミング・Web制作) awkの正規表現での最左最短マッチング 3 2022/07/01 00:10
- Excel(エクセル) エクセルの関数について 5 2023/01/26 15:26
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) ExcelVBAで、型が一致しませんのエラーについて 3 2023/06/20 09:51
- Excel(エクセル) この関数の誤りを教えて下さい。 3 2023/08/08 07:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現 画像リンクのaltの取得
-
VBAを使ってHTMLソースから特定...
-
PHPで あるフォルダ内の、特定...
-
住所から特定の文字列、数値を...
-
正規表現で「0」のみ抽出
-
日本語の文字列のみをURLエンコ...
-
正規表現で特定のHTMLタグのク...
-
カンマ区切りの金額を検索する...
-
正規表現で記号 & アンドの検索...
-
PHP preg_matchでUnknown modif...
-
htmlソースからタグ内のテキス...
-
Excelで数字のみを2倍3倍にする...
-
文字の入力で横バー上段、中断...
-
Excel関数「COUNTIF」で”文字”...
-
phpのメールフォームの完了画面...
-
VBAのコマンドボタンの文字列の...
-
エクセルのCOUNTIFが正しくカウ...
-
エクセルでの漢字、カタカナ、...
-
XMLのタグ名の禁則文字
-
記号は半角と全角どちらがよい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを使ってHTMLソースから特定...
-
、"(ダブルクォーテーション)...
-
preg_matchでエラーが出ます。
-
PHPで変数から1行目だけを取得...
-
PHPの「ereg」って何の略で...
-
PHPで あるフォルダ内の、特定...
-
PHPの正規表現で住所を分けるに...
-
Excelで数字のみを2倍3倍にする...
-
正規表現で「0」のみ抽出
-
住所から特定の文字列、数値を...
-
PHPで<a>タグ内からURLと文字を...
-
正規表現で特定のHTMLタグのク...
-
正規表現で、半角大文字と半角...
-
正規表現でシングルクォーテー...
-
正規表現パターンの記入方法に...
-
preg_matchでのマッチが正しく...
-
Smartyで部分一致
-
正規表現を使いimgタグ内から幅...
-
電話番号のチェック ハイフン...
-
php 正規表現で(ただし○○は除...
おすすめ情報