WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:正規表現についての質問

0:[投稿] perl_syo [2003/02/12 12:16 ][環境:IE6 perl]

正規表現についてお伺いします。
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;

上記コードはハイパーリンクに書き換えコードとお見受けしますが、内容の細かな解読が困難です。
([^=^\"]|^)部分が$1
(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)部分が$2で、
(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)は、http:の後に\w(英数字及び_)その他.~-/?&=@;#:%の記号等の1文字以上連なった単語と一致・・・
これはわかりますが、どうも
([^=^\"]|^)
この顔文字のようなものの意味がわかりません。
どなたか解読できる方いらっしゃいますか??

また、例えば
$text =~ s/[ぁ-ん A-Z a-z \S]+/ドラえもん/;
のように、正規表現で使用する文字列の省略表現がありますが、これは、やはり「文字一覧表」のようなものがあり文字の並び順が決められているのですか?
英語小文字の場合、上記だと
abcdefghijklmnopqrstuvwxyzという順番で並んでいるのをa-zと省略表記しているように見えます。
すると、文字の並び順は決められているということになります。

やりたいこととしては、ひらがなと英語が順に並んでいるなら、
ぁ-z
というようなことです。
わかりにくかったら申し訳ありません。ご教授お願いします。


1:[回答] 薫 [2003/02/12 13:16 ]

正規表現に関しては「perl 正規表現」などをキーワードに検索すると
500件ほど解説サイトがHITするので、あちこち見られるといいと思います。

> やりたいこととしては、ひらがなと英語が順に並んでいるなら、
> ぁ-z
> というようなことです。

あ-ん、A-Z、a-z それぞれが順番だったとしても
あ-んの塊とA-Zの塊とが連結していないので、別々になっているのでしょう。
確か、文字コードの順序だった気がします。
# ちょっと自信なし


2:[回答] ひよこ [URL] [2003/02/12 15:24 ]

> ([^=^\"]|^)
> この顔文字のようなものの意味がわかりません。
同じ話題が・・と思ったら現物が無いようで・・
googleのキャッシュです。
No71あたりから

http://216.239.33.100/search?q=cache:n3VJkG7b54gC:pc.2ch.net/test/read.cgi/php/1038146241/-100+%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+%E8%87%AA%E5%8B%95%E3%83%AA%E3%83%B3%E3%82%AF&hl=ja&lr=lang_ja&ie=UTF-8

同上、No25のように
自動リンク処理するときにすでにA タグがあった場合の処理のようですが詳しくはわかりません。


3:[質問] perl_syo [2003/02/12 16:38 ]

> 正規表現に関しては「perl 正規表現」などをキーワードに検索すると
> 500件ほど解説サイトがHITするので、あちこち見られるといいと思います。

いや、すみません、GOOGLEで目が回ったときにお伺いしとります。
正規表現についても基礎的なことは心得ていますがこの顔文字に関してはさっぱり役に立ちません。

> ひよこさん
う〜ん、教えていただいたリンク先サイトの内容、わりと参考になりました。みなさん理解しにくそうにしているということは理解できなくてもいいということで・・([^-^;])

ところで、検索エンジンGOOGLEで今回のような記号の羅列を検索したい場合、みなさんどうしてるのでしょうか。


4:[回答] B-Cus [2003/02/13 09:39 ]

> ([^=^\"]|^)

(A|B) → A または B
A → [^=^\"] → 「=」「^」「"」以外の任意の 1文字
B → ^ → 行頭
([^=^\"]|^) → 「=」「^」「"」以外の任意の 1文字か、あるいは行頭

> 「文字一覧表」のようなものがあり文字の並び順が決められているのですか?

ASCII コードとして定められています。
 http://www.psl.ne.jp/perl/pdojo00b.html

# まぁ ASCII じゃない環境 (EBCDIC とか) もあるけど、
# ここでは考慮しなくてよいでしょう。


5:[回答] 薫 [2003/02/13 09:43 ]

> GOOGLEで目が回ったときにお伺いしとります。
こちらこそ失礼しました。

複雑そうな正規表現も、実は基本的なことしか使っていなくて、
例外処理(という表現であっているかな?)等が入るために
知らない記述のように見えるのではないかな、と思います。
# とは言え、自分も得意な訳ではないですが。

リンクを抜き出そうと思ったら、http://hogehoge.abcといった記述を
HITさせようと思いますよね。
なので
1.「http://」という文字をまず探す
2.でも「<a href=」「<a href="」の後ならhitしなくてよい
 (2重リンクになってしまいますからね)
という方法だと思います。

> ([^=^\"]|^)
は、少しずつ分解すれば、
[^abc] → abcのいずれも含まない(否定)
foo|bar → foo もしくは bar
となり、
=か"以外「[^=^\"]」、もしくは 「|」、行の先頭「^」
にhitする事になります
# なので、([^=\"]|^) でもいいような気がするのですが...未確認です。


> 記号の羅列を検索したい場合、みなさんどうしてるのでしょうか。
「リンク置き換え」だと予測している時は、
「perl 正規表現 リンク」といったキーワードで検索します。
表現は違っても求める結果は同じ筈なので、
敢えて複数のサイト(構文)を拝見します。
MLなんかもとても勉強になりますね。

長文失礼しました。ご参考になれば。


6:[回答] 薫 [2003/02/13 09:47 ]

もたもたしてたら被りました(汗
1つ修正を。

2.でも「<a href=」「<a href="」の後ならhitしなくてよい
 ↓
2.でも「href=」「href="」の後ならhitしなくてよい
(aとhrehの間が、必ずしも半角スペースとは限らないので)


7:[完了] perl_syo [2003/02/13 18:55 ]

いや〜、理解しました。
B-Cusさん、薫さんご丁寧にありがとうございました。
今までは、正規表現を避けていたところがありましたが、今回のことでとても興味がわきました。
わかりにくいけどその分面白いかもしれませんね。
ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World