正規表現(せいきひょうげん)がわかりません!

スポンサーリンク

今日、正規表現の本を読みました。

まずは、正規表現って何?って人の為に。

正規表現(せいきひょうげん、regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。

フリー百科事典『ウィキペディア(Wikipedia)』

正直なところ、上の説明を読んでもよくわかりません。

なぜ、私が正規表現の本を読んだかというと、mod_rewriteのためです。

なんじゃ?って人の為に説明です。

mod_rewriteはApacheの機能の一つです。

Apacheとは、Webサーバソフトウェアの一つです。

いろいろ使い方はあるのですが、私がしたいことはアドレスの書き換えです。

説明するより、実際に見てもらったほうが早いでしょう。

きになるこまめ
気になるニュースの感想など思いつくままに♪

見たいなアドレスを、

404 NOT FOUND | きになるこまめ
気になるニュースの感想など思いつくままに♪

に書き換えることが出来ます。

なぜ書き換えるかと言うと、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などにマッチ。

*注意
まだ、正規表現がわからないので、上記の説明に間違っている例などがあるかも知れません。

もし、本当に正規表現を知りたい場合は、他のサイト等で勉強してください。

コメント

タイトルとURLをコピーしました