今日、正規表現の本を読みました。
まずは、正規表現って何?って人の為に。
正規表現(せいきひょうげん、regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。
正直なところ、上の説明を読んでもよくわかりません。
なぜ、私が正規表現の本を読んだかというと、mod_rewriteのためです。
なんじゃ?って人の為に説明です。
mod_rewriteは、Apacheの機能の一つです。
Apacheとは、Webサーバソフトウェアの一つです。
いろいろ使い方はあるのですが、私がしたいことはアドレスの書き換えです。
説明するより、実際に見てもらったほうが早いでしょう。
見たいなアドレスを、
に書き換えることが出来ます。
なぜ書き換えるかと言うと、SEO的に有利って理由もあります。
でも、ただカッコいいからって理由です。
やり方ですが、.htaccessのファイルに
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/sample/(.*)$ /shop/sample/$1
*注意 上の例で、https://kininaru.komame.net?a=123&b=456は、https://kininaru.komame.net/123/456になりません。どっかのサイトの例をそのままコピペしました。
見たいに書きます。
おっと、.htaccessに書く以外に、http.confに書く方法もあります。
でも、こちらは私の様にレンタルサーバーの場合は難しい場合が多いです。
で、先ほどのRewriteEngine onで始まる、最後の
RewriteRule ^/sample/(.*)$ /shop/sample/$1
で、正規表現が使われています。
この部分がよくわからなくて、なかなか上手くいきませんでした。
今回は、正規表現のメモって意味で書いています。
【正規表現】
メタキャラクタ
. 任意の1文字にマッチ。(改行文字は含まれない)
| 選択をしめす。左右のどちらなの正規表現にマッチ。
[ ] 文字クラス。[ ]で囲んだ文字のいずれかが一致する。
[^] 否定文字クラス。[ ]で囲んだ文字のいずれも一致しない。
– [ ]の中で文字の範囲を指定する場合使われる。
例 [0-9] [a-zA-Z]
ここまでは、何とかわかりました。
でも、文字クラスのところを勘違いしていました。
たとえば、[cat]ってのがあったとします。
この場合、c.a.tのどれかの1文字にマッチするようです。
ポイントは、1文字ってところではないでしょうか?
catって言う3文字では無いようです。
繰り返し
* 0回以上の繰り返し(連続)にマッチ。
+ 1回以上の繰り返し(連続)にマッチ。
? 0回または1回の出現にマッチ
{n} n回の繰り返し(連続)にマッチ。
{n,} n回以上の繰り返し(連続)にマッチ。
{n,m} n回以上m回以下の繰り返し(連続)にマッチ。
上の中で戸惑ったのが、0回以上ってあるところです。
例 A.*C の場合、AC、ABC、A2C、AbbbbbbbbCにマッチ。
この中のACに戸惑いました。
絶対、文字が必要だと思っていたのですが、0回とは文字が無い場合もあるようです。
もし、絶対一文字は必要って場合は、
例 A.+C って書くようです。
+は、1回以上の繰り返しだからです。
ついでに、
例 A.?C の場合は、AC、AbCなどにマッチ。
上の例のA.+Cとの違いは、?は0回または1回の出現なので、今回の場合は2文字か3文字にしかマッチしません。
例 A.{3}Cは、ABBBC、AxyzCにマッチ。AC、AbcC、AbbbbbbbbbCにはマッチしません。
今回の場合は、AとCの間に何でもいいから3文字あります。
例 A.{3,5}C AとCの間に、3文字以上5文字以内のAから始まって、Cで終わる文字列にマッチ。A123C、AmmmmmCなどにマッチ。
*注意
まだ、正規表現がわからないので、上記の説明に間違っている例などがあるかも知れません。
もし、本当に正規表現を知りたい場合は、他のサイト等で勉強してください。
コメント