トップページ⇒tech
1001コメント322KB

正規表現 Part8

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/03/26(土) 00:38:06.48
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

正規表現 Part7
http://hibari.2ch.net/test/read.cgi/tech/1268979408/
0002デフォルトの名無しさん2011/03/26(土) 01:09:51.73
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
【 初心者 】 正規表現 【 入門 】
http://funcchan.blog16.fc2.com/
0003デフォルトの名無しさん2011/03/26(土) 01:10:52.77
◆関連スレ
[UNIX板] 正規表現
http://pc12.2ch.net/test/read.cgi/unix/1039165754/
[WebProg] 正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/

◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] http://pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] http://pc11.2ch.net/test/read.cgi/tech/1186030400/
[5] http://pc12.2ch.net/test/read.cgi/tech/1212498448/
[6] http://pc12.2ch.net/test/read.cgi/tech/1241537764/
[7] http://hibari.2ch.net/test/read.cgi/tech/1268979408/
0004デフォルトの名無しさん2011/03/26(土) 01:11:41.35
スルーされにくい質問のテンプレと例

●正規表現の使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
0005デフォルトの名無しさん2011/03/26(土) 13:27:53.72
乙
0006デフォルトの名無しさん2011/03/27(日) 17:45:43.26
この勢いだとdat落ちしそうだな
0007デフォルトの名無しさん2011/03/27(日) 18:17:41.22
ここで聞くより試した方が早いし

JavaScript
http://regexpal.com/

Ruby
http://www.rubular.com/

.NET
http://regex-recipe.frozenlib.net/

PHP
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
0008デフォルトの名無しさん2011/03/27(日) 19:28:21.14
>>7
perlのってないですかね
0009デフォルトの名無しさん2011/03/30(水) 11:49:01.94
どなたかご教授ください・・・
●正規表現の使用環境
EmEditor

●検索か置換か?
置換

●説明
鍵カッコ内の文字列と前方の文字列を入れ替えたい。

●対象データ
AAA「BBB」/CCC「DDD」/EEE「FFF」…YYY「ZZZ」

●希望する結果
BBB「AAA」/DDD「CCC」/FFF「EEE」…ZZZ「YYY」
0010デフォルトの名無しさん2011/03/30(水) 16:26:48.54
>>9
試してないけど
検索: ([^「」/]+)「([^」]+)」
置換: \2「\1」
0011デフォルトの名無しさん2011/03/31(木) 09:04:29.54
>>10
ありがとうございます!
0012デフォルトの名無しさん2011/04/03(日) 22:46:00.44
●正規表現の使用環境
秀丸(複数行置換)
●検索か置換か?
置換
●説明
上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ
変更したいです。

●対象データ
name=Relative
color=#000000
style=0

●希望する結果
name=Relative
color=#000000
style=2

********************************************
下のようにnameとcolorは値が変わるので.*としているのですが、
置換文の置換時に変更しないという書き方が分かりません。
分かる方おりましたら教えて下さいませ。

[検索条件]
name=.*
color=.*
style=0

[置換文]
name=
color=
style=2
0013デフォルトの名無しさん2011/04/03(日) 23:22:18.38
検索 name=(.*)\ncolor=(.*)\nstyle=0
置換 name=\1\ncolor=\2\nstyle=2
0014デフォルトの名無しさん2011/04/03(日) 23:37:55.17
>>13
無事出来ました、どうもありがとうございます!
0015デフォルトの名無しさん2011/04/07(木) 17:46:48.45
Excelの置換で、
マッチした文字列を、マッチした文字列の最初の一文字で置換したいです。

たとえば、

りんご
ごりら
ぼーる

だと、

り
ご
ぼ

に置換したいです。
置換前の正規表現と、置換後の正規表現はどのようにすればよいのでしょうか?
0016デフォルトの名無しさん2011/04/07(木) 18:00:09.97
最近のExcelって正規表現で検索・置換ができるようになったの?
0017デフォルトの名無しさん2011/04/07(木) 18:02:48.07
>>16
アドオンみたいなのでいけるようになります。
0018デフォルトの名無しさん2011/04/07(木) 19:57:20.75
検索 (.).*
置換 \1
0019デフォルトの名無しさん2011/04/10(日) 01:24:00.50
繰り返しの処理は分かるので正規表現の書き方を教えて頂きたいです。
よろしくお願いします。

●正規表現の使用環境
VB.NET2003

●検索か置換か?
検索

●説明
果物の名前を検索したい

