[過去ログ] Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
624: 583 2018/09/21(金)05:18 ID:LI7qokUP(1/6) AAS
(?# 主要部)
<xx(?&Attribute)>(?&innerText)(?&roop)?+</xx>

(?# 定義部)
(?:|(?!)
(?'Attribute'(?:\s[^>]*+)?+)
(?'singletag'br)
(?'tagname'[a-z][a-z\d]*+)

(?'innerText'
(?: [^<]*+
| <(?&singletag)(?&Attribute)>
省9
625: 2018/09/21(金)05:54 ID:LI7qokUP(2/6) AAS
こだわった点

・主要部と定義部に分けて全体の構造が分かりやすくした
・繰り返しは全て強欲。無駄なバックトラックをさせない
・再帰には * を使わず、部分呼び出し自身に繰り返しをさせている
・定義部は (?:|(?!) 〜 ) として定義部がサーチに使われるのを避けている

>>605には ([^<]*|\g<-3>)* という部分があって
([^<]*)* というバックトラック処理がえらいことになる部分があって気になった

あと再帰を使ってるのにループを * にさせているのを見て
* を使わずに書けるはずだと思って作ってみた
626
(2): 2018/09/21(金)06:11 ID:LI7qokUP(3/6) AAS
こういう書き方をした正規表現をサクラエディタで使おうとすると
1行に繋げなければならない、これでは不便すぎる
鬼雲の強力な正規表現を快適に使い倒せるようにするべき

出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
そうすればここのような掲示板に貼るときに便利
 逆に1行で書かれた正規表現を複数行に直す機能も欲しい
手動でいちいち改行を入れる手間が省けて快適になる

この2つの機能は正規表現ライブラリに実装されることが望ましい
そうすれば他のテキストエディタの作者も気軽に実装出来るようになる
正規表現に新しいメタ文字が作られたときの対応も容易になる
627: 2018/09/21(金)06:18 ID:LI7qokUP(4/6) AAS
出来れば定義用の新しいコマンドが欲しい

定義のためのカッコなのにキャプチャが有効になってたり、
正規表現オブジェクトが無駄に肥大化してしまったりするから
628
(1): 2018/09/21(金)07:17 ID:fJq/snux(1) AAS
>>626
> 出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
ここはム板なので言い出しっぺの法則が適用されます
629
(1): 583 2018/09/21(金)19:24 ID:LI7qokUP(5/6) AAS
>>628
テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ
次世代のテキストエディタは↓こうなって欲しい

1、画面をいっぱいに使って正規表現の複数行の記述が出来る
2、複数行で書かれた正規表現を一行に繋げるボタン
3、一行で書かれた正規表現を複数行に展開するボタン

これがスタンダードになるといいな
630: 2018/09/21(金)20:42 ID:c6u7OXiZ(1) AAS
>>629
ガンバ w
631: 2018/09/21(金)20:44 ID:OGYiByDT(1) AAS
やっぱそうなるよな ここではw
632
(1): 2018/09/21(金)23:08 ID:3+OghnRP(1) AAS
extendedフラグを付けて鬼雲に渡せば、複数行で処理してくれる。
エディタ側で1行にくっつけたりする必要はない。
633
(1): 583 2018/09/21(金)23:41 ID:LI7qokUP(6/6) AAS
>>632
そういうことじゃないんだな、>>626を読んでね

ちなみに複数行の正規表現を一行に繋げるのはかなり簡単なんだけど
一行で書かれた正規表現を複数行に展開するのはかなり難しい
正規表現のパーサを作るということになるから

だから正規表現ライブラリに実装されることが望ましい
ライブラリの作者なら細かい挙動まで把握しているから正確なパーサが作れる

逆にテキストエディタの作者がやろうとすると動作を把握しきれずに
不完全なものになったり、実装を諦めたりすることになりかねない
複数行をスタンダードにするためにはライブラリ側での実装が必須となる
634
(1): 2018/09/22(土)02:13 ID:EPQO3h7N(1) AAS
>>633
鬼雲とbregonig.dllの作者さんまでどうぞ
Twitterリンク:k_takata
外部リンク:github.com
外部リンク:github.com
外部リンク[html]:k-takata.o.oo7.jp

あと鬼車オリジナルの作者さんも復活してたんだね
外部リンク:github.com
Twitterリンク:5chan_nel (5ch newer account)
635: 583 2018/09/22(土)21:31 ID:SLHR4wJP(1) AAS
>>634
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待

ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず

検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'

対象テキスト: blue
置換結果:青
省7
636: 2018/09/26(水)01:40 ID:3FykrnoG(1/3) AAS
xyz? を含まないものにマッチする正規表現
外部リンク[htm]:www.din.or.jp
外部リンク[htm]:www.din.or.jp

> fmcat =(retofm

..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
637
(1): 2018/09/26(水)03:09 ID:Rr41G2Hg(1) AAS
明らかに含むって試してから言ってる?
638: 2018/09/26(水)10:58 ID:3FykrnoG(2/3) AAS
>>637
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします

*y(x*[^xy]y*)*x* は誤植でしょうけど・・
639: 2018/09/26(水)14:05 ID:pN+YCTD5(1) AAS
あー確かににそこはおかしいな
引用っぽいけど
640: 2018/09/26(水)23:39 ID:3FykrnoG(3/3) AAS
やっぱり間違いなんですかね?
プログラムを使って自動的に算出してるようなのに・・
641: 2018/09/27(木)00:18 ID:0xNuoCxe(1) AAS
俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは?
642: 2018/09/27(木)02:58 ID:TOnM2DUW(1) AAS
>prolog
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
外部リンク:github.com

これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
643
(1): 2018/10/06(土)17:50 ID:0JYIRqz1(1) AAS
検索対象文字 <test>a="akari"desu</test>

正規表現 a="*"

で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
644: 2018/10/06(土)17:56 ID:e52HQVrn(1) AAS
馬鹿には無理
645: 2018/10/06(土)18:01 ID:FAIH8E2E(1) AAS
a=\".*\"

メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル

それでも意図どおりにマッチングしないことは予見できる
646: 2018/10/06(土)18:14 ID:OZkGL/sg(1/3) AAS
ワイルドカードと混同しちゃってるのか
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
647: 2018/10/06(土)18:16 ID:OZkGL/sg(2/3) AAS
正規表現っぽいIDになった?
648: 2018/10/06(土)18:23 ID:OZkGL/sg(3/3) AAS
OZk   G    L     /sg
ohzakiさんゲームのリンク

な気がしたので貼る、最近更新したばっかりやん

ゲーム関係のリンク
外部リンク[htm]:www.din.or.jp
649: 2018/10/14(日)12:53 ID:zaukh1NH(1/2) AAS
>>643
ワロタw
正規表現の*とワイルドカードは違うぞ。詳しくはググれ。

多分a="[^"]*"でいけると思うけど詳しくはググれ。
650
(1): 2018/10/14(日)14:33 ID:eP/1gSav(1/2) AAS
ちょいと質問させて
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
651
(1): 2018/10/14(日)14:56 ID:EqzxaMkD(1) AAS
""のなかに改行が含まれてた場合、違いが出るよ
652
(1): 2018/10/14(日)15:11 ID:zaukh1NH(2/2) AAS
あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry
653: 2018/10/14(日)15:27 ID:eP/1gSav(2/2) AAS
>>651-652
なるほど、ありがとうございました
654
(1): 2018/10/14(日)22:51 ID:yTLvFK6H(1) AAS
1、<test>a="[^\"]*"</test>
2、<test>a=".*?"</test>

この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------
655: 650 2018/10/14(日)23:38 ID:wMwKNjnw(1) AAS
>>654
サンプルありがとう
でも、そういった検索/置換対象の場合だったら .*? は最初から考えないとは思う
656: 2018/10/15(月)00:13 ID:fKW/Yset(1/3) AAS
この誤爆のことに注意を払えているなら .*? で問題ないよ
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
657: 2018/10/15(月)22:36 ID:fKW/Yset(2/3) AAS
# 文字列 xy を含まない正規表現
$states = 3;
@matrix = ( # E A p q ※ A は求める答え
[qw(X X E E)], # A = p + q = pε + qε
[qw(E X [^x] [^xy])], # p = p[^x] + q[^xy] + ε
[qw(X X x x)], # q = px + qx
);
658: 2018/10/15(月)22:37 ID:fKW/Yset(3/3) AAS
# 文字列 xyz を含まない正規表現
$states = 4;
@matrix = ( # E A p q r ※ A は求める答え
[qw(X X E E E)], # A = p + q + r = pε + qε + rε
[qw(E X [^x] [^xy] [^xz])], # p = p[^x] + q[^xy] + r[^xz] + ε
[qw(X X x x x)], # q = px + qx + rx
[qw(X X X y X)], # r = qy
);
659: 2018/10/18(木)14:54 ID:s3Db0e4D(1/2) AAS
y*(x*[^xy]y*)*x* について考察

左右対称形、後ろから読めば yx を含まない正規表現になる
x の後ろでは [^xy] しかマッチ出来ないようになっている

{[^x]|x+[^xy]}*x* # 状態遷移図から導かれる正規表現
# ※ ここでは見やすいように ( ) を { } としている
# 最後の x* は状態 0 から状態 1 への遷移を表している
[^x]*{x+[^xy][^x]*}*x* # 分岐の繰り返し ( | )* の展開
([^xy]|y)*{x+[^xy]([^xy]|y)*}*x* # [^x] を ([^xy]|y) に分解
y*{x*[^xy]y*}*x* # x+ を x* にすると中央の [^xy] が分解した [^xy] と
# 同じを動作するので分解した [^xy] を消せる、完成
660: 2018/10/18(木)23:54 ID:s3Db0e4D(2/2) AAS
こっちのほうがスマートだ..

# 状態遷移図から導かれる正規表現
([^x]|x+[^xy])*x*

# [^x] を分解し、[^xy] と y にする
([^xy]|y|x+[^xy])*x*

# [^xy] と x+[^xy] を1つにまとめる
(y|(x+)?[^xy])*x*

# (x+)? は x* に書き換えられる
(y|x*[^xy])*x*
省2
661: 2018/10/20(土)20:45 ID:WB0b2hD6(1) AAS
(a|b|c)* の展開についての考察

# (b|c) を1つのパーツと考えて {a|(b|c)}* を展開する
a*{(b|c)a*}*

# 分配の法則
a*{ba*|ca*}*

# 再び (x|y)* の形が現れたのでここを展開する
a*(ba*)*{ca*(ba*)*}*

a=123、b=456、c=789 とすると
^(123)*(456(123)*)*(789(123)*(456(123)*)*)*$
662
(4): 2018/10/21(日)19:43 ID:7AODCPK7(1) AAS
(a|b|c|d)* の展開についての考察

a*(ba*)*{ca*(ba*)*}* の a は全て a* の形になっているのでこれを利用する
a を (a|d) に置き換えることで分岐を1つ増やす

(a|d)* = a*(da*)* なので a* を a*(da*)* に置き換えるだけで答えが求まる
a*(da*)*(ba*(da*)*)*(ca*(da*)*(ba*(da*)*)*)*

(a|b|c|d|f)* を求めたいときは同じように a* を置き換えるだけで求まる
このように a* は分岐を無限に増やす入り口のような役割をする
663
(1): 2018/10/21(日)23:04 ID:mkrTRrBN(1) AAS
このスレで名前が挙がってたTresGrep、気が付いたらbregonig.dllにも対応してるじゃん
プルダウンのモード切替で.NETの正規表現と切り替えられるのもいい感じ
もうこれでサクラエディタのGrepはお役御免にできるかもしれない

なんだけど・・・rubyの正規表現が全部使えるわけじゃないのに
「鬼雲検索」
を名乗るのはどうなんだろう
664: 662 2018/10/22(月)01:40 ID:oA8lJo/T(1/3) AAS
>>663
ちょろっと試してみたけど戻り読みも後方参照も再帰もちゃんと動いたよ?
動かないのがあるならこちらで検証するよ〜
665: 名無しさん@そうだ選挙に行こう! Go to vote! 2018/10/22(月)07:15 ID:nc1bV2B+(1) AAS
全角スペースを\u3000と書いた場合とか
bregonigだとperl互換じゃない書き方は受け入れてもらえないわけで
666: 662 2018/10/22(月)14:03 ID:oA8lJo/T(2/3) AAS
自分は文字コードの知識が無いので迂闊なことは言えないから
ちょっと調べたことだけ書いておくね

ここで
外部リンク[html]:k-takata.o.oo7.jp
\u0149 を検索してみるとbregonigでも使えてそうなことが書かれてたよ
667: 662 2018/10/22(月)21:23 ID:oA8lJo/T(3/3) AAS
サクラエディタでいろいろ実験してたら \s が全角スペースにマッチした
サクラエディタ向けの正規表現を作るときには気を付けないといけないな
668: 2018/10/22(月)23:33 ID:aIOUU5bU(1) AAS
bregonigは鬼雲の機能限定版(perl互換の正規表現だけが動く)って話をどこかで読んだ記憶があったんだよね
どうせやるなら本家onigmoのRuby版正規表現も全部動くようにすればいいのに、って思っただけなんだ
ちょっと難癖に近いなとは自分でも思ってる

\sもそうだけど\dに全角数字がマッチしちゃって痛い目に合うのもまれによくあること
サクラに限らないんじゃないかね
669
(1): 2018/10/23(火)00:10 ID:W9szHIq5(1/2) AAS
AA省
670: 662 2018/10/23(火)00:11 ID:FESm7ID8(1/4) AAS
なるほど、dll からは ONIG_SYNTAX_PERL しか使えないから
ruby を使い慣れてる人にとっては歯がゆいと..

> \dに全角数字がマッチしちゃって
ですね〜、(?a) で防げるようなので覚えておきます
671: 2018/10/23(火)00:18 ID:FESm7ID8(2/4) AAS
レスが被ってしまった..

>>669
ありがとうございます
サクラエディタはUnicode仕様で動いているんですね
う〜ん、文字コードの話は難しいなぁ
672: 2018/10/23(火)00:24 ID:W9szHIq5(2/2) AAS
なおUnicodeの空白でも、上記のCc(0009〜0085)、LS,PS,Zs(Space Separator)
以外のCf(200b,200c,200d,FEFF)だとどうかなと試したが案の定マッチしなかった
さすがは仕様どおりだ
673: 2018/10/23(火)01:02 ID:FESm7ID8(3/4) AAS
> 200b,200c,200d,FEFF

サクラエディタにIMEパッドから打ち込んで試してみたら同じくマッチせず

# 主要部
(?&sp)
# 定義部
(|(?!)
(?<sp>
(?u)
[\x{200b}\x{200c}\x{200d}\x{FEFF}\s]
)
省2
674: 2018/10/23(火)03:03 ID:FESm7ID8(4/4) AAS
>>3
ジオから移転

正規表現パズル
外部リンク[html]:oraclesqlpuzzle.ninja-web.net
675
(1): 2018/10/25(木)14:38 ID:4OmhnPU0(1/2) AAS
あるファイルパスがありディレクトリのN階層目までのみを抽出したいのですが、正規表現について教えてください

例えばこんな入力のリストがある場合
aaa
aaa/bbb/ccc
aaa/bbb/ccc/ddd/eee/fff
で各リストに対して2階層目までを取得したい場合
aaa
aaa/bbb
aaa/bbb
となるのが期待値です。
省1
676
(1): 2018/10/25(木)15:23 ID:RdSksp9Y(1/2) AAS
>>675
正規表現はプログラム言語や正規表現オブジェクトのオプションによって
動作がけっこう変化するので質問するときはそういうの書いてね

[^/]+(?:/[^/]+)?

ただしこれは正しいパスが与えられることを前提としているので注意
677: 2018/10/25(木)15:29 ID:ZE3NVml1(1) AAS
/ の数が、0〜2
678: 2018/10/25(木)15:39 ID:5Cy/pQlU(1) AAS
./ で始まってたらどう数えるん
/ で始まってたら?
679: 2018/10/25(木)17:47 ID:4OmhnPU0(2/2) AAS
>>676
ありがとうございます、perlが希望でしたので次回から書くようにします
例は2階層で固定のようですが、ちなみにn階層目とか可変で書くような場合は下記のような感じで良いでしょうか?
[^/]+(?:/[^/]+){0,n-1}
680: 2018/10/25(木)18:40 ID:RdSksp9Y(2/2) AAS
ああ、N階層までのマッチという質問だったのか、ごめんね
それで合ってるよb
681: 2018/10/26(金)10:18 ID:MwloQati(1/3) AAS
暇つぶしに鬼雲の再帰処理に欠陥がないか探してみたけど見つからなかった

例、\1 を空文字にマッチさせて再帰の無限ループを狙う
()(?<name>a|\1\g<name>c)

例2、<x> を複数使ってマッチするのが空文字ではないように見せかける
(?<x>)(?<x>text)(?<name>a|\g<x>\g<name>c)
682: 2018/10/26(金)23:39 ID:MwloQati(2/3) AAS
・perl 5.22

if ( "a" =~ /^\Fa\E$/ )
{ print "match.\n"; }
else
{ print "no.\n"; }
# 結果: match.

・ サクラエディタ + bregonig.dll (ONIG_SYNTAX_PERL)

検索欄: ^\Fa\E$
テキスト: a
結果: 見つかりませんでした
省1
683
(1): 2018/10/26(金)23:58 ID:MwloQati(3/3) AAS
外部リンク[pod]:perldoc.jp
> \F \E まで畳み込み文字にします

bregonig.dll は Perl 5.14 ほぼ準拠だからまだ未対応らしい
684: 2018/10/28(日)00:53 ID:ZnGbnC1U(1/6) AAS
外部リンク[html]:jane2ch.net
レス241からの高速化の話題を検証してみた

レス243
>1は例えば (?:http://)〜 と、始めの数バイトをグループ化してやると速くなる

検証結果: 速度変わらず

レス245
> : の部分で一旦切れるようにすれば条件は平等になると思う
> (?:http:|ttp:|tp:) が速いわけではないと分かる

検証結果:
1. 10.345 ms
省3
685: 2018/10/28(日)01:36 ID:ZnGbnC1U(2/6) AAS
<鬼雲のリファレンス>

(?<element> \g<stag> \g<content>* \g<etag> ){0}
(?<stag> < \g<name> \s* > ){0}
(?<name> [a-zA-Z_:]+ ){0}
(?<content> [^<&]+ (\g<element> | [^<&]+)* ){0}
(?<etag> </ \k<name+1> >){0}
\g<element>

<とんこ式記述法>

\g<element>
(?!(?!)tonco
省11
686: 2018/10/28(日)14:53 ID:ZnGbnC1U(3/6) AAS
これらの記述法には1つ弱点があり

(?<name>ほにゃらら){0}

より前に

\k<name>

が出現すると文法エラーになる
省5
687: 2018/10/28(日)15:07 ID:ZnGbnC1U(4/6) AAS
↑これの例はおかしいな、このレスは取り消し
688: 2018/10/28(日)15:36 ID:ZnGbnC1U(5/6) AAS
昨日、詳説 正規表現の本を枕の下に置いて寝た
寝ている間に正規表現のパワーがもらえると思ったからだ

すると.. 夢に正規表現の神様が現れた

神様 「 \1 はな、 ${1} と書いてもマッチするんじゃよ」

朝、目覚めると飛び起きてperlを動かしてみた

if ( "aa" =~ /(a)${1}/ )
{ print "match!!\n"; }
else
{ print "no match..\n"; }
省1
689: 2018/10/28(日)20:54 ID:ZnGbnC1U(6/6) AAS
revilog.com/2012/08/7939.html
> a?[a-z] という正規表現は [b-z]|aa? という正規表現と
> 等価であり置換可能

前者は ab にマッチするが後者は...

> 同様に[a-z]?[A-z]という正規表現は [A-Z]|([a-z][a-z]?)
> という正規表現と 等価であり置換可能

前者は aA にマッチするが後者は...
690: 2018/10/29(月)00:52 ID:BYis7ms7(1/4) AAS
・ perl 5.22

use strict;
use warnings;
use encoding "cp932";
binmode STDERR, ':encoding(cp932)';

if ( "アイウエオ" =~ /\p{Katakana}/ ){ print "match!! <$&>\n"; }
else { print "no match..\n"; }
# 結果: match!! <ア>

・ bregonig.dll (shift_jis)

検索:\p{Katakana}
省4
691
(1): 2018/10/29(月)01:00 ID:BYis7ms7(2/4) AAS
perl がマッチするのはもしかしたら内部的にunicodeになってるとかかな
自分はプログラマじゃないんでさっぱり
692: 2018/10/29(月)01:09 ID:BYis7ms7(3/4) AAS
どうやら当たりらしい、unicodeに変換してからマッチしてた

if ( "あ" =~ /\x{3042}/ ) # true

if ( "あ" =~ /\x{82A0}/ ) # false
693: 2018/10/29(月)19:52 ID:BYis7ms7(4/4) AAS
・再帰の穴を狙う2

(str)
(?<name>
(?(1)yes|no)
\g<name>
|inner)

↓これに書き換えると
(?(1)yes) → 文法エラー
(?(1)|no) → 文法エラー

ガードが鉄壁ですごい、ほんと良く出来てるな〜
694
(1): 2018/10/31(水)16:56 ID:ZWlmxwfj(1/3) AAS
(?(条件)真の式|偽の式) の不具合を発見

() に "?:" を付けるかどうかで結果が変わってしまう

対象テキスト: 13 に対し、

1、
\A(?<name>1)(?(<name>)(2|3))\z
結果:マッチ

2、
\A(?<name>1)(?(<name>)(?:2|3))\z
結果:みつかりません
省2
695
(2): 2018/10/31(水)17:14 ID:ZWlmxwfj(2/3) AAS
やっぱりこれ欲しいなぁ

検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'

対象テキスト: blue
置換結果:青

これの有無で便利度が数段変わるんだよね

これの代わりに複数回の置換を行うと \G を使うときに困る
同じものを複数回検索するので速度低下に繋がる
696: 2018/10/31(水)19:55 ID:ZWlmxwfj(3/3) AAS
・ (?'name=~' )

変数name の中身をマッチテストする先読みの親戚のようなもの

(?'name' <div> .*? </div> )
(?:
 (?'name=~' \A .* abc .* \z)
 pattern1              # タグの間に abc があるとき
|
 (?'name=~' \A .* def .* \z)
 pattern2              # タグの間に def があるとき
|
省3
697: 2018/11/01(木)00:56 ID:+M+OiFJp(1/4) AAS
動画を正規表現に変換
動画リンク[YouTube]

検索: ^(.*)タマ(.*)タマ(.*)$
置換: $1$2$3
698: 2018/11/01(木)01:35 ID:zrOHiVOt(1) AAS
ニュタマーハタマーフ
699: 2018/11/01(木)17:25 ID:+M+OiFJp(2/4) AAS
(*^-^*)
700: 2018/11/01(木)17:34 ID:+M+OiFJp(3/4) AAS
>>694 のバグがrubyでも起こることを確認
ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]

原因は bregonig.dll でなく Onigumo にあるようだ

これは気付きやすい部類のバグだと思うんだけど
今までバグ報告が無かったようなのが不思議
takata神はここ見てるのかな
701: 2018/11/01(木)17:41 ID:+M+OiFJp(4/4) AAS
# ruby動作確認用コード

if '13' =~ /\A(?<name>1)(?(<name>)(?:2|3))\z/
# if '13' =~ /\A(?<name>1)(?(<name>)(2|3))\z/
p 'yes'
else
p 'no'
end
702
(1): 2018/11/01(木)23:04 ID:dBKH7CcG(1) AAS
>>691
perlの場合、Encode::decode()でperl内部処理用文字コード(utf8の亜種っぽい何か)に
正しく復号しないと正規表現クラスを正しく使えない。
703: 2018/11/02(金)01:26 ID:XP4jtOby(1) AAS
>>702
解説ありがとうございます
ということは今まで自分はperl内部の独自の文字コードにエンコードされた文字列に
対して正規表現を使っていたわけですね、恥ずかしながら初めて知りました
704: 2018/11/05(月)20:41 ID:SJelCvn/(1) AAS
>>683
畳み込み文字ってなんですか?
705: 2018/11/05(月)23:47 ID:xCFT0arz(1) AAS
(?:
  ( V ) > (0 -1)
 |
  ( . ) >  (1  0)
)
  俺も分からん
706: 2018/11/06(火)18:39 ID:4TN3vyid(1/3) AAS
<正常>

(1)?
(?(1)(?:2|3)|4)

(1)?
(?(1)(?:2|3)|(?:4|5))

(1)?
(?(1)2|(?:3|4))

(1)?
(?(1)(2|3))
省6
707
(1): 2018/11/06(火)19:30 ID:4TN3vyid(2/3) AAS
<異常>

(1)?
(?(1)(?:2|(3)))

置換: [$2]
対象テキスト: 3
結果: [3]

-----------
<正常>

(1)?
(?(1)(?>2|3)|4)
省2
708: 2018/11/06(火)19:36 ID:4TN3vyid(3/3) AAS
>>707 の実験でバグの原因が分かった

1、不要なカッコを取り除く処理が (?: ) を取り去った
2、分岐の "|" の意味合いが変わってしまった

ということだね、原因が分かれば回避が簡単なのでこのまま放置でも良さそう
709: 2018/11/09(金)18:21 ID:BZlL2mTg(1/3) AAS
perl5.14

# 1文字が2文字にマッチ
if ( "fi" =~ /\A\x{fb01}\z/i ){ print "true\n"; } else { print "false\n"; }
710: 2018/11/09(金)18:52 ID:BZlL2mTg(2/3) AAS
if ( "K" =~ /\A\x{212A}\z/i ) true
if ( "K" =~ /\A\x{212A}\z/il ) false
711: 2018/11/09(金)21:22 ID:BZlL2mTg(3/3) AAS
if ( "\x{212A}" =~ /[[:print:]]/ )  true
if ( "\x{212A}" =~ /[[:print:]]/a ) false
712: 2018/11/10(土)00:04 ID:EY2CMtcP(1/3) AAS
\d{0,32766}
# ok

\d{0,32767}
# error "Quantifier in {,} bigger than 32766 in regex;"
713: 2018/11/10(土)00:21 ID:EY2CMtcP(2/3) AAS
# \d{0,} は 32766回 を超えてマッチ可能
my $str = "";
for ( $count = 0; $count < 33000; $count++)
{ $str = $str."0"; }
print "\$str\.length = " , length($str) , "\n";

if ( $str =~ /\A\d{0,}\z/ )
{ print "true\n"; } else { print "false\n"; }

# 結果
# $str.length = 33000
# true
714
(1): 2018/11/10(土)18:21 ID:EY2CMtcP(3/3) AAS
# 検索表現の途中にある \G をマッチさせる
my $str = 'abcde';
$str =~ /abc/g;
if ($str =~ /abc\Gd/){ print "true\n"; } else { print "false\n"; }
715: 2018/11/13(火)00:16 ID:QabZTjVa(1/3) AAS
# (?1) の直前に (?i) を置いても効かない

if ( "Aa" =~ m/(?i)(A)(?1)/ )
{ print "true <$1>\n"; } else { print "false\n"; }
# 結果:true <A>

if ( "Aa" =~ m/(A)(?i)(?1)/ )
{ print "true <$1>\n"; } else { print "false\n"; }
# 結果:false
716: 2018/11/13(火)05:19 ID:QabZTjVa(2/3) AAS
## (?{code}) を使って >>695 の置換
if ( "ybrybrb" =~ /
\A
(?|
(?<赤>r)(?{ "aka"; })
| (?<青>b)(?{ "ao"; })
| (?<黄>y)(?{ "ki"; })
)*
brybrb ## バックトラックに対応出来るか試す
\z
省4
717: 2018/11/13(火)21:32 ID:QabZTjVa(3/3) AAS
# 仲間外れを探せ
if ("\x{1990}" =~ /
\N{U+1990}
#\N{1990}
#\N{NEW TAI LUE LETTER HIGH NA}
/x){ print "match.\n"; } else { print "false.\n"; }
718: 2018/11/14(水)10:41 ID:Hh1ptiAj(1) AAS
717
719: 2018/11/14(水)14:37 ID:duOGmOFb(1) AAS
ワロタw
720: 2018/11/14(水)18:45 ID:I91AeKub(1) AAS
このクイズだか検証だかよくわからんの書き連ねてるのは何なの?
一人で無意味に書き連ねてるの?誰かとやりとりしてるの?
721: 2018/11/14(水)23:41 ID:cpUdYoRF(1) AAS
正規表現の勉強をしながら気付いたことをメモってるだけです
基本的には一人でやってます

仲間が欲しい...
722: 2018/11/14(水)23:44 ID:CNd6PM4x(1) AAS
ここはお前のチラシの裏なのか

ある程度まとまってんならともかくメモ書きなら他所でやれよ
723: 2018/11/15(木)00:11 ID:Ow4iH1sO(1) AAS
需要ないかな?無いならやめます
1-
あと 279 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.039s