[過去ログ] 正規表現道場@2ch Part2 (981レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(6): 02/11/24 22:57 ID:LrbVcl3Y(1) AAS
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

リンクなどは>>2-5のあたりに。
882
(1): 03/09/30 04:40 ID:??? AAS
>>879
^(?=.*HOGE)(?=.*FOO)(?=.*BAR)
ただJRE32.DLLで動くかは分からない。
883: 03/09/30 14:33 ID:??? AAS
>>882
外部リンク[html]:www4.ocn.ne.jp

>>879
JRE32 だと
HOGE.*(FOO.*BAR|BAR.*FOO)|FOO.*(HOGE.*BAR|BAR.*HOGE)|BAR.*(FOO.*HOGE|HOGE.*FOO)
…が精々だと思う。
884: 03/10/03 17:48 ID:iDWA2Ri2(1) AAS
始まりと終わりがAで、間が0-9にマッチさせたいのですが、どうしても分かりません。
マッチさせたいパターン → A123A AA A
/^A[0-9]*A$/だと Aにマッチさせられませんでした。
どうぞ、お知恵をお菓子下さい・・
885: 03/10/03 17:59 ID:??? AAS
"A123A AA A" は「始まりと終わりがAで、間が0-9」に見えないのだが?
もうちょっとマッチさせたい条件をはっきりしる。
886
(1): 03/10/03 18:07 ID:??? AAS
こういうことかな?

/^A([0-9]*A$|$)/
887
(1): 03/10/03 18:11 ID:??? AAS
えとですね、始まりと終わりがAであれば
間には数字があっても無くても良いわけです。
Aも一応始まりと終わりがAなので、マッチさせたいのです。 
888: 03/10/03 18:13 ID:??? AAS
グホッ
書き込んでいる間に、すみません。
>>886
そうです(TдT)/ 解決しました、本当に有難うございます。
889
(1): 03/10/03 18:17 ID:??? AAS
>>887
だから
>マッチさせたいパターン → A123A AA A
数字以外に空白とAがあるだろ?って。
890: 03/10/03 18:24 ID:??? AAS
>>889
A123A or AA or A
と表したかったのです。紛らわしくてすみません(^^;
891: 879 03/10/03 21:33 ID:??? AAS
みなさん、色々ありがとうございました。
また奮闘してみます。
892
(1): 03/10/05 20:25 ID:N/gpdKcx(1) AAS
AA省
893
(1): 03/10/05 21:48 ID:??? AAS
>>892
最後についてる変数は何なの?
894: 03/10/05 22:09 ID:??? AAS
>>893
おいおい。末尾だろ
895
(2): 03/10/06 14:33 ID:??? AAS
PHPのereg_replaceつかってこんなことできますか?

$s='<HTML>省略省略<A HREF='http://なんちゃら'>あれ これ それ </A>'

$s='<HTML>省略省略<A HREF='http://なんちゃら'>あれ これ  それ </A>'

< > で囲まれていない部分のスペースを でおきかえたいんです
896
(1): 03/10/06 16:35 ID:??? AAS
>>895
もしかして、&nbsp;と言いたい?
897
(1): 895 03/10/06 19:35 ID:??? AAS
>>896

そういいたかったんだけど、そう表示されていませんね。失敗しました。
リベンヂ。

$s='<HTML>省略省略<A HREF='http://なんちゃら'>あれ これ それ </A>'

$s='<HTML>省略省略<A HREF='http://なんちゃら'>あれ&nbsp;これ&nbsp;&nbsp;それ&nbsp;</A>'

< > で囲まれていない部分のスペースを &nbsp;でおきかえたいんです

どうでしょうか大丈夫かな。
898: 03/10/06 19:47 ID:??? AAS
>>897
&nbsp;と表示させたいときには、
&amp;nbsp;と書けばいいよ。
899: 03/10/06 20:23 ID:??? AAS
PHP 使った事ないから動くか分からんけど。

$s = ereg_replace ( "((?:\G|>)[^<]*?)\x20", "\\1 ", $s);

SEE ALSO: 外部リンク[htm]:www.din.or.jp
900: 03/10/06 20:23 ID:??? AAS
阿呆だ俺…。
s/\\1 /&nbsp;/
901: 03/10/06 21:54 ID:??? AAS
ん? s/\\1 /\\1&nbsp;/ でなくて?

ここで一句
正規スレ、みんなでハマるnbsp.(字あまり)
902: 03/10/07 17:59 ID:??? AAS
つーか単純に

半角スペース" "は"&nbsp;"とかく。
"&"は"&amp;"とかく。

これを覚えておけば、
sub &hogehoge() とかを貼り付けた時にハマることもなくなるよ
903: 03/10/07 18:33 ID:??? AAS
そういうの置換してくれる2chブラウザってないのかな。
904: 03/10/15 01:16 ID:??? AAS

905: 03/10/15 01:17 ID:??? AAS

906: 03/10/15 01:18 ID:??? AAS


907
(2): 03/10/15 20:56 ID:??? AAS
Perlでの正規表現なんですが

 $pattern =~ s/(\w)(\d)/\1-\2/;

という置換の右の式を変数にしたいんです。

 $pattern =~ s/(\w)(\d)/$exchange/;

ところが
省4
908
(2): 03/10/15 21:17 ID:??? AAS
>>907
\1 better written as $1
\2 better written as $2
909: 907 03/10/15 22:04 ID:??? AAS
>908さんの言わんとする事が理解できてませんが、
なんか全然違う手段(修飾子e)で解決しました。
ありがとうございました。
910: 03/10/18 01:54 ID:??? AAS
>>908 はPerlでは後方参照に \1 を使うより $1 を使ってくれ。といいたいらしい
911
(2): 03/10/18 12:58 ID:??? AAS
sjis文字,euc文字,jis文字を(文字クラス等で)表現できますか?
912
(1): 03/10/18 14:11 ID:??? AAS
>>911
EUC-JP と Shift_JIS は 外部リンク[htm]:www.din.or.jp
JIS はこの辺で調べて 外部リンク[htm]:www.din.or.jp
913
(1): 911 03/10/18 18:49 ID:??? AAS
>>912
d!
914
(1): 03/10/19 00:32 ID:??? AAS
>>913
どんだけ目を凝らして見ても>>2にリンク貼ってあるように見えるんだけど。
915: 03/10/19 02:13 ID:??? AAS
>>914
>>2 を見てから質問する奴なんてほとんどいない罠。
916
(1): 現調中 03/10/27 17:50 ID:??? AAS
質問です。何度やっても色々な所を調べても分かりませんでした。

Perlでの置き換えなのですが、
$test = '[tmp="外部リンク:www.yahoo.co.jp"] - [tmp="./test.gif"]';
を置き換えで・・
$test = '外部リンク:www.yahoo.co.jp-.という風にしたいのです。

$test =~ s/\[tmp="(.*)"\]/$1/g; だと、うまく動いてくれません。
[tmp=""]ダブルクォート内の文字は固定されておらず自由に変わります。
宜しかったら教えて頂けないでしょうか?(;_;)
917: 03/10/27 18:26 ID:??? AAS
>>916
.* の箇所が問題だね。「最長マッチ」「最短マッチ」で調べましょう。
918
(1): 03/10/27 18:33 ID:??? AAS
$test =~ s/\[tmp="([^"\]]*)"\]/$1/g;
919: 現調中 03/10/27 19:22 ID:??? AAS
>>918
うう(TT)本当に助かりました!
うまく動作しました。
現調が終わったらこれを元に自己学習に励んでみます。
感謝!
920
(1): 03/11/02 20:54 ID:??? AAS
正規表現覚えると、簡単な文字列比較にも使ってしまう。
負荷結構かかるんかな
921: 03/11/02 21:45 ID:??? AAS
>>920
ケースバイケース。
922
(2): 03/11/06 21:51 ID:QQMTRNI6(1) AAS
perlで右辺から左辺へマッチするようにはできないの?
923
(1): 03/11/06 22:19 ID:??? AAS
いったい何を言ってんでしょ。。。
924
(1): 03/11/06 22:28 ID:??? AAS
Ruby みたいにできないか?ってこと?

foo =~ /bar/
/bar/ =~ foo
925
(1): 922 03/11/06 23:32 ID:??? AAS
>>923
ごめんなし日本語うまくないんです。

>>924
Rubyは使ったことないのでよく分からないんですが
例えが
$name="abc";
$name=~ /\w/
だとa→b→cってマッチしちきますよね。それを逆に
c→b→aというふうにできないのでしょうか?
926
(1): 03/11/07 00:08 ID:??? AAS
>>925
$_ = 'abcdef';

print /^(\w{3})/; # abc
print /(\w{3})$/; # def

print join '/', /(\w)/g; # a/b/c/d/e/f
$_ = reverse $_;
print join '/', /(\w)/g; # f/e/d/c/b/a
927: 922 03/11/07 00:29 ID:??? AAS
>>926
ありがとうございます。
やつぱり、文字反転させないとだめなようですね。

ほんとううにありがとう、ございますだ。
928: 03/11/07 03:01 ID:??? AAS
アラビア語の正規表現だと右からマッチする・・・わけないか?
929: 03/11/07 05:16 ID:??? AAS
そういう意味だったのか。右辺左辺とは違うだろうが。
930
(2): 03/11/07 13:53 ID:??? AAS
質問です。

<table>...</table>

<table>...</table>

<table>...</table>

<table>...</table>
省2
931
(1): 03/11/07 14:16 ID:??? AAS
</table>の後ろでENTERキーを4回押すよう努める。
932
(1): 03/11/07 14:22 ID:??? AAS
>>930
実装言語は Perl ? $html に HTML 全体が入ってるとして、
$html =~ s/(<\/table>)\s*(<table)/\1\n\n\n\2/ig;
933
(1): 930 03/11/07 14:28 ID:??? AAS
>>931
解決しました。ありがとうございました。
934: 03/11/10 16:07 ID:??? AAS
>>933
931で解決なのかよ!
935: 932 03/11/10 17:40 ID:??? AAS
(⊃д`)
936: 03/11/11 10:46 ID:??? AAS
(⊃д`)ヽ(゚Д゚ )ヨシヨシ
937: 03/11/11 11:28 ID:??? AAS
ネタで解決ってのも珍しいな
938
(1): 03/11/12 06:23 ID:VJcp1gvZ(1/6) AAS
質問です。

例えば、以下のようなデーターが別ファイルになっていた時、

$ab_cd = '12ab' ; # aaaaaa
$efg_h = 'あいう'; # ccccc

これを、
$in[0] = abc_cd
$in[1] = efg_h
$aa[0] = 12ab
$aa[1] = あいう
のように取り出す方法と、値を変えてもとの位置に置き換える方法の二つをお願いします。
939: 03/11/12 10:26 ID:??? AAS
>>938
それは正規表現で解決できる問題じゃないと思う。
940
(2): 03/11/12 14:39 ID:VJcp1gvZ(2/6) AAS
いや、だから、正規表現の部分で教えてほしい事柄とは検索と置換なんです
前にですね、
@buffer = <IN>;
foreach $line (@buffer) {
if( $line =~ /(この部分が不明)/)[
$in[0] = $1; $aa[0] = $2;
}
}
といったようなものを見かけましたので、「(この部分が不明)}として示した部分を教えてもらえば何とかなると思ったのです。
941: 03/11/12 14:41 ID:??? AAS
いや、だから、
いや、だから、
いや、だから、
いや、だから、
942
(1): 03/11/12 14:45 ID:??? AAS
>>940
かなり適当。
/^\$(\w+)\s*=\s*([\'\"])([^\'\"]+)\2/
943: 03/11/12 19:02 ID:??? AAS
>>940
じゃあ最初からそれを書(ry
情報の小出しはよくない。
944: 03/11/12 20:13 ID:VJcp1gvZ(3/6) AAS
>>942
うまくできました。ありがとうございました。
945
(1): 03/11/12 21:54 ID:VJcp1gvZ(4/6) AAS
忘れていましたので、再び質問です。

@wday = ('日','月','火','水','木','金','土') ;

といった感じのものを、「wday」と「'日','月','火','水','木','金','土'」として取り出す正規表現を教えてください。
946: 03/11/12 21:58 ID:??? AAS
>>945
まずは自分でどこまで考えたか示せよ。
947
(1): 03/11/12 22:06 ID:??? AAS
前のもそうだけど「wday」を得たいとか言うのからしておかしいよな
根本的なコードの書き方に疑問が
948
(1): 03/11/12 22:30 ID:VJcp1gvZ(5/6) AAS
>>947
「wday」は例で、
@abc = ('aa','bb','cc'); #aaaaaa
の場合の、「abc」と「'aa','bb','cc'」でも良いのです。
$in = $1; $dd{$in} = $2; として取り出したいだけなので。
949
(1): 03/11/12 22:46 ID:??? AAS
いや、だから、それがおかしいと言ってるのだが
ま、好きにすればいいや
950
(2): 03/11/12 23:07 ID:??? AAS
>>949
漏れはその気持ちはわからないでもないよ。
たとえば、そういう糞コード書き散らした香具師がいて、
ハードコードしてたデータをハッシュテーブルに直す修正を一括して行いたい、とか。

>>948
例によってかなり適当。
/^\@(\w+)\s*\=\s*\(([^\)]*)\)/
951: 03/11/12 23:54 ID:VJcp1gvZ(6/6) AAS
>>950
ありがとうございました。うまくいきました。
952: 03/11/13 09:30 ID:??? AAS
>>950 この程度のことを自力で解決できない香具師はまた糞コードを書き散らすと思われ
953: 03/11/13 09:40 ID:??? AAS
俺は、糞コードを撒き散らしながら今日まで成長してきた。
954: 03/11/13 09:57 ID:??? AAS
俺は、糞を撒き散らしながら(ry
955: 03/11/13 10:29 ID:??? AAS
俺は、糞を巻きなが(ry
956: 03/11/13 11:33 ID:??? AAS
俺は、糞
957: 03/11/13 23:30 ID:??? AAS
bokuso
958: 03/11/13 23:37 ID:??? AAS
僕掃除当番
959: 03/11/14 22:03 ID:??? AAS
姉妹スレ
最近うんこ喰ってる?
2chスレ:ascii
960
(2): 03/11/15 02:12 ID:??? AAS
PHPでの正規表現について質問です。

if (ereg("<(.*@docomo\.ne\.jp)>",$str,$match)) { // i
}elseif (ereg("<(.*@ezweb\.ne\.jp)>" ,$str,$match)) { // ez
}elseif (ereg("<(.*@[dhtckrnsq]\.vodafone\.ne\.jp)>", $str ,$match)){ // v
}elseif (ereg("<(.*@jp-[dhtckrnsq]\.ne\.jp)>" , $str ,$match)){ // j
}else{
}
return $match[1];

というような動きの関数を作りました。
$strには複数の< > 付きメールアドレスがあります。
省4
961
(1): 03/11/15 12:09 ID:??? AAS
PHPのことは全くもって知らないんだけど
(.*@docomo\.ne\.jp)

([^>]+?@docomo\.ne\.jp)

こういうのってPHPじゃ使えないの?
962: 03/11/15 12:34 ID:??? AAS
>>961
[^>]+なら最短マッチにしなくても最初の>で止まるし。
つかRFC2822的には@の前に>来てもOKだし。
0文字のユーザ名を許可しないなら.+?でいいのでは。

>>960
私もPHP知らんけどeregでは最短マッチ使えなくて
preg_matchを使えって事らしい。ググって。
963
(2): 03/11/15 14:09 ID:??? AAS
RFC的な話は別にして、メールアカウントとして普通に認められる文字って
英数と - _ ぐらいだと思う(Yahoo mailでは - も使えなかった)ので
[-\w]+?@docomo\.ne\.jp で充分なんじゃない?
後ろに @ があるので最短マッチにせず
[-\w]+@docomo\.ne\.jp でも同じだと思うけど。
余計なものはなるべく認めないという方向で。
964: 03/11/15 15:16 ID:??? AAS
>>963
せめて先頭はアルファベットくらいは判別した方が。
965: 03/11/15 15:33 ID:??? AAS
docomoのメルアドって今でも電番だけのやつって通用するのかな?
だとすると先頭をアルファベットに限定するのはマズイかも
0で始まるのだけ含むってのはアリかもしれないけど
966: 03/11/15 17:19 ID:??? AAS
(´-`).。oO(なんで RFC を無視しちゃうんだろうねぇ。。。)
967: 03/11/15 17:23 ID:??? AAS
>>963
スレ違いな話になるけど、DoCoMo は . も使える事が名言されている。
外部リンク[html]:www.docomo-kansai.co.jp
そして RFC 的には不正な、@ 直前に . が来るメールアドレスも実際に
使われている。旧 J-Phone は更に / ? + が使えるらしい。

こういったケースにぶつかる度に変更を加えていくのは泥沼なので、
最初から「\w と - のみ」のようにキツめのハウスルールを課すよりは
寛容なルールを採った方が、運用時に問題が出にくい。
968
(1): 03/11/15 17:26 ID:??? AAS
>RFC 的には不正な、@ 直前に . が来るメールアドレス
いったいどのRFCに使えないなんていう記述が?
969
(2): 03/11/15 17:36 ID:??? AAS
PerlメモのURL文字列を判別するやつのように
RFC完全準拠となると実用に耐えない正規表現になることもあるので
ほどほどにってことで。特にRFC崇拝者は。
970: 03/11/15 18:05 ID:??? AAS
AA省
971: 03/11/15 22:08 ID:??? AAS
>>969
お前が RFC を読めないからって滅茶苦茶言うなよ。
972
(1): 03/11/16 11:50 ID:??? AAS
>>969は、保守性と処理速度を鑑みて「実用に耐えない」だと思う。
973
(1): 03/11/16 12:34 ID:??? AAS
>>972
ということにしたいのですね? :-)
974
(1): 03/11/16 14:15 ID:??? AAS
速度も保守性もそれほど違わんと思うが...。
単に分かったとこだけで済ましとこうというのが
本音のような気もする。
975: これが保守性に富んだ正規表現か?(w 03/11/16 18:45 ID:??? AAS
(?:(?:[a-z]|[A-Z])(?:(?:[a-z]|[A-Z])|[0-9]|[-+.])*:(?:(?://(?:(?:(
?:(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[-_.!~*'()])|%(?:[0-9]|[A-Fa-f])
(?:[0-9]|[A-Fa-f])|[;:&=+$,])*@)?(?:(?:(?:(?:(?:[a-z]|[A-Z])|[0-9]
)|(?:(?:[a-z]|[A-Z])|[0-9])(?:(?:(?:[a-z]|[A-Z])|[0-9])|-)*(?:(?:[
a-z]|[A-Z])|[0-9]))\.)*(?:(?:[a-z]|[A-Z])|(?:[a-z]|[A-Z])(?:(?:(?:
[a-z]|[A-Z])|[0-9])|-)*(?:(?:[a-z]|[A-Z])|[0-9]))\.?|[0-9]+\.[0-9]
+\.[0-9]+\.[0-9]+)(?::[0-9]*)?)?|(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[
-_.!~*'()])|%(?:[0-9]|[A-Fa-f])(?:[0-9]|[A-Fa-f])|[$,;:@&=+])+)(?:
/(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[-_.!~*'()])|%(?:[0-9]|[A-Fa-f])(
?:[0-9]|[A-Fa-f])|[:@&=+$,])*(?:;(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[
省19
976: 03/11/16 19:12 ID:??? AAS
おしい。
ちょい工夫するともっと分かりやすく正確な表現になる。

って大昔からくりかえし話題になるネタだけど。
実際上はそこまでしないで逃げる罠。
977: 03/11/16 21:24 ID:??? AAS
>>960 の目的はメールアドレスが RFC 的に valid かを調べる事じゃ
ないし、domain は固定なので、厳密に調べるにしても必要なのは
local-part の正規表現だけだ。

my $atext = qr"[!#\$%&'*+\-/0-9=?A-Z^_`a-z{|}~]";
my $qtext = qr/[^\x0A\x0D"\\\x80-\xFF]*/;
my $valid_local_part = qr/
  (?:$atext+(?!$atext)|"$qtext(?:\\[^\x80-\xFF]$qtext)*")
  (?:\.$atext+(?!$atext)|"$qtext(?:\\[^\x80-\xFF]$qtext)*")*
/x;

. の使い方に目くじらを立てなければこうできる。
省7
978
(1): 03/11/18 02:53 ID:??? AAS
クエリのチェックをしようとしているのですが、どうすれば良いのでしょうか。
形式は「一つの組は英数字=英数字、複数ある場合は&区切り」という一般的なもので、
ここでのチェックは単にその形式に沿っているかどうかを判断するだけとしたいと思い

m/^(((\w*?)?=?(\w*?)?)?(\&?))+$/

とやってみたのですが、「=」が二つ続いていたら通ってしまうなど駄目なようで、
この辺りで詰まって解らなくなり質問に来た次第です。
979: 03/11/18 04:02 ID:??? AAS
>>978
英数字は空文字を許さない、とかなら、こんなんでいいのでは?
「英数字=英数字」、複数ある場合はこの後にさらに「&英数字=英数字」を繰り返し。
m/^\w+\=\w+(?:\&\w+\=\w+)*$/
980: 03/11/18 04:14 ID:??? AAS
「英数字=なし」もあるよね
これでうまくできた気がするけど

\w+?=\w*?(&\w+?=\w*?)*
981: 03/11/18 13:23 ID:??? AAS
>>973-974
じっくり読んでみてやっと理解できました…どうもです。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.289s*