●対象データ
箱の色・箱A/緑、箱B/橙、箱C/黄、箱D/赤
箱の中身・箱A/メロン、箱B/みかん、箱C/バナナ、箱D/りんご
箱の大きさ・箱A/100cm、箱B/120cm、箱C/140cm、箱D/160cm

●希望する結果
メロン
みかん
バナナ
りんご

0020デフォルトの名無しさん2011/04/10(日) 01:46:27.24
メロン|みかん|バナナ|りんご
0021デフォルトの名無しさん2011/04/14(木) 23:47:33.90
.replace(/^(http:\/\/[\w-]+\.ggpht\.com\/(?:[\w-]+\/){4})s[\w-]+\/([\w-]+\.[\w-]+)$/, "$1$2")

「%20」や「%26」や2バイト文字を含むURLで動作しないので

例:http://lh5.ggpht.com/_yIvKcqI3wVA/TabN39xH8HI/AAAAAAAADbA/JAurXpYyStQ/s128/open%20mouthed%20scared%20cat.jpg

動作するように、ご教授お願います
0022 忍法帖【Lv=23,xxxPT】 【東電 80.1 %】 2011/04/15(金) 12:38:43.75
また猫かよ
http://lh5.ggpht.com/_yIvKcqI3wVA/TabN39xH8HI/AAAAAAAADbA/JAurXpYyStQ/s128/open%20mouthed%20scared%20cat.jpg
http://lh5.ggpht.com/_yIvKcqI3wVA/TabN39xH8HI/AAAAAAAADbA/JAurXpYyStQ/open%20mouthed%20scared%20cat.jpg

最初以外の[\w-]を[^/]に変える
あとは考えてくれ
0023デフォルトの名無しさん2011/04/15(金) 15:51:46.12
var url = "http://lh5.ggpht.com/.../s128/open%20mouthed%20scared%20cat.jpg";
var elems = url.split(/\//); /* このあたりがそこはかとなくスレの趣旨に合致 */
var filename = elems.pop(); elems.pop(); elems.push(filename);
var new_url = elems.join('/');
0024デフォルトの名無しさん2011/04/16(土) 16:39:05.13
●正規表現の使用環境
C#.Net


●検索か置換か?
検索


●対象データ
data
(data
data)
(data)
Xdata
dataY

●希望する結果
data


dataが()XY以外と隣接している場合は検索を一致させたくないのですが、
それが中々できません。
よろしくお願いします。
0025242011/04/16(土) 17:12:20.27
すいません、追記です。
dataの部分をグループにまとめたいです
0026デフォルトの名無しさん2011/04/16(土) 20:41:22.03
思いついたのをそのまま書いたらすげー長くなってしまった
((?<=[()XY])data|data(?=[()XY])|(?<=[()XY])data(?=[()XY]))

一番上のdataも含めるなら
((?<=[()XY])data|data(?=[()XY])|(?<=[()XY])data(?=[()XY])|^data$)

追記はよくわからん
0027デフォルトの名無しさん2011/04/16(土) 21:58:05.25
^(data)$
とは違うのか?
0028デフォルトの名無しさん2011/04/16(土) 22:12:13.20
最初はそれかと思った。でも
>()XY以外と隣接している場合は検索を一致させたくない
ということなので()XYに隣接してるdataが引っかかるようにしといた
0029デフォルトの名無しさん2011/04/16(土) 23:02:36.31
皆さんありがとうございます。
現在出先なのでまだ確認できませんが、家に帰ったらやてみようと思います。

>>28
data
(data
dataY

などは一致させたいのですが、

bigdata
などは一致させたくないのです

分かりづらくてすいません
0030デフォルトの名無しさん2011/04/17(日) 13:54:16.70
V2Cとか正規表現を使える2ch専ブラってマジ便利すぎるな。
0031 忍法帖【Lv=4,xxxP】 2011/04/17(日) 16:20:34.48
正規表現でとあるスレの、特定のURLを含まないレスをあぼーんにしたいと考えています
特定のURLは"mt=8"と"hibari"が含まれたURLです
[^(mt=8)(hibari)]
と試しましたが駄目でした。どのようにすればよいのでしょうか?
0032デフォルトの名無しさん2011/04/17(日) 18:00:16.76
mt=8とhibariを含まないURLにマッチでいいんだよね?

^((?<!mt=8).(?!mt=8))*$
^((?<!hibari).(?!hibari))*$

正規表現を複数登録できるならこの2つでいける
なんとか1つにまとめようとしたんだけど無理だったわ。

1つにまとめれる人いたらやり方教えて
0033 忍法帖【Lv=4,xxxP】 2011/04/17(日) 20:43:46.93
>>32
二つを併用しようとしたら全部のレスが消えてしまったのですが、上の
^((?<!mt=8).(?!mt=8))*$
だけでも絶大な効果だったので下のは諦めることにします

有難うございました!
0034デフォルトの名無しさん2011/04/17(日) 20:52:05.01
>>31,32
(Perl正規表現雑技を見ながら)

両方の文字列を共に含まないなら
    ^(?:(?!mt=8.*hibari)(?!hibari.*mt=8).)*$
どちらか一方でも含まないなら
    ^(?:(?!mt=8)(?!hibari).)*$
でいけるっぽい
0035322011/04/17(日) 21:28:07.66
>>34
量指定子って先後読みには使えないと思ってたけど
使えないのは後読みだけなのか。間違って覚えてた

先後読み両方使うより先読みだけのほうがスマートだな
勉強になった。ありがとう
0036 忍法帖【Lv=4,xxxP】 2011/04/17(日) 23:44:32.70
>>34
おお、下の
^(?:(?!mt=8)(?!hibari).)*$
で望み通りになりました

>>34-35
本当に有難うございます!
0037242011/04/18(月) 21:16:19.92
>>26
ようやく自宅のPCを付けて確認することができました。
ありがとうございます。
私が望んでいた動きができました!
0038デフォルトの名無しさん2011/04/19(火) 02:20:36.99
>>22-23
[^/]でいけました
ありがとうございましたm(_ _)m
0039デフォルトの名無しさん2011/04/21(木) 21:50:15.99
Windowsなんですが、
C:\work\20110410dsk30.jpg
C:\work\2011419100002.jpg
D:\My Pictures\保存画像\カレイドスター\e2498f54.jpg
D:\My Pictures\保存画像\プリキュア\03cde8e1.jpg
D:\My Pictures\保存画像\プリキュア\10mai458354.jpg
こう言うフルパスからファイル名だけ抜き出したいのですが、「.*\\」とすると最後の10mai458354.jpgだけしか残りません。
どうすれば、1行毎に、行頭からその行の最後の\記号までを指定できるのですか?
0040デフォルトの名無しさん2011/04/21(木) 22:11:05.31
ロゼッタの画像うpしてくれたらがんばって答える

それはともかく使ってる処理系かエディタの名前書いたほうがいいよ
バックスラッシュがややこしい
0041デフォルトの名無しさん2011/04/21(木) 22:15:07.07
ロゼッタって誰?
バックスラッシュがややこしいとは?
0042デフォルトの名無しさん2011/04/21(木) 22:16:47.46
^[^\n]*\\

>>40
どうぞ
http://www.egyptian.jp/goods/rosetta-l.JPG
0043デフォルトの名無しさん2011/04/21(木) 22:17:03.21
円記号
0044デフォルトの名無しさん2011/04/21(木) 22:17:49.21
>>43
どう考えてもURLからしてロゼッタストーンです
本当にありがとうございました
0045デフォルトの名無しさん2011/04/21(木) 23:07:35.97
>>42
うーん…
ピリオドが一文字を表してて、その繰り返しだからアスタリスクを使ったんだけど。
[^\n]は、[]の中は先頭が改行じゃ無いって事だとは解るんだけど。
[]で囲むのと、どれかに一致で、先頭が改行の時は除外するって事になるのかな。
最初、ピリオド・アスタリスクとしていたけど、アスタリスクの意味を理解して無かったって事かな?
0046デフォルトの名無しさん2011/04/21(木) 23:29:26.29
アスタリスクの意味はあってるよ
文字クラスの理解が怪しい感じかな
http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE#.E6.96.87.E6.B3.95

ところで>>42で希望通りの動作になった?
0047デフォルトの名無しさん2011/04/21(木) 23:30:45.33
[]で囲っている文字クラス内の^は先頭じゃなくて否定
.は任意の文字で通常は改行は含まれないがオプションなどで動作が変わる
.*は欲張りなマッチとか言われてて、とりあえず取れるとこまで進めてから
バックトラックしながらその後の条件があれば取捨選択していく
0048デフォルトの名無しさん2011/04/21(木) 23:50:00.45
>>46
あ、スミマセン。
実験したのですが、何もヒットしないでした。

使ってる状況なんですが、TeraPadと言うテキストエディタの外部ツールのTpRegExpなんです。

なんか、正規表現が、こんなに方言化してると思わず、状況後出しに成ってるのが、申し訳ないです。
0049デフォルトの名無しさん2011/04/22(金) 00:16:11.73
^が行頭じゃない環境なのか、じゃあこっちで
\f[^\n]*\\

一応リファレンスは調べてみたけど試してはいない。
これでだめだったら、いっそのこと別のエディタにしてしまったほうが楽な気がする

こっちの環境(Mery)だと
.*\\
でも希望通りの動作になるよ
0050デフォルトの名無しさん2011/04/23(土) 05:36:55.82
どうもです。
望んだ動作に成りました。
この外部ツールが曲者なのかな。sakuraエディターだと、.*\\で望みの動作しました。
どうもでした。

毎回呪文を打ち込むのも面倒だなと、VBスクリプトでやろうとしたんだけど、挫折しました。
0051デフォルトの名無しさん2011/04/25(月) 08:30:22.42
///
0052デフォルトの名無しさん2011/05/06(金) 19:40:46.16
PHP の preg に関して質問です。http://www1.axfc.net/uploader/File/so/62486.txt
php 4.4.9 だとマッチしますが、php 5.3.5 だとマッチしません。
何か原因がわかればご教示ください。よろしくお願いします。
0053デフォルトの名無しさん2011/05/06(金) 20:58:11.44
Linux (CentOS) 上の PHP 5.1.6 だとマッチしました。
memory_limit は php5は 128M に、php4 は 32M にしています。
>>52 の OS は WindowsXP Home SP3 です。
0054デフォルトの名無しさん2011/05/06(金) 22:05:22.99
mb入ってんの?
0055デフォルトの名無しさん2011/05/08(日) 11:41:05.08
mbは有効になっています。
一応 php.ini です。 http://www1.axfc.net/uploader/File/so/62697
>>52 の aaaaaaaaa の部分を短くするとマッチします。
なんでかな…
0056デフォルトの名無しさん2011/05/09(月) 17:22:10.19
なんだろうねぇ。
対象の文字列を減らすとマッチするのはこちらでも再現した。
なんだろうねぇ。。。。
0057デフォルトの名無しさん2011/05/09(月) 17:41:43.51
適当だけどこれじゃまいか
http://jp.php.net/manual/ja/pcre.configuration.php#ini.pcre.backtrack-limit
0058デフォルトの名無しさん2011/05/09(月) 17:51:47.67
ありがとうございます。それでした。
pcre.backtrack_limit=200000 で動くようになりました。
0059デフォルトの名無しさん2011/05/09(月) 19:02:42.70
勉強になった。
なるべくその設定を変更せずにすむように心がけよう。
0060デフォルトの名無しさん2011/05/11(水) 09:47:04.06
よろしくお願いします。

●正規表現の使用環境
PHP 5.2.9 (XAMPP 1.7.1)

●検索か置換か?
検索

●説明
入力文字が+、-、数字以外ならエラーを返す

●コード
preg_match("/^[+|-]*\d+$/g", $string)
(1行ごとに処理するので、/mは不要です)

●希望する結果
+100→○
-488→○
1024→○
*300→×
/200→×
Aaaa→×
ああ→×
0061デフォルトの名無しさん2011/05/11(水) 10:06:04.62
[0-9\+\-]

(\+|\-)[0-9]
0062デフォルトの名無しさん2011/05/11(水) 11:11:25.84
>>61
> (\+|\-)[0-9]
こちらを使用しました。意図した通りになりました。
正規表現に関係なく、素直に書いてみることが大事なんだと認識しました。

ありがとうございます。
0063デフォルトの名無しさん2011/05/11(水) 11:13:41.25
A+10 ○
でもいいの?
0064デフォルトの名無しさん2011/05/11(水) 12:38:21.59
突っ込みどころ満載だが
とりあえず (\+|\-) なんて書くくらいなら [\+\-] でいいだろ……

* 小数点や指数表記を考えない
* 最上位の桁が 0 の場合ははじく
* 符号のみの場合もはじく
って感じなら ^[\+\-][1-9]\d*$
0065デフォルトの名無しさん2011/05/11(水) 13:17:27.58
>>62
>> (\+|\-)[0-9]
>こちらを使用しました。意図した通りになりました。
1024 → × になりませんか?
0066デフォルトの名無しさん2011/05/11(水) 13:21:49.74
(\+|\-)?[0-9]+

0067デフォルトの名無しさん2011/05/11(水) 14:11:09.38
回答により実装し、問題が分かってきましたので、本来欲しかった結果と合わせて再度質問します。

●正規表現の使用環境
PHP 5.2.9 (XAMPP 1.7.1)
●検索か置換か?
検索
●説明
入力された文字列のエラーチェックで使用します。
入力文字が+、-、数字以外ならエラーを返します。
●正規表現を確認したサイト
HiFi Regex Tester
http://www.gethifi.com/tools/regex
●コード
if( !preg_match("/^(\+|\-)?[0-9]+$/", $string) ) {
  エラー文生成
}
(1行ごとに処理するので、/mは不要です)
●希望する結果
○:エラーではない、×:エラーとなる

0→○
+0→○
-0→○
+100→○
-488→○
1024→○
/200→×
Aaaa→×
ああ→×
12+1→×
5-10→×
0068デフォルトの名無しさん2011/05/11(水) 14:17:50.19
>67
^[-+]?\d+$
0069デフォルトの名無しさん2011/05/11(水) 15:34:39.84
>>67
希望する結果にならなかった例を挙げない人だよね。
0070デフォルトの名無しさん2011/05/11(水) 15:59:24.60
>>69
情報の小出しになっていることは認めます。
0071デフォルトの名無しさん2011/05/11(水) 23:07:49.36
1→○
01→?
0072デフォルトの名無しさん2011/05/22(日) 14:18:14.06
長い文字列から文字列を抽出したいんだけど、どうすれば簡単ですか?
122ch345673ch89
この文字列から2chと3chの間の文字だけを取得したいです
0073デフォルトの名無しさん2011/05/22(日) 14:25:18.65
正規表現自体は2ch(.+?)3chとかだけど
実際にどう抜き出すかは使ってる言語やツール次第
0074デフォルトの名無しさん2011/05/22(日) 14:32:36.53
>>72
(?<=2ch).*?(?=3ch)
0075デフォルトの名無しさん2011/05/22(日) 14:32:52.41
>>73
VB.NETです
0076デフォルトの名無しさん2011/05/22(日) 14:54:38.68
じゃあC#でも大丈夫だよね
正規表現は>>74のを使わせてもらった

using System;
using System.Text.RegularExpressions;

...
Match m = Regex.Match("122ch345673ch89", @"(?<=2ch).*?(?=3ch)");
Console.WriteLine(m);

34567
0077デフォルトの名無しさん2011/05/22(日) 15:05:07.94
VBじゃないと読めないかもしれない

Imports System.Text.RegularExpressions

Module Module1

 Sub Main()

  Dim m As Match = Regex.Match("122ch345673ch89", "(?<=2ch).*?(?=3ch)")

  If m.Success Then
   '隊長!発見しましたぞ!
   Console.WriteLine(m.Value)
  End If

 End Sub

End Module
0078デフォルトの名無しさん2011/05/22(日) 15:50:24.68
隊長なごんだ。
0079デフォルトの名無しさん2011/05/23(月) 10:39:22.11
aaa=bbb;ccc=ddd;eee=fff

という感じの文字列からcccの値dddを取得したいです。
dddは可変でその部分にはセミコロンとカンマは入ることはありません。
(セミコロンは区切りとしては使いますが値としては使いません。)
cccは最後に書かれてる場合もあり、その場合は、
上記のeee=fffのように最後にセミコロンがつきません。

そこで正規表現なんですが、
ccc=(.*?;|[^;\,]+$)
という感じにしました。
後方参照で()内の部分を取り出したとき、
ccc=ddd;のときは、「ddd;」といった感じにセミコロンつきで取得され、
ccc=dddのときは、「ddd」といった感じにセミコロンなしで取得されます。
ccc=ddd;のときでもセミコロンなしで取得したいのですが、
正規表現のみで可能でしょうか?
0080デフォルトの名無しさん2011/05/23(月) 11:16:21.88
ccc=([^;,]*)
だけじゃだめなのかな?

先読み使えばこう書けるけど
ccc=(.*?(?=;)|[^;,]+$)
0081デフォルトの名無しさん2011/05/23(月) 11:31:28.50
>>80
ありがとうございます!
>ccc=([^;,]*)
これでとることができました。
正規表現難しいです><
0082デフォルトの名無しさん2011/05/23(月) 13:48:15.55
C#で以下のように書いた場合、これってASCIIコードをさすんだよね?
「\x○○」のところ。 

str=@"[^\x00-\x22\x27-\x2D\x3A\-\x3B\x3F\x5B\x5D\x5E\x60\x7B-\x7D\x7F]+" ;
0083デフォルトの名無しさん2011/05/23(月) 13:55:18.15
asciiなら、"[#$%&./0-9<=>@A-Z\\_a-z~]"と同等だね。
0084デフォルトの名無しさん2011/05/24(火) 08:08:29.88
Perl互換表現の\wからアンダースコアをとったものの連続を表現
ようするに[0-9a-zA-Z]+と同等なことをしたいのですが
[\w^_]+とかでは動きませんでした
どう書くのが正しいのでしょうか?
[0-9a-zA-Z]+でもいいのですが後学のために教えてください
0085デフォルトの名無しさん2011/05/24(火) 08:13:54.23
[0-9a-zA-Z]+
0086842011/05/24(火) 08:17:33.28
すみません自己解決しました
[\w][^_]+でたぶんいけました
スレ汚しすみません
0087デフォルトの名無しさん2011/05/24(火) 08:22:48.26
それ間違ってるよ
場合によっては正しく判定してるように見えることもあるけど
本質的には正しくない
0088842011/05/24(火) 08:25:36.61
>>87
そうですね
色々値かえて@とか想定外のもの入れたらマッチしてしまいましたorz
0089デフォルトの名無しさん2011/05/24(火) 08:58:22.69
つーかさ、[0-9a-zA-Z]+で完璧に条件満たしてるんだから
それ以外の書き方をしようとするのがそもそもの間違いだ

初心者の頃って、短く書くことが良いことで正しいとか勘違いしてる奴も多いけど
短く書くより分かりやすく書いた方が絶対いいから
まあ[0-9a-zA-Z]+を[a-zA-Z\d]+とするくらいなら、分かりやすさを損なってないからいいけどね

先読み、後読み使えば、\wから_除外したものの連続って表現も出来るけど
この程度のことに先読み、後読み使うなんて余りにも無駄すぎるので、
本当に分かってる奴は[0-9a-zA-Z]+か[a-zA-Z\d]+を使う

とりあえず、メタ文字として用意されているもの以外の文字集合はベタ書き、これ基本な
「5以外の数字」とかも\dから5を除外するのではなく[0-46-9]が一番良い
0090デフォルトの名無しさん2011/05/24(火) 09:43:43.83
>>84
文字クラスのintersection(&&)が使える処理系なら [\w&&[^_]]+
0091デフォルトの名無しさん2011/05/24(火) 10:28:01.22
後学のためっていってるのに説教垂れる奴はなんなんだ
0092デフォルトの名無しさん2011/05/24(火) 11:15:05.61
後学のために、短くまとめることにこだわるより
分かりやすく書いた方が良いというアドバイスをしているのでは?
0093デフォルトの名無しさん2011/05/24(火) 11:25:02.36
ところでa-zA-Z0-9の順番が一般的だけど、
なんで0-9が先にこないのか不思議。
n進数表記でも0からだし、ASCII char codesは0-9A-Za-zの順番だし、
なんか理由とかあるのかな?
0094デフォルトの名無しさん2011/05/24(火) 12:21:01.67
alphanumeric
英数字
0095デフォルトの名無しさん2011/05/24(火) 12:57:46.19
[^\W_]
\Wがあるならこんなふうに書けるけどちょっと分かりづらいよね
0096デフォルトの名無しさん2011/05/24(火) 15:22:48.24
>>95
まさに逆の発想
0097デフォルトの名無しさん2011/05/24(火) 16:51:40.00
読解性って大事だよね。
読解性犠牲にして短くしてもしょーがない。
誰が見ても、人目で何を意味してるか解る、それが一番大事。
0098デフォルトの名無しさん2011/05/24(火) 17:21:52.95
その意見には同意だけど正規表現に限っては難読でもいいわ
そういうもんだし
そもそも読みやすさを求めるなら規約で正規表現禁止にするわ
0099デフォルトの名無しさん2011/05/24(火) 17:51:31.12
> そういうもんだし
君にとってはそうなのかもしれないし、個人的にどう思ってようと勝手だけど
世間的にはそういう認識ばかりじゃないので、主観で断定するのは良くない
0100デフォルトの名無しさん2011/05/24(火) 17:56:10.91
世間的にはそういう認識ばかりだと思いますよ
実際コーディング規約で禁止にしてるところは多い
理由は複雑だから
0101デフォルトの名無しさん2011/05/24(火) 17:58:40.47
そういう奴等は、コンピュータなんて複雑なものには一切かかわらないようにしたほうがいいね。

やめちまえ。
■ このスレッドは過去ログ倉庫に格納されています