正規表現道場 Part2 (393レス)
上下前次1-新
78: 2014/01/13(月)23:30 ID:??? AAS
IT PRO - 形式言語とオートマトンを学ぶ (3/4)
外部リンク:itpro.nikkeibp.co.jp
79: 2014/01/15(水)23:08 ID:??? AAS
質問は>>74のスレにどうぞ。
外部リンク[html]:www1.adachi.ne.jp
会社の新人研修でオートマトンの講義を担当した。
80: 2014/01/16(木)03:06 ID:??? AAS
計算機数学 町田 元
外部リンク:www.amazon.co.jp
大阪大学 - コンピュータ数学
外部リンク:koan.osaka-u.ac.jp
&func=function.syllabus.ex.refer&nendo=2009&j_s_cd=09&j_cd=090508&langkbn=j
※ 全部正規表現に関係するリンクなんで荒らしではないです。
正規表現に関わるオートマトンの知識を付けたい方には参考になると思います。
81: 2014/01/18(土)22:50 ID:??? AAS
有限オートマトンと正規表現 (ヤギ 野菜 狼)
外部リンク[pdf]:www.i.kyushu-u.ac.jp
82(1): 2014/01/19(日)07:18 ID:??? AAS
ある文字列を含まないものにマッチする正規表現
(?:(?!foo).)*
^(?:(?!foo).)*o$ → 「foo」 にマッチ出来ない。
先読みを使わない正規表現ならマッチ出来る。
→ (?:(?!foo).)* は厳密には間違い。
Q、では先読みを使って正しく動作させるにはどう書くべきか?
83(1): 2014/01/19(日)11:23 ID:??? AAS
お望みの先読み使って書くなら /fo(?!o)/
だろうが、
こんなの使うくらいなら
if (/foo/) {
} else {
※ここに書いたほうがいいに決まってる
}
で、もはや正規表現使うコストももったいないくらいだから
普通は strpos()みたいな関数使うべきだろう。
84: 2014/01/19(日)15:12 ID:U6WWS19r(1) AAS
先頭一致とか後方一致はsubstr使ってる
iオプション必要なら代わりにlc
85: 2014/01/19(日)15:26 ID:??? AAS
c
86: 2014/01/19(日)17:13 ID:??? AAS
>>83
>>82の内容を理解出来てないね・・
(?:(?!foo).)* → fo にマッチ
o$ → o にマッチ
これ足して foo にマッチ「する」のが期待する文字列否定の動作。
fo の中に foo は含まれていないので fo にはマッチしなければならない。
>関数使うべき
マラソン選手に車使うべきって言ってるようなもん。
87: 2014/01/21(火)04:23 ID:??? AAS
正解はこちら↓
Perl正規表現雑技 - ある文字列を含まないものにマッチする正規表現
外部リンク[htm]:www.din.or.jp
88: 2014/01/24(金)01:21 ID:??? AAS
うーむ、オートマトンの勉強というか、まだ触りしか学んでないんだが
既に文字列否定の正規表現を簡単に作れるようになってしまった。
チャリの運転と同じで、一旦出来るようになるとなんてことないね。
89: 2014/01/24(金)05:08 ID:??? AAS
(次のお題)
abc かつ def を含まない文字列を表す正規表現を作れ。ただし先読みはNG。
90(1): 2014/01/25(土)14:00 ID:peRg4Ln+(1) AAS
お題が提示されておりますが、質問よろしいでしょうか。
言語は Java(Android開発) です。
やりたいことは、
・'a', 'b', 'c', '*' の4つの文字が使われた文字列を分割する
・'a*', 'b*', 'c*' は1文字として扱い、'*'のみの物は無い
になります。
例えば "aba*cb*" の場合は
a
b
a*
c
b*
に分割したいです。
どのように書けば良いのでしょうか、ご教授願います。
91(1): 2014/01/25(土)17:37 ID:VUYYCfMh(1) AAS
([abc]\*?)
92(1): 2014/01/26(日)00:17 ID:??? AAS
このスレは道場と名の付いてる通り正規表現のスキルアップを目指すスレです。
糞質問・キチガイは↓こちらにお願いします。
Regular Expression(正規表現) Part12
2chスレ:tech
93: 90 2014/01/26(日)13:40 ID:??? AAS
>>91
ありがとうございました。勉強になります。
>>92
>>1も読めない糞は2chには向いていないと思うよ。
もう何十年も居座っていると予想されるが、そろそろ自覚しなよ。
94: 2014/01/26(日)23:09 ID:??? AAS
ここはもう荒らしの本拠地になってるから仕方がないよ。
わざわざ煽りにム板まで出張してきてるし。
95: 2014/01/27(月)00:48 ID:??? AAS
こちらは精神異常者の隔離スレとなっております
96: 2014/01/27(月)05:05 ID:??? AAS
じゅんじゅんのきまぐれ
外部リンク:d.hatena.ne.jp
おや、あわわさんとやらが俺の代わりに知らせに行ってくれてたのか。
あわわさん乙。ありがとう。
正規表現 Part11
2chスレ:tech
ってあれ?あわわさんのほうが6時間早い。CPU時計の時差?
97: 2014/01/29(水)03:59 ID:??? AAS
レベル高いスレにただいま。
98: 2014/01/29(水)04:05 ID:??? AAS
荒らしの住み処
ただのクソスレ
99(1): 2014/01/29(水)05:11 ID:??? AAS
ところで向こうの267は雑技たんなのかな?266、雑技のネタに使ってもよかですたい。
100(1): 2014/01/29(水)08:45 ID:??? AAS
>>99
当たりw
266の書き方は考えたけど,今回のケースでは267の書き方で大丈夫と考えた.
そういや質問者は「1」を含まないって書いてあるのに,なぜ「123」? とは思ったなw
後ろに他の正規表現を続けたりするとバックトラックして,
271の通りの可能性があるから初心者には266の方がいいのは確か.
ただ,他にもいろいろ考え出すと,最も内側のものだけ削除したいのなら,
ABC(?:(?!123|ABC|DEF).)*DEF
と書いた方がいいとかもある.
ちなみに266のミソは↓の辺りで微妙に使っていたりする.
外部リンク[htm]:www.din.or.jp
101(1): 2014/01/29(水)15:23 ID:??? AAS
>>100
ああ、考えてみればABCも入れたほうがいいね。質問者の対象データが対になってる
データだったから必要性を感じなかったが入れるべきだった、さすが雑技たん。
>なぜ「123」?
1というのは実データとは違う省略形と考えた。
初心者には文字と文字列の違いが分からないから文字列のつもりで1と書いてしまった
可能性がある。そこで文字列に対応しておけば1文字にも対応出来るってわけ。
>ABC(?:(?!123|ABC|DEF).)*DEF
これが基本形やね。高速化するなら*+とか、もっとやるなら[^1AD]*+使ってごちゃごちゃ書いたり。
>NoEnd
ミソは否定の中に分岐を入れることだからそれとはちょっと違うw
それと <\2> だと <font> になってしまうで・・ <\2\b やね。
102(1): 2014/01/30(木)00:29 ID:??? AAS
>>101
>1というのは実データとは違う省略形と考えた。
なるほど.確かに,初心者ほど状況説明が下手だからね.
>それと <\2> だと <font> になってしまうで・・ <\2\b やね。
単純なミスだな.指摘ありがとう.
103(2): 2014/01/30(木)07:11 ID:??? AAS
・範囲内で文字列を含まない正規表現
$_ = "zzzABC XYDEFzzDEFz";
if ( m/
# Perl 5.10 以降で有効
ABC
[^XAD]*
(?:
(?!XYZ|ABC|DEF).
[^XAD]*
)*
(*PRUNE) # バックトラックステートの削除
(*SKIP) # 次回の走査開始位置をここに飛ばす
(?:XY?)? # XYZとDEFの競合を想定した取りこぼし回収
DEF
/xgsiaap )
{ print "match! <".${^MATCH}.">"; }
else
{ print "no match."; }
>>102
修正乙!
104(1): 2014/01/30(木)13:46 ID:??? AAS
修正乙の後でアレなんだけど、実際に動かしてみたらだいぶおかしいから手直ししてみたよ、と。
while ($html =~ /
<(NOBR|CODE|B|PRE|FONT)\b
(?=
(
(?:(?!<\/\1>).)*?
(?:<\1\b|$)
)
)
/sixg
) {
print "<".$1.$2, "\n";
}
------------- perl.htm -------------
<b><font><pre><b>aaa
------------- perl.htm -------------
*? はなるべく使いたくないなぁ・・ [^<]*+ を使って最適化したいw
105(1): 2014/01/31(金)02:30 ID:??? AAS
>>103
(*VERB:ARG) ってのは知らなかったなぁ.
今回のケースだと(*PRUNE)は(?>pattern)で置き換えができると思うが,
マニュアルの 「(*PRUNE) は (?>pattern) 単独では表現できないケースを扱うために使えます。」ってのがどういうケースなのか想像できん.
>>104
修正ありがと.
元のやつだと後ろを吸い込んじゃうからマッチ位置が先に進んでしまう.
そうならないように先読みを使うと,先読み部分は後方参照に含まれなくなるから,先読みの中で改めて補足が必要って感じだね.
106(1): 2014/01/31(金)04:37 ID:??? AAS
>>105
>単独では
・・・ ( ・・・ (*PRUNE) )
みたいに ( ) で分断されてる場合とか? (?> だと2つ以上必要になる。
>マッチが先に
当たり〜。printのとこは""の中にまとめて書いても大丈夫だったのか、勉強になりますた。
改めて修正乙。
107(1): 2014/01/31(金)10:29 ID:??? AAS
>>103
「XYZとDEFの競合」ってのはXYZの後半部分がDEFの前半部分と同じ場合ってことかな?
例えば,xydとdef,とか,xdeとdefみたいな
もしそういう,後半部分と前半部分が重なる場合を考え出すと,話がもう少しややこしくなる.
つまり,ABCDとCDEFがキーだったときに,ABCDEFという文字があったら,
それはABCD+EFと解釈するのか,AB+CDEFと解釈するのか,という問題.
その解釈がすべて前方優先なのか,すべて後方優先なのか,それともキーの相互の優先度で決まるのか,
あるいは,あらゆる可能性を許すのか,あらゆる可能性を許さないのか.
キー自身が重なる場合もある.
例えば,ABCABみたいなキーだったとき,ABCABCABは,ABCAB+CABなのか,ABC+ABCABなのか.
108(1): 2014/01/31(金)10:34 ID:??? AAS
>>106
>・・・ ( ・・・ (*PRUNE) )
なるほど,括弧の深いところで使うと,(?> で表現するのは大変そうだ.
しかも,もしそれが中間レベルで分岐してたりすると,(?> では表現しきれないかな.
109: 2014/01/31(金)16:13 ID:??? AAS
>>107
ぶっちゃけその辺は何も考えてない。試作品とかテンプレートみたいな感じで作っただけ。
競合対策の部分は普通の使い方をするならいらないね、HTMLやXMLタグで挟まれた文字列にマッチさせるときとか。
こういうの以外に使い道が思い当たらないし。(だったら付けるな)
>>108
>分岐
なるほど、(?> ではお手上げだ。俺も年末に覚えたばかりでよく分かってない。
110: 2014/02/01(土)16:48 ID:??? AAS
## (*COMMIT)
$_ = "12";
if (
m/^1((*COMMIT)3|2)/
){ print "match!\n"; }
# 分岐の中で踏まれると以後ほかの分岐要素を走査することがなくなる。
# 現在の分岐要素がマッチ失敗したら全体もマッチ失敗となり検索はそこで完全終了する。
m/^1(*COMMIT)(3|2)/
# 下位層の分岐は走査され、マッチが成功する。
$_ = "12";
@test = $_ =~ m/^1(*COMMIT)A|\d/g;
print "@test\n";
# /g でも次位置からの走査は行われない。
@test = $_ =~ m/^1(*COMMIT)|\d/g;
# 結果 = 1 2 。マッチが成功した場合は走査を止めることはない。(失敗したときだけ止める)
111(1): 2014/02/01(土)17:24 ID:??? AAS
Q、(*COMMIT) とは逆にマッチが成功したときだけ /g を止める最も簡単な手段は何か?
$_ = "123";
@test = $_ =~ m/1|2|3/g;
print "@test\n";
↑2 がマッチ成功したときに /g を止め、3がマッチしないようにする。
フラグ変数を用意、チェックすれば可能だがもっと手軽な手段はないか。
112(2): 2014/02/02(日)07:59 ID:??? AAS
う〜ん、/g はループなのに break する方法が用意されていない。
COMMIT があるのにこれがないのはとても不可解だ。
# 先読みの中の (*SKIP) は機能しない。
@test = $_ =~ m/1|2(?=.*(*SKIP))|3/g;
# while 文の last を使う。
$_ = "123";
while ( m/1|2|3/gp )
{ print "${^MATCH}\n";
last; } # 1 で止まる。
# (?{code}) で last → 効果なし
while ( m/1|2(?{ last; })|3/gp )
# while 文に名前を付けて (?{code}) で last → 効果なし
TEST : while ( m/1|2(?{ last TEST; })|3/gp )
perl陣営に言えば新しいコマンド作ってくれそうだなぁ。
113: 2014/02/02(日)08:47 ID:??? AAS
# (?-g) → 効果なし
while ( m/1|2(?-g)|3/g )
# 苦肉の策 (現実的でない)
while (
m/(1)|(2).*|(3)/g
)
{ print "${^N}\n"; }
# 苦肉の策 + 最後の空文字列にマッチしない対策 (現実的でない)
while (
m/\z(*COMMIT)(*F)|(1)|(2).*|$/g
)
{ print "match! ${^N}\n"; }
114(1): 2014/02/02(日)10:19 ID:??? AAS
>>111
>>112 >>123
/g がループというのはちょっと違う.
リストコンテキストで評価したときはループと言えるが,スカラーコンテキストで評価したときはループではなく,
単に前回マッチした場所を覚えていて続きからマッチングを行うというだけ.
この問題はリストコンテキストで /g を評価したときに,マッチ成功後に途中で止めるいい方法はないかって言う問題だと解釈した.
スカラーコンテキストで評価したときに止めるんなら last を使えば簡単に止まる話.
つまり,while を使っていいんなら,
while (/1|2(*:STOP)|3/g) {
push(@test, $&);
last if $REGMARK eq 'STOP';
}
print "'@test'\n";
リストコンテキストで評価したときに途中で止めるには,かなり条件が限定されるが,
@test = $_ =~ m/(?(?<=2)\G(*COMMIT)(*FAIL))(?:1|2|3)/g;
ぐらいしか思いつかなかった.
これではフラグを使った方が簡単だろう.
115: ◆QzqhRqBYxktP 2014/02/02(日)14:00 ID:??? AAS
>>114
>ループというのはちょっと違う
そのへんはちゃんと理解してるから大丈夫。foreachとか<>みたいなつもりで書いてるから。
>リストコンテキストで /g を評価したときに,マッチ成功後に途中で止めるいい方法はないか
その通り。
>(*:STOP)
これはフラグ変数を使うやり方とまったく同じだからボツ・・。{ } の中で last するのはナシ。
m/ / の中で止められないか、という話だから。
しかも$REGMARKと$REGERRORは予期しない動きをすることがあるから
普通にフラグを使ったほうが確実。(後述)
>これではフラグを使った方が簡単だろう
やっぱそうかぁ、雑技たんでもダメなら無理そうだね。考えてくれてありがとう。
116: 2014/02/02(日)14:08 ID:??? AAS
## $REGERROR
# マッチ失敗でも$REGERRORが偽を返す例
$_ = "11";
m/^(*MARK:NAME)12/;
if ($REGERROR){ print "yes\n" }else{ print "no\n"; };
結果 → no
# 2 を (?!) や (*FAIL) に変えると・・?
m/^(*MARK:NAME)1(?!)/;
結果 → yes
2 を $ にすると no のまま。
117(1): 2014/02/02(日)14:12 ID:??? AAS
あれ、$REGMARK が予期しない動作になるデータはないや。
ごめん、使えないのは $REGERROR だけかも。
118(1): 2014/02/02(日)14:30 ID:??? AAS
>単に前回マッチした場所を覚えていて続きからマッチングを行うというだけ
あ、ちゃう、これ分かってなかった。場所覚えてるだけだったのか、違和感感じてたんだけど
やっと理解出来たよ、ありがとう。
あと雑技たんのサイトだけど
>回文にマッチする正規表現 # 再帰版
× (??{$palindrome})*
○ (??{$palindrome})?
だね。前者だと回文を繋げた文字列 121454989・・・ みたいなのを拾ってしまう。
119(1): 2014/02/02(日)20:34 ID:??? AAS
>>117
確かに $REGERROR は期待通りに動かないな.
>>118
回文の間違い指摘ありがとう.
120: ◆QzqhRqBYxktP 2014/02/02(日)20:50 ID:??? AAS
おや、出来ちゃった・・
# リストコンテキスト + /p のマッチング中に break する。
$_ = "123";
@test = $_ =~ m/
1
|2
(?{ $last = "${^MATCH}"; })
(*COMMIT)(*F)
|3
/xgp;
push(@test,$last);
print "@test\n";
# リストコンテキスト + /p のマッチング中に break する。( push版 )
push(@test,
m/
1
|2
(?{ $last= ${^MATCH}; })
(*COMMIT)(*F)
|3
/xgp
,
$last
);
>>119
仕事はやっ!修正乙〜
121: ◆QzqhRqBYxktP 2014/02/03(月)07:41 ID:??? AAS
↑× /p のマッチング中に → /g の間違い
----------------------------------------------
# 先読みの中の (*SKIP) は正しく機能する。(× >>112)
$_ = "123";
@test = $_ =~ m/1|2(?=.*\z(*SKIP)(*F))|3/g;
print "@test\n";
# 結果 → 1
# 先読みの中の (*SKIP) が失敗する例もある
@test = $_ =~ m/1|2(?=.*\z(*SKIP))(*F)|3/g;
# 結果 → 1 3
# perl内部の最適化の影響により (?=) より早く (*F) が判定されている?
# $REGERROR が期待通りに動かない原因も最適化が犯人? (最適化は 詳説 正規表現 参照)
----------------------------------------------
# \z で始まる正規表現 + while( /g )
while (
m/\z(?{ print "in code\n"; })/g
)
{ print "match!\n"; }
<結果>
in code
match!
in code
2回走査されてる。2回目は走査しといてマッチ失敗。/g により1つ先に進む動作の副作用?
(?{code}) が2回実行されるのでプログラムが想定外の動作になる可能性。
/g を忘れると走査開始位置が毎回先頭に戻り、無限ループになる。
122: 2014/02/03(月)17:57 ID:??? AAS
# リストコンテキスト + /g のマッチング中に break する。(perl 旧verl対応版)
$_ = "12223";
@test = $_ =~ m/
1
|2
(?{ $last = "$&"; })
.*\z # 余った文字列を全部マッチさせる。
|3
/xgs;
$test[$#test] = $last; # 最後の要素の入れ替え
print "@test\n";
これらを "break出来てる" と言うのはちょっとおこがましいかも知れない。やはり break コマンドが欲しい。
123(1): ◆QzqhRqBYxktP 2014/02/04(火)13:37 ID:??? AAS
・$REGERROR を (?{code}) と入れ替えて実験
my $cnt = 0;
$_ = "11";
m/^(?{ $cnt++;})1(*F)/;
print "$cnt\n";
# 結果 → 1
my $cnt = 0;
$_ = "11";
m/^(?{ $cnt++;})12/;
print "$cnt\n";
# 結果 → 0
$REGERROR さんに無罪判決。冤罪でした。
124(2): 2014/02/04(火)13:39 ID:??? AAS
皆様、こんにちは 質問させてください
テキスト内の文字を置き換えるアプリ(Devas)で作業をしています
正規表現で文字検索と置き換えしたいのですが表現法がわかりませんので
詳しい方アドバイス下さいませんでしょうか?
テキスト内には
.(ドット)abc"IMG
.(ドット)def"IMG
.(ドット)ghr"IMG
など . と "IMG で囲まれた数パターンの文字列がありこれに元文字列を利用し .photo を付け加えたいのです
.(ドット).photo.abc"IMG
.(ドット).photo.def"IMG
.(ドット).photo.ghr"IMG
検索、置き換え 共に正規表現が使えるアプリなのですがそれぞれどう表現して良いのか教えてくださいませんか?
よろしくお願いいたします
125(3): ◆QzqhRqBYxktP 2014/02/04(火)13:41 ID:??? AAS
・開始タグと閉じタグの間に文字列を含まない正規表現 (正規表現 否定 除く)
$_ = "ABC ABC DEF ABCDEF";
while ( m/
# Perl 5.10 以降で有効
ABC
[^ADX]* # 先頭の文字を使った高速処理
(?:
(?:
DEF (*ACCEPT) # マッチ成功
|\K ABC # 今までマッチした文字列を捨ててリスタート
|XYZ (*PRUNE) (*SKIP) (*F) # NGワード検出、マッチ失敗
|. # ↑の3つ以外の1文字
)
[^ADX]*
)*
(*COMMIT) (*F) # DEFで閉じられないまま終端に到達。
/xgsiaap )
{ print "match! <${^MATCH}>\n"; }
# NGワード、開始タグ、閉じタグの競合は想定していない。
# 例、NGワード="</" 、 閉じタグ="</div>"
126: 2014/02/04(火)20:09 ID:xuvSG1oC(1) AAS
s/^\./.photo./g
行頭限定の場合
127: ◆QzqhRqBYxktP 2014/02/05(水)16:22 ID:??? AAS
>>124
<検索>
\.([a-z\d]{1,4}"IMG\b)
<置換>
..photo.$1
\. を ( ) に入れてないのは処理効率を上げるため。
「abc」の部分は拡張子と考えて数字も許可した。(1文字以上4文字以下の英数字)
何かまずかったら遠慮なく。
128(1): 124 2014/02/06(木)18:00 ID:??? AAS
たくさんレスいただきましてありがとうございます
お礼が遅れまして申し訳ありません
127様の \.([a-z\d]{1,4}"IMG\b) で無事検索できることができました
しかし置き換えでは マッチした文字列が ..photo.$1 に置き換わるだけで $1にマッチした語句が適応されません
検索結果
○○○○○○.abc" IMG が ○○○○○○..photo.$1 となります
希望では
○○○○○○.photo.abc" IMG となることです(単純に .拡張子 前に .photo を入れたい)
先の書き込みでの訂正がありました 申し訳ありません
検索したい文字列には " と IMG の間に半角スペースがありました
半角があっても上手く検索にひっかっかっていますが
上手く置き換えができないのはこの半角が原因なのでしょうか?
引き続きご指導いただければ幸いです よろしくお願いいたします
129(1): ◆QzqhRqBYxktP 2014/02/06(木)20:27 ID:??? AAS
>>128
ごめんなさい、こちらにも見落としがいくつかありました。
( Devasにはメジャーな正規表現エンジンが使われていると考えて作りましたが違ったようです )
・通常版 (上行=検索、下行=置換)
\.[a-zA-Z\d]{1,4}" ?IMG\b
.photo\0
・拡張子を小文字に変換する版 (例 .JPG → .jpg )
\.([a-zA-Z\d]{1,4})(" ?IMG\b)
.photo.\L\1\E\2
・ 「"」 と IMG の間のスペースがあっても無くてもスペース1個にする版
\.([a-zA-Z\d]{1,4})" ?IMG\b
.photo.\L\1\E" IMG
# \L と \E を削除すれば拡張子の小文字変換はしなくなります。
# 本当は .photo.photo.jpg のような複数回置換による重複を防ぎたかったんですが
# この正規表現エンジンでは無理なようです。(>_<)
130: 2014/02/06(木)22:22 ID:??? AAS
>>129
度々のレスありがとうございます
正規表現エンジンにもいろいろなものがあるとは知りませんでした
お手数をおかけいたしまして申し訳ありません
いくつものパターンを示してくださいまして
重ねて感謝いたします
通常版にて理想の変換ができました
今回教えて頂いたような知識を深めて、もっと便利にPCを使えるようになりたいと思います
勉強になりました ありがとうございます m(_ _)m
131: 2014/02/09(日)02:41 ID:??? AAS
質問させてください。
phpのpreg_match関数でwebページから文字列を抽出したいと考えています。
以下を使用して抽出していますが、改行が含まれると抽出ができませんでした。
$text = '/value="(.*?)" id="latest"/';
preg_match($text, $source, $matches);
$word = $matches[1];
色々調べて$textを以下のようにしてみましたが、うまくいきませんでした。
$text = '/value="(.*?)" id="latest"/s';
$text = '/value="([\s\S]*?)" id="latest"/';
$text = '/value="((\n|.)*?)" id="latest"/';
何故うまくいかないのかよくわかりません。
なにかアイデアはありませんでしょうか?
132: 2014/02/09(日)08:07 ID:J9pikab5(1/2) AAS
俺なら
/value="([^"]*)"\s+id="latest"/
133: ◆QzqhRqBYxktP 2014/02/09(日)17:20 ID:??? AAS
× ' '
○ " "
というオチ?PHPは触らないから分からない。
134: 2014/02/09(日)17:39 ID:J9pikab5(2/2) AAS
PHPなんか触らないから分からないけど両端のすらすらが余計とかなんかね
135: ◆QzqhRqBYxktP 2014/02/09(日)18:09 ID:??? AAS
ごめんなさい、PHPの解説サイト見たら ' ' でOKでした。
136: 2014/02/11(火)10:03 ID:??? AAS
PHPスレで聞いたほうが早いかも。原因が改行以外にある可能性も十分あるので
動かないサンプルコードをアップして見てもらえば確実に原因教えてもらえると思う。
137: 2014/02/11(火)13:41 ID:??? AAS
↑$source に入るHTMLファイルも見ないと原因が分からない可能性アリ。
138: ◆QzqhRqBYxktP 2014/02/13(木)23:18 ID:??? AAS
再帰と (?( ) yes|no) の組み合わせが楽しすぎる。もしかしたら宝の山かも。
マトリョーシカの中にダルマを入れられる感じ。
139: 2014/02/15(土)18:56 ID:??? AAS
正規表現メモ
外部リンク[html]:www.kt.rim.or.jp
「調整中」
気付いてもらえたのかそうでないのかいまいち分からんす。
このサイトはあんまアテにしないほうが良さそうだ。
140: ◆QzqhRqBYxktP 2014/02/16(日)14:59 ID:??? AAS
>>125 の疑問点
\K が分岐の先頭にあることで処理速度に遅れが出るかどうか調べる。
また、\K を使わない書き方とどちらが早いか調べる。
141: ◆QzqhRqBYxktP 2014/02/16(日)15:40 ID:??? AAS
比較対象追加 ( >>125 ) | (?=ABC) \K ABC
142(1): ◆QzqhRqBYxktP 2014/02/16(日)20:56 ID:??? AAS
( >>125 ) | (?=ABC) \K ...
Perl6 正規表現 I
外部リンク[html]:dl.dropboxusercontent.com
143: ◆QzqhRqBYxktP 2014/02/17(月)00:27 ID:??? AAS
Perl6::Overview::Rule
外部リンク[pod]:search.cpan.org
[foo|bar]+
Perl6ではこれが正しい書き方になるらしい。初心者がハマりそう・・罠的な意味で。
先読み、戻り読みは書きにくくなった感が否めない。
文字クラスも加算、減算をしないときでも <> で囲う必要があるのはめんどくさい。
が、新しいオモチャとしては十分楽しめそう。ついでに英語も覚えてしまおう。
144(1): ◆QzqhRqBYxktP 2014/02/22(土)00:25 ID:??? AAS
S05
外部リンク[html]:feather.perl6.nl
> Last Modified: 11 Feb 2014, Version: 174
A05
外部リンク[pod]:search.cpan.org
> Last Modified: 18 May 2006, Number: 5, Version: 7
perl6ではもはや正規表現ではないという意味を込めて 「regex」 と呼んでるらしい。
perl5の正規表現にあった 「ゴチャゴチャ感」 が綺麗に一掃されてる感がある。
:ratchet があるのは最高だなぁ。
145(1): 2014/03/01(土)19:39 ID:n8n41uDi(1/2) AAS
2chスレ:applism
2chスレ:applism
この書込の方を正規表現でNGにしたいと思っています。
条件は
最初の行とは限らないが、「・」で初める行がある。何文字かの後、改行
その次の行は空の行
この2セットを正規表現で表すにはどうすればいいでしょうか?
.*?・.*?\r\n\r\n
としてみましたがダメでした。
146(2): ◆QzqhRqBYxktP 2014/03/01(土)20:13 ID:??? AAS
>>145
2chブラウザ用でいいのかな?処理速度重視で作った。
(?:^|<br>)(?>\s*)・(?>[^<]*(?:(?!<br>).[^<]*)*)<br>(?>\s*)<br>
147: 2014/03/01(土)20:45 ID:n8n41uDi(2/2) AAS
>>146
素敵!
神!
すっきりしました!
テキストじゃなくhtmlに対して正規表現だったのですね、勉強になりました。
ありがとうございました!
148: 2014/03/02(日)02:32 ID:2i/vkXtz(1) AAS
htmlに対してとかじゃなくログに合わせろと
149: ◆QzqhRqBYxktP 2014/03/04(火)19:52 ID:??? AAS
(>>146)
(?:^|<br>) は分岐のバックトラックが残るから (?><br>|\A) としたほうが良さそう。
この2つは動作が完全なイコールではないので注意が必要、文頭が <br> だった場合に
絶対に \A がマッチ出来なくなるため。これが問題になることはほとんど無いだろうけど。
150: 2014/03/05(水)08:18 ID:??? AAS
(>>144)
S05
外部リンク[html]:perlcabal.org
>Last Modified: 27 Feb 2014
Jeffrey Friedl
外部リンク:regex.info
Jeffrey Friedl - 第3版のコード ※ CGIなので直リンは避けたほうが良い。
regex.info/listing.cgi?ed=3&p=all
第2刷に対する正誤表 - 詳説 正規表現 第3版
外部リンク:www.oreilly.co.jp
Google Books 詳説 正規表現 ※ 立ち読み可能
外部リンク:www.google.co.jp
151: 2014/03/13(木)06:24 ID:??? AAS
ascii抜粋
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
152: 2014/03/17(月)17:00 ID:??? AAS
>>142
>Perl6 正規表現 I
ここのサイト主、先読みを理解出来てないな・・。beforeとafterも逆だし。
153: 2014/03/21(金)12:20 ID:??? AAS
tes
154: 2014/03/22(土)00:49 ID:??? AAS
windowsXP ショートカットのパス
---------
C:\WINDOWS\system32\cmd.exe /k C:\test.pl6
---------
/k は実行後にウインドウを閉じないオプション。
拡張子 pl6 を perl6.exe に関連付けしておく。
test.pl6 にperl6のテストコードを書いて実験する。
155: 2014/03/23(日)15:15 ID:??? AAS
#!/usr/bin/perl6
my $str;
$str := "AAABBBCCC";
say $str.trans( 'A'=>'a', 'B'=>'b', 'C'=>'c' );
say "\n"~$str;
---結果---
aaabbbccc
AAABBBCCC
156(2): 2014/03/26(水)20:28 ID:??? AAS
### winXP で文字コードの 『et_EE.ISO8859-1』 を使えるようにする手順
!!! 試すときは仮想マシンを使うこと。環境が壊れて文字化けだらけになるため。 !!!
1、「コントロールパネル」 → 「地域と言語のオプション」
2、「日本語」 や 「日本」 と設定されている所を全て 「エストニア」 に設定する。
3、PC再起動
=> perl から et_EE.ISO8859-1 が使用可能になる。
順番が s z t u に変わったことを確認。ただ、 [a-z] で t 以降もマッチするのは変わらず。
[FreeBSD] - 2005/9/3 ( => FreeBSD4.10? )
外部リンク[html]:lists.freebsd.org
外部リンク[html]:lists.freebsd.org
正規表現 Part11
2chスレ:tech
157: 2014/03/26(水)22:02 ID:??? AAS
FreeBSD - 2005/9/5
外部リンク[html]:lists.freebsd.org
外部リンク[html]:lists.freebsd.org
正規表現 Part11
2chスレ:tech
[[ winXPで et_EE.ISO8859-1 を使う ]]
1、「コントロールパネル」 => 「地域と言語のオプション」
2、「日本」 「日本語」 を全て「エストニア」 に変更。
3、PC再起動
perlで s z t u の順になるのを確認。しかし [a-z] が t u 以降にもマッチするのは変わらなかった。
=> 順番が変わることによるトラブルを避けるために対策されている?
※ これをやると環境の一部がエストニア語で上書きされ日本語に戻せなくなるので
試すなら 「VM ware」 や 「Virtual PC」 等の仮想マシンで試しましょう。
2005/9/5 に問題報告がされているのでそれ以前にリリースされたFreeBSDを使って試せば
完全に再現出来る可能性大。そして 4.11で再現出来なくなっていれば対策が取られたということになる。
158: 2014/03/30(日)04:03 ID:??? AAS
--------c:\test.pl-----------
use locale;
print +(sort grep /[a-z]/i, map { chr } 0..255), "\n";
--------c:\test.pl-----------
C:\>perl test.pl
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsSzZtTuUvVwWxXyY
C:\>perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x86-multi-thread
-----------------------------------
↓これを使わなくても順番が変わった。
use POSIX qw(setlocale LC_ALL);
setlocale(LC_ALL, "et_EE.ISO8859-1");
コンパネで「エストニア」と指定しただけで「et_EE.ISO8859-1」は未指定の状態。
-----------------------------------
/[a-z]/i を /\w/ に変えると英字以外の文字も英字の間に
挟まっていることが確認出来る。
159: 2014/03/30(日)04:24 ID:??? AAS
--------c:\test.pl-----------
use locale; # これが無いと順番が変わらない
use POSIX qw(setlocale LC_ALL); # コメントアウトしても変化なし
setlocale(LC_ALL, "et_EE.ISO8859-1"); # コメントアウトしても変化なし
my $abc;
$abc = "STU";
$abc =~ s/[A-Z]/hit/g;
print $abc."\n";
--------c:\test.pl-----------
[結果] hithithit
順番が変わっていれば S にしかマッチしないはずだが3文字すべてに
マッチしている。
LC_ALL を LC_CTYPE や、 LANG などに変えたり、test.plを保存するときの
文字コードをutf-8からshift_jisに変えたりしても結果変わらず。
XPsp3+perl5.16.3の環境で S だけにマッチさせる手段は無いと思われる。
160(1): 2014/03/30(日)05:25 ID:??? AAS
>>156
「辞書順」はロケールに依存するが「文字コード順」は文字コードに依存する、んじゃね?
文字集合の範囲指定が文字コード順と定義されているなら、
いくらロケール切り替えても文字コード切り替えない限り無意味だろう。
で、文字集合の範囲指定ってどっちだと定義されてるの?
161: 2014/03/30(日)14:02 ID:??? AAS
>>160
俺はロケールや文字コードの知識はほとんど無いんでよく分かってない。
↓は winXPsp3 + perl5.16.3 + ロケール = 「日本」 の環境での実験結果。
・ [ァ-ィ] が ア にマッチするか実験。( 文字コード順ならマッチしないはず )
----------------------------------------
use locale;
if ( "ア" =~/[ァ-ィ]/ ){ print "hit\n"; }
else { print "no hit\n"; };
----------------------------------------
結果: hit ( マッチしたので文字コード順ではない )
この環境での範囲指定は↓の順みたい。これはshift_jisの並び順とは違う。(これが辞書順?)
----------------------------------------
_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZァアィ
スセソタチッツテトナニヌネノハヒフヘホマミムメモャヤュユョヨラリルレロワヲン
----------------------------------------
文字コードでなくロケールに依存するという発想は思い付かなかったわ、そっちの線で
また実験しながら遊んでみるよ、辞書順とやらも調べてみる。ヒントありがとう。
162: 2014/03/31(月)00:44 ID:??? AAS
(>>156)
ついに [a-z] が t 以降にマッチしない動作の再現に成功!
et_EE.ISO8859-1 の代わりに et_EE.ISO8859-15 を使ったら再現出来ました!
今まで助言をくれたみなさんありがとう〜。自分一人じゃ絶対無理だった。
↓こちらの方々にも感謝〜
初心者もOK! FreeBSD質問スレッド その117
2chスレ:unix
詳しい手順はもう少し調べて整理してから載せます。
163: 2014/04/01(火)22:34 ID:??? AAS
正規表現道場 in ジオシティーズ
外部リンク:akiba.geocities.jp
とりあえず場所確保。
164: 2014/04/12(土)17:21 ID:??? AAS
2ch .scに移転しました。
正規表現道場 Part2
2ch.scスレ:php
■ 2ch.netの問題点
・ 2chscがNGワードになってるので正規表現をスレに貼るのに支障が出る。何より言論統制はイクナイ。
・ 管理人が今後どう動くか予測が付かない。
自暴自棄になりIPや書き込み履歴を大公開して逃走する可能性すらある。会社IPの人は注意。
165: 2014/04/12(土)20:53 ID:kZRku0LV(1) AAS
もうこっちに帰ってくるなよ
166: 2014/04/15(火)11:21 ID:qQPWwAKL(1) AAS
使用しているのはYahoo! Pipesのregexです
外部リンク:d.hatena.ne.jp
○○/△△&#xd;[□□
という文字列から△△だけを抜き出したくて、色々試してみているのですがどうもうまくいきません
".*/" -> replace -> ""
"\&#xd;.+" -> replace -> ""
だと思うのですが、何か間違いがあるのでしょうか?
ちなみに
"[.+" -> replace -> ""
も試してみましたがダメでした
167(1): 2014/04/15(火)20:38 ID:CfZz5H/X(1) AAS
Yahoo! Pipesの仕様なんて知らんが
文字列の開始も終わりも指定してないということは
.*/で一番最後の/までが対象として消える可能性はある
168: 2014/04/16(水)10:42 ID:??? AAS
>>167
ありがとうございます、確かめてみます
169: 2014/05/08(木)02:37 ID:??? AAS
ファイル検索ツールでパスを入力する時、「\」「/」を入れると候補が0になってしまいます
d:\\abc\\123\\ のように入力しているのですが、間違っていますか?
170: 2014/05/08(木)03:20 ID:Zyar7s4i(1) AAS
そのファイル検索ツールのところで聞けばー
171: 2014/05/22(木)01:25 ID:??? AAS
sc連投規制中なう。
172: 2014/05/22(木)14:43 ID:??? AAS
(sc>>212)
>qr/\"((?:\\[\\\"]|.)*?)\"/
> これはよっぽど自信がないと書けない書き方だ。
今考えると弾たんは単に2文字否定の作り方を知らなかっただけだな・・。
知ってたらこんなあやふやなものを作ろうなんて思わないし。
早さに拘るのに早い正規表現の作り方を知らないというちょっと残念な弾たん。
他の正規表現を見ても正規表現自体のスキルは高くない。
なんでもこなすオールラウンダーだから薄く広くになるんだろうな。
しかしこの程度の正規表現スキルでcpanのモジュール作って大丈夫なんだろうか。
探せばバグが出てきそうな予感。
173: 2014/05/22(木)15:18 ID:??? AAS
正規表現のスキル自体とモジュール作成能力には直接的な相関関係はないからなあ・・・
174: 2014/05/22(木)16:18 ID:??? AAS
(‥ )フーン
175: 2014/05/22(木)16:49 ID:??? AAS
そういう指摘するだけでモノ作ったり貢献してなさそうなお前はもっと駄目な人間だから安心しろ。
弾はなんだかんだ色々作ってるし色々な方面に貢献してる。
176: 2014/05/22(木)18:11 ID:??? AAS
指摘することも立派な貢献だと思いますよ。現に指摘によって処理時間が半分以下になってますし。
177: 2014/05/23(金)17:54 ID:??? AAS
まだ連投規制が解除されないなう
## m//
キャッシュを保持してない状態では空文字列にマッチする。
うっかりするとバグの原因になり得る。
178(1): 2014/05/23(金)19:00 ID:??? AAS
.scの連投規制は俺も食らったけど(専ブラだと「書き込めたかも…」で書けてない状態)、
Webブラウザで投稿したらBOT疑惑なのでCapchaしろになってそれで解除できた。
URLを貼りまくって連投規制になった場合は知らん。
179: 2014/05/23(金)19:22 ID:??? AAS
>>178
俺の場合は「連続投稿は禁止されています。Error!」って出るだけ。
普通に連続投稿が原因で規制食らってるみたいだからもうダメかも分からんね。
人が少ないから自然に独り言みたいになるのにそれで規制されたら
ますます人少なくなるなw
180: 2014/05/23(金)20:03 ID:Hym2JLxi(1) AAS
たらこテョンねるの話はたらこテョンねるでやれ
181: 2014/05/23(金)22:52 ID:??? AAS
パールを使った正規表現
外部リンク[html]:omatomen.net
182(1): 2014/05/24(土)02:35 ID:??? AAS
>>2 正規表現メモ
(?num) の説明文にある・・
-------------------
(\()?[^()]+(?(1)\))
-------------------
これは (?num) とはまったく関係ない正規表現。ただの条件文。
183: 2014/05/24(土)15:06 ID:??? AAS
>>182
----------------------------
(?(R)...) PCREで、再帰的パターンの開始を示します。
<(?:(?(R)\\d++|[^<>]*+)|(?R))*>
----------------------------
説明文は間違い。これは条件式の条件。\\d は \d の間違い。
perldoc.jp
外部リンク[pod]:perldoc.jp
(?(condition)yes-pattern|no-pattern) の項目を参照。
184: 2014/05/27(火)02:44 ID:??? AAS
詳説 正規表現のAmazon値 (1年前との比較)
・古本
初版 &nbsp;500円 → 1998円
2版 1600円 → 3150円
3版 4000円 → 3709円
・新品
3版 5184円
Amazon - "正規表現"
外部リンク:www.amazon.co.jp
185: 2014/05/27(火)03:16 ID:??? AAS
文字参照の処理、間違えてますよ > 2ch.net
186(1): 2014/05/27(火)03:43 ID:??? AAS
外部リンク[pm]:cpansearch.perl.org
↓ ^ か \A 忘れてね?
------------------------
$method =~ s/.*:外部リンク:o;
------------------------
187: 2014/05/27(火)03:49 ID:??? AAS
----------------------------------------------------------
my ($hex, $name) = ($line =~ /^([0-9A-Fa-f]+)\s+(.*)/);
next if $name =~ /[a-z]/; # range, not character
----------------------------------------------------------
2行目だけ小文字に限定されてる。これで良いのか悪いのかは分からないが。
188(1): 2014/05/27(火)14:20 ID:??? AAS
外部リンク[pm]:cpansearch.perl.org
-----
せっかく [eE] と書いてるのに /i
= ($num =~ /([+-])?(\d+)(?:\.(\d+))?(?:[eE]([+-]?\d+))?/io);
-----
ちゃんと動くんだろうけどアンカー付けないのが気持ち悪い。
$int =~ s/(.*)(.{48})\z/$2/o;
-----
これミスでね? [k|g]
if ($style =~ /(?:romaji|[k|g]ana)$/){
189: 2014/05/27(火)14:23 ID:??? AAS
本人に直接言う勇気がないらしい。まこと残念な人である
皆はこうならぬように
190: 2014/05/27(火)14:28 ID:??? AAS
今度は大文字限定。
$ja =~ tr/[G-Z]//d;
ITPro: tr///d
外部リンク:itpro.nikkeibp.co.jp
191: 2014/05/27(火)14:50 ID:??? AAS
あれ、/o が使われてる。なんでapache logのltsv変換には
使われてなかったんだろう。ああいう時こそ効果的なのに。
192: 2014/05/27(火)15:43 ID:??? AAS
■ combined2ltsv.pl の re で /o の有無をタイム計測
/o なし
12724/s
/o あり
31689/s
/o あり は2.5倍早い。これは報告したほうがいいかも。
193(1): 2014/05/27(火)16:02 ID:??? AAS
(>>186)
これに /o がついてるとなんか笑ってしまうw
余談追加。俺は報告なんかしないんで報告したい人がいたらしてね。
小飼 弾が手負いのうちに容赦なくツッコミを入れておく
外部リンク[html]:akiba.geocities.jp
194: 2014/05/29(木)03:21 ID:??? AAS
(>>188)
---------------
use utf8;
---------------
\d
---------------
弾たんにならこれで通じるだろう。(確信)
195: 2014/05/29(木)16:45 ID:??? AAS
神戸大:オートマトン
外部リンク[pdf]:kurt.scitec.kobe-u.ac.jp
行列の次は集合か・・もう忘れたよ・・覚えたことないけど。
196: 2014/05/30(金)01:37 ID:??? AAS
関西学院大学: 集合
外部リンク[htm]:www.kwansei.ac.jp
とっても分かりやすい。・・あれ?これ大学でやる内容か?中がっ(ry
197: 2014/05/30(金)01:52 ID:??? AAS
↑ /hs/ = ハイスクールでした。
198: 2014/05/30(金)06:37 ID:??? AAS
Q、 perlの正規表現では \A\z == ε である。では、 ??? == φ の ??? は何になるか。
199: 2014/05/30(金)19:16 ID:??? AAS
if( () =~ "" ){ print "hit\n"; } else { print "no\n"; };
結果 hit
答え、なし
200: 2014/05/30(金)21:43 ID:??? AAS
() と "" を比較して no を返す方法はあるか。( φとεの比較 )
() eq ""
() == ""
"" eq undef
"" == undef
() eq undef
() == undef
すべてtrueが返る。
201(1): 2014/05/30(金)22:31 ID:??? AAS
弾たん : perl - にも真偽値は存在する
外部リンク[html]:blog.livedoor.jp
ちなみにブログのトップではGoogle Chromecastをボロクソに叩きつつ、Chromecastへのamazonアフィを
張るというすご技を展開されております。
こういう人相手に>>193を報告しにいってもスルーされるだけだと思うよ。カネにならないからね。
202: 2014/06/01(日)03:26 ID:??? AAS
てすてす &
203: 2014/06/01(日)10:07 ID:??? AAS
>>201
それ、お前向けにカスタマイズされてるだけだろ。
204: 2014/06/01(日)10:29 ID:??? AAS
こういう陰口叩くやつよりマシ
上下前次1-新書関写板覧索設栞歴
あと 189 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s