正規表現道場@2ch Part4
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/01/17 11:51:25ID:SH1ygN1Pこのスレは有用そうな正規表現を紹介したり、
どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
http://www.sixnine.net/regexp/
ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
http://www2.famille.ne.jp/~akio1998/l_grep.html
過去スレ
正規表現道場@2ch
http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0494nobodyさん
2005/07/04(月) 16:49:45ID:???あのね、
http://pc8.2ch.net/test/read.cgi/php/1117945031/769
に答え出てますよ。
0496nobodyさん
2005/07/06(水) 21:23:47ID:uSLwEBZ9見たいな数値と.の組み合わせの文字列を
123.45789のように
最初に出現する.を除き除去するにはどうすればよいでしょうか?
0497496
2005/07/06(水) 21:26:13ID:uSLwEBZ9javascriptで行うつもりです。
0498nobodyさん
2005/07/06(水) 22:06:55ID:???var a='123..45.78.9'.replace(/\./,'<<escape>>').replace(/\./g,'').replace(/<<escape>>/,'.');
0499nobodyさん
2005/07/08(金) 22:48:37ID:???13756〜36865みたいな中途半端な数字の範囲は
どう表現すればよいのでしょうか?
0501499
2005/07/09(土) 00:10:04ID:???正規表現でできると講師に聞いたのでやってみようといろいろ試したのですが全くわからなくて
ここで聞いてみたのですが・・
正規表現以外でできるものがあるのですか?
0502JAPU
2005/07/09(土) 02:15:39ID:???上記の条件を受理する正規表現は存在するので,理論上は可能。
たとえば,123 - 456 の整数なら (JS知らないのでPerlの表現になるけど)
^(?:12[3-9]|1[4-9]\d|[23]\d\d|4[0-4]\d|45[0-6])$
または
^(?:123|124|125| 途中略 |454|455|456)$
となる。13756 - 36865 でも同様に書ける。
でも,数字に変換して,その範囲かどうかチェックしたほうが速くない?
0503nobodyさん
2005/07/09(土) 08:57:03ID:b0QlFvY60504nobodyさん
2005/07/09(土) 18:16:14ID:XiYWtJZE0505JAPU
2005/07/09(土) 19:55:25ID:???(日本語版「詳説正規表現」)
0506nobodyさん
2005/07/09(土) 22:43:09ID:???0507nobodyさん
2005/07/11(月) 09:54:07ID:???最近、昔懐かしいコテをいろいろ名乗っている人がいるので
このJAPUたんも多分偽者ジャマイカ?
ほかにはT女の竹田とかも見た。
0508nobodyさん
2005/07/12(火) 01:28:34ID:???0509nobodyさん
2005/07/12(火) 06:21:34ID:???0510JAPU
2005/07/12(火) 21:37:17ID:???http://www.japu.org/tmp/2ch.txt
0511nobodyさん
2005/07/13(水) 06:58:27ID:???0513506
2005/07/14(木) 01:35:07ID:???チャンコダイニング若で鍋でも囲もうじゃないか。
0514nobodyさん
2005/07/17(日) 16:02:42ID:6p9wxgWqこの正規表現を理解したいです。
\$([E-G])
\x0f/e
この2点の意味がわかりません。
/はどのような意味を持つのでしょう?
よろしくお願いします。
0515514
2005/07/17(日) 23:47:07ID:???0516nobodyさん
2005/07/17(日) 23:49:01ID:???まあそーゆーな
16進で1b,$そのもの,EからGのどれか,16進21から7aのどれかの中から一文字以上繰り返し,16進0f
で/は閉じ
eはフラグだから正規表現とは関係なし
0517516
2005/07/17(日) 23:53:33ID:???その場合は/は/そのもの
最後のところは16進0f, /, eというシーケンス
ていうか何の言語での話か
わからないとわからないよ
0518nobodyさん
2005/07/18(月) 00:25:05ID:???0519514
2005/07/18(月) 00:57:29ID:???/−/e
は正規表現の置換ですね。
$ = 0x24
E-G = 0x45-0x47
のことだとわかって納得しました。
本に書いてあるコードなんですが、直前まで16進数で解説してたのでわかりませんでした。
ありがとうございました。
0520nobodyさん
2005/07/18(月) 01:04:26ID:jRcBcWiXよかったら書名教えて
あと「正規表現の置換」て意味わからないから
0521nobodyさん
2005/07/18(月) 01:40:16ID:???s/♂/♀/g
0522nobodyさん
2005/07/18(月) 03:34:06ID:???0523nobodyさん
2005/07/18(月) 12:46:19ID:???性器表現のチカン ><
s/♂/♀/g
522 :nobodyさん sage :2005/07/18(月) 03:34:06 ID:???
それじゃ性転換!
0524nobodyさん
2005/07/18(月) 16:54:26ID:fWK6qRMT0525nobodyさん
2005/07/18(月) 16:58:35ID:???0526PHPで。
2005/07/21(木) 10:09:56ID:jGRVDiGIこういったURLがあり、置換で必要のない変数を削除したい。
例えば、 「&a=」「&c=0」「&e=」を削除して、「index?b=&d=1」のようにしたいのです。
ちなみに、これらの変数には数字(1桁)がくる場合と空白の場合があります。
正規表現が初めてなので、とりあえずやってみたのは一個一個削除することです。
$url = ereg_replace('\&a=[0-9]?','',$url);
$url = ereg_replace('\&c=[0-9]?','',$url);
$url = ereg_replace('\&e=[0-9]?','',$url);
一応これで成功はしたのですが、何せ初めてなのであっているかどうか分かりません。
それと、もし1回の変換で可能であればその方法も教えて下さい。
0527nobodyさん
2005/07/21(木) 10:19:40ID:???PHPは知らんのだけど、その例だと "a=" は消えないだろ。前に & ついてないし。
> もし1回の変換で可能であればその方法も教えて下さい。
もうちょっと条件を一般化してくれないと、できるかどうかは誰にも分からない。
0528nobodyさん
2005/07/21(木) 10:41:27ID:???フォームのGETで出されたURLから必要の無い変数を削除したいのです。
フォームは自分でいじれないので、URLを直接置換するしか方法が無くて。
先の例ですが、GETで渡されたURLで、最初にくる変数には確かに「&」がつかず「?」の次から始まりますね。
それで今ちょうど躓いてしまったところです。(例と実際のソースが異なるためミスってしまいました)
条件1
・英字の先頭には「&」もしくは「?」がくる。「?」は削除せず、「&」は削除
・「& or 無し」+「英字1文字」+「=」+「数字1文字 or 空白」を削除
例: &c=
これともう一つ別件で
条件2
・英字の先頭には「&」もしくは「?」がくる。「?」は削除せず、「&」は削除
・「& or 無し」+「英字1文字」+「=」+「英数字の組み合わせ6文字」を削除
例: ?c=ff00cc
わかりにくいかも知れませんが、精一杯説明したつもりです。
どうかヨロシクお願いします。
0529nobodyさん
2005/07/21(木) 10:57:35ID:???phpは知らんので繰り返し指定子とか使えるなら使えばよい
0530nobodyさん
2005/07/21(木) 10:58:05ID:???&?[a-zA-Z]=([a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9])|([a-zA-Z]?)
0531nobodyさん
2005/07/21(木) 10:59:39ID:???あー、なるほど!1文字ずつ指定していけばいいのか。
まとめてやろうとしたからダメだったっぽいです。
今後は繰り返し何タラとかも覚えていきます。ありがとうでした。
0532nobodyさん
2005/07/21(木) 13:26:18ID:???置換でやろうとせずに一度ばらしてから組み立てた方が
見通しがいいと思うけどな。
0533nobodyさん
2005/07/22(金) 11:54:34ID:kQk294zK0537nobodyさん
2005/07/22(金) 15:22:08ID:???↓
http://www.google.co.jp/%E4%BC%9D%E8%AA%AC/
にしてたいんだよなー。(ググルを例に取った)
RewriteRule ^/(%[0-9A-Fa-f]{2})+/ /q=$1
これでやってみたけど駄目だった。
助けてくれ。
0538nobodyさん
2005/07/22(金) 15:46:20ID:???RewriteRule ^/(%[0-9A-Fa-f]{2}|\+|[0-9A-Za-z_.-])+/$ /search?q=$1
0539nobodyさん
2005/07/22(金) 16:00:06ID:???それも試しましたがダメでした。むー、原因が分からん。
でも試行錯誤しているうちに正規表現が楽しくなってきた。
0540nobodyさん
2005/07/22(金) 16:43:02ID:???それって、本当にマッチしてない?
正規表現の問題じゃなくて mod_rewrite 側で問題があるような希ガス。
0541nobodyさん
2005/07/22(金) 17:20:52ID:???まずは rewrite_log を出して確認してみるとか、
もっと緩いルール、例えば ^/(.+)/ /q=$1 あたりから始めてみるとか。
0542nobodyさん
2005/07/22(金) 17:32:44ID:???ですよねぇ。文法的には合ってるはずなんだけどなぁ。
ちなみに、半角英数ならちゃんと出来たんです。
http://www.google.co.jp/2ch+nobdy/
みたいなやつね。
0543nobodyさん
2005/07/22(金) 19:59:19ID:Hy++Zfidギンギラギンにさりげなく さりげなく生きるだけさ〜♪
0544nobodyさん
2005/07/23(土) 00:56:00ID:???自宅のApacheでログをみたところ、何やら文字化けを起こしているようです。
http://localhostp/%A5%CA%A5%A4%A5%AD/
↓
File does not exist: c:/public_html/・ハ・、・ュ/
%A5%CA%A5%A4%A5%AD が ・ハ・、・ュ と文字化けしてしまうようです。
原因分かりますか?
0547nobodyさん
2005/07/23(土) 17:44:37ID:2bOgW3d1([0-9A-Za-z_]+)
って書いたらうごくんだけど、これって正しい書き方?
0550nobodyさん
2005/07/24(日) 01:10:29ID:???どこに行ったかわかりません。スレ違いかも知れませんが、
ポインタだけでもお示しいただければ幸いです。
0551nobodyさん
2005/07/24(日) 01:31:12ID:???0552nobodyさん
2005/07/24(日) 12:09:04ID:???真っ先に布団を捜したんですがありませんでした。
あれを家から持ち出すはずがないので、空き巣にでも
入られたんじゃないかと心配になってきました。
0553nobodyさん
2005/07/24(日) 13:44:01ID:???0554nobodyさん
2005/07/24(日) 13:47:30ID:???0555nobodyさん
2005/07/24(日) 15:49:03ID:vU2XL6goおまいの心の中にしまってあるんだよ・・・
0557nobodyさん
2005/07/24(日) 21:17:58ID:???0559550
2005/07/25(月) 00:40:13ID:???置いてありました。トイレットペーパーなんかを置く棚です。
下痢の時とかトイレに本を持ち込むんでした。
>>554
あれは確か、Perlで作るCGI入ry
スレ汚し申し訳ありませんでした。「単語境界とは何か」
ということについて、これからじっくり考えてみます。
0560nobodyさん
2005/07/25(月) 09:11:16ID:???普通こんな感じ
0561560
2005/07/25(月) 09:12:21ID:???間違えた。
0562nobodyさん
2005/07/27(水) 03:13:00ID:rvBHMPTm配列に格納します。
$array = preg_split("/\s/", $string, -1, PREG_SPLIT_NO_EMPTY);
この時、空白だけではなく
「英数字か記号1字で、前後が英数字でない文字」
も区切り文字として正規表現に加えたいんですが、どういう風に
書けばいいでしょう? お願いします。
0563nobodyさん
2005/07/27(水) 13:59:47ID:???「英数字か記号1字で、前後が英数字でない文字」 だと記号は全部消える気がするんだけどいいのかしら。
"記号"は"文字"の中に含まれない、ってことかな?
0564562
2005/07/27(水) 15:16:57ID:???すいません、説明がダメダメでした。英数字でも記号でも、
1字のみの場合は空白と同じ扱いにしたいということです。
$string = "This is a pen."; なら
Array ( [0] => This [1] => is [2] => pen. )
$string = "A to Z"; なら
Array ( [0] => to )
$string = "15 - 9"; なら
Array ( [0] => 15 )
$string = "YOMIURI ON-LINE"; なら
Array ( [0] => YOMIURI [1] => ON-LINE )
という具合です。なんだかよくわからなくなってきました。
0565nobodyさん
2005/07/27(水) 16:12:52ID:???/(?:^|\s+).(?:\s+|$)|\s+/
↑こういうのとは違う?
"A to Z" は [0] => to にならないよ。
0566562
2005/07/27(水) 17:14:16ID:???ありがとうございます。えーと、先に挙げた例でうまくいかないのは
"A to Z"ではなく"15 - 9"が
Array ( [0] => 15 [1] => 9 )
となるわけですが、これって /(?:^|\s+).(?:\s+|$)|\s+/ の前の方の
表現で" - "がマッチして、残りの9はマッチしなくなるんですね?
"1 2 3 4 5"でやってみると
Array ( [0] => 2 [1] => 4 )
となります。こういう時ってどこで勉強したらいいんでしょうか?
なんかもう頭が泥沼です。
0567nobodyさん
2005/07/27(水) 17:42:00ID:???/(?:^|\s+|(?<=\s)).(?:\s+|$)|\s+/
でどうよ?
0568nobodyさん
2005/07/27(水) 17:47:02ID:???/(?:(?:^|\s+|(?<=\s)).(?:\s+|$)|\s+)+/
何度もスマン。
0569562
2005/07/27(水) 18:20:12ID:???いえいえ、何度もありがとうございます。期待した通りの
結果が得られたのですが、表現がそこまで行くと私には
魔法の呪文としか理解できなくて、もしよろしければ少し
解説いただけませんでしょうか?
(?:...) が、グループ化、ということはわかったのですが、
(?<=\s)) というのは何でしょう? たびたび恐縮ですが
正解を教えてもらうだけでなく、表現の中身も理解して、
自分で解を導けるようになりたいです。お願いします。
0570nobodyさん
2005/07/27(水) 19:59:22ID:???何て言うんだっけ、「前方一致言明」 とかだっけ。
文字列 (上の場合".(?:\s+|$)") の前に、"\s"があった場合、マッチする、ってやつ。
まあ、下記参考ー
[PHP マニュアル] -> [パターン構文]
http://php.s3.to/man/pcre.pattern.syntax.html#regexp.reference.assertions
[SMART]->[PERL]->[正規表現]
http://www.rfs.jp/sitebuilder/perl/02/09.html の [拡張構文]
0572nobodyさん
2005/07/28(木) 11:40:06ID:???さらに\,は\\,のようにしています
perlでこれを分割したいのですが、
,に一致して(\\)+,に一致しないものはどう書けばよいのでしょう
よろしくお願いします
0573nobodyさん
2005/07/28(木) 11:45:32ID:???0574nobodyさん
2005/07/28(木) 11:50:38ID:???0575nobodyさん
2005/07/28(木) 12:08:05ID:MIm3P7gz?A=1111&B=2222&C=33&D=444 から「=」と「&」と「?」を抜き取りたい。
(A1111B2222C33D444 みたいな感じ)
それだけなら何とか今の知識で大丈夫なのですが、
このAやらBやらが毎回この順番でなるわけではなく、
しかも出現したりしなかったりするわけです。
?B=2223&A=1111&D=444 とか
?C=33&A=1111 のようになることもあります。
うまいこと置換する方法を教えて下さい。
0576nobodyさん
2005/07/28(木) 12:39:27ID:???perl なら tr/=&?//d;
0577nobodyさん
2005/07/28(木) 13:49:11ID:???0578nobodyさん
2005/07/28(木) 14:04:30ID:???色々悩んでいるうちに解決しちゃいました。
>>576-577 さんありが�d
0579nobodyさん
2005/07/28(木) 14:16:26ID:???^(?:(A)=(\d+)|(B)=(\d+)|(C)=(\d+)|(D)=(\d+)|[^?&]+|[?&])+$⇒$1$2$3$4$5$6$7$8
?A=123&C=456&B=0&A=2222&F=0000&DUMMY⇒A2222B0C456
0581nobodyさん
2005/07/28(木) 15:43:53ID:???1回目送られてきたデータをURLデコード後、ハッシュにばらして同じ名前、値でもう1回送ることです
改行コードはまず<br>に変換します
その後、<br><br>を<br>に置換したいのすがどのように書けばいいでしょうか?
もしくは根本的な解決方法はあるでしょうか?
0582581
2005/07/28(木) 17:03:13ID:???各<br>の前に0x0dが含まれてた('A`)
0583nobodyさん
2005/07/29(金) 13:13:28ID:???例えば /\"/ と/"/ の違いって一体何ですか?
0584nobodyさん
2005/07/29(金) 14:58:02ID:???\ には大きく分けて二通りの意味があって、
1. (主に) 正規表現のメタ文字として使われる文字を、メタ文字でない通常の文字として解釈させる
2. 正規表現のメタ文字でない文字 (英数文字など) に特殊な意味を持たせる
その例だと 1. になって、単なる " として解釈されるようになる。
ただ " はもともとメタ文字としての意味はないので、要するに、両者に違いは無い。
0585nobodyさん
2005/07/29(金) 16:05:14ID:???"を"に変換する正規表現がサイトによって異なっていたので気になってました
ありがとうございます
0587nobodyさん
2005/07/29(金) 19:33:29ID:???s/"// だと後の色変わっちゃって読みにくいので、s/\"// にしちゃう。
0588nobodyさん
2005/07/30(土) 00:23:34ID:???0589nobodyさん
2005/08/02(火) 23:32:23ID:Yo8mbngHそうでないかの判定を行いたいと思ってます。
$str = "192.168.0.1";
if ( ereg("(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)", $str) ) {
echo "入力された文字は、IPアドレスです";
} else {
echo "入力された文字は、IPアドレスではありません";
}
↑のようなコードで実行したのですが、どうしても、
IPアドレスであると判断してくれません。
どのようにすれば、IPだと判定してくれるのでしょうか<(_ _)>
0590nobodyさん
2005/08/03(水) 00:41:00ID:???0591nobodyさん
2005/08/03(水) 00:44:23ID:???ありがとうございます。Googleで、調べまくっても判らないんです。
なにとぞお願いします・・・<(_ _)>
0592nobodyさん
2005/08/03(水) 03:02:28ID:???0593589
2005/08/03(水) 06:12:36ID:???if ( preg_match("(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)", $str) ) {
で良いんですか?しかし、IPと判定されません。
正規表現の部分が間違ってるんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています