Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part13
http://echo.2ch.net/test/read.cgi/tech/1415149975/
次スレは>>980宜しく
天ぷら等2以降
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/03/15(水) 02:04:35.47ID:e01p03UP634デフォルトの名無しさん
2018/09/22(土) 02:13:48.20ID:EPQO3h7N >>633
鬼雲とbregonig.dllの作者さんまでどうぞ
https://twitter.com/k_takata
https://github.com/k-takata/Onigmo
https://github.com/k-takata/bregonig
http://k-takata.o.oo7.jp/mysoft/bregonig.html
あと鬼車オリジナルの作者さんも復活してたんだね
https://github.com/kkos/oniguruma/issues
https://twitter.com/5chan_nel (5ch newer account)
鬼雲とbregonig.dllの作者さんまでどうぞ
https://twitter.com/k_takata
https://github.com/k-takata/Onigmo
https://github.com/k-takata/bregonig
http://k-takata.o.oo7.jp/mysoft/bregonig.html
あと鬼車オリジナルの作者さんも復活してたんだね
https://github.com/kkos/oniguruma/issues
https://twitter.com/5chan_nel (5ch newer account)
635583
2018/09/22(土) 21:31:53.89ID:SLHR4wJP >>634
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待
ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
現状の bregonig.dll でこれが出来ないということはプログラミングでなんとかなる
機能は付けないということ
テキストエディタのほうは改行をまたぐマッチの実現に苦戦してるようで
この問題が解決しないと高度な正規表現は宝の持ち腐れになるだけなので
次世代のテキストエディタに期待しましょう
>鬼車オリジナルの作者さん
別人だとは知りませんでした^^;
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待
ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
現状の bregonig.dll でこれが出来ないということはプログラミングでなんとかなる
機能は付けないということ
テキストエディタのほうは改行をまたぐマッチの実現に苦戦してるようで
この問題が解決しないと高度な正規表現は宝の持ち腐れになるだけなので
次世代のテキストエディタに期待しましょう
>鬼車オリジナルの作者さん
別人だとは知りませんでした^^;
636デフォルトの名無しさん
2018/09/26(水) 01:40:37.36ID:3FykrnoG xyz? を含まないものにマッチする正規表現
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXY
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ
> fmcat =(retofm
..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXY
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ
> fmcat =(retofm
..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
637デフォルトの名無しさん
2018/09/26(水) 03:09:00.10ID:Rr41G2Hg 明らかに含むって試してから言ってる?
638デフォルトの名無しさん
2018/09/26(水) 10:58:06.87ID:3FykrnoG >>637
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします
*y(x*[^xy]y*)*x* は誤植でしょうけど・・
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします
*y(x*[^xy]y*)*x* は誤植でしょうけど・・
639デフォルトの名無しさん
2018/09/26(水) 14:05:39.88ID:pN+YCTD5 あー確かににそこはおかしいな
引用っぽいけど
引用っぽいけど
640デフォルトの名無しさん
2018/09/26(水) 23:39:54.65ID:3FykrnoG やっぱり間違いなんですかね?
プログラムを使って自動的に算出してるようなのに・・
プログラムを使って自動的に算出してるようなのに・・
641デフォルトの名無しさん
2018/09/27(木) 00:18:43.29ID:0xNuoCxe 俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは?
642デフォルトの名無しさん
2018/09/27(木) 02:58:15.53ID:TOnM2DUW >prolog
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
https://github.com/RichardMoot/Grail
これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
https://github.com/RichardMoot/Grail
これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
643デフォルトの名無しさん
2018/10/06(土) 17:50:41.16ID:0JYIRqz1 検索対象文字 <test>a="akari"desu</test>
正規表現 a="*"
で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
正規表現 a="*"
で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
644デフォルトの名無しさん
2018/10/06(土) 17:56:12.23ID:e52HQVrn 馬鹿には無理
645デフォルトの名無しさん
2018/10/06(土) 18:01:22.57ID:FAIH8E2E a=\".*\"
メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル
それでも意図どおりにマッチングしないことは予見できる
メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル
それでも意図どおりにマッチングしないことは予見できる
646デフォルトの名無しさん
2018/10/06(土) 18:14:31.01ID:OZkGL/sg ワイルドカードと混同しちゃってるのか
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
647デフォルトの名無しさん
2018/10/06(土) 18:16:35.11ID:OZkGL/sg 正規表現っぽいIDになった?
648デフォルトの名無しさん
2018/10/06(土) 18:23:52.49ID:OZkGL/sg OZk G L /sg
ohzakiさんゲームのリンク
な気がしたので貼る、最近更新したばっかりやん
ゲーム関係のリンク
http://www.din.or.jp/~ohzaki/game.htm
ohzakiさんゲームのリンク
な気がしたので貼る、最近更新したばっかりやん
ゲーム関係のリンク
http://www.din.or.jp/~ohzaki/game.htm
649デフォルトの名無しさん
2018/10/14(日) 12:53:05.30ID:zaukh1NH650デフォルトの名無しさん
2018/10/14(日) 14:33:15.06ID:eP/1gSav ちょいと質問させて
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
651デフォルトの名無しさん
2018/10/14(日) 14:56:27.64ID:EqzxaMkD ""のなかに改行が含まれてた場合、違いが出るよ
652デフォルトの名無しさん
2018/10/14(日) 15:11:22.83ID:zaukh1NH あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry
653デフォルトの名無しさん
2018/10/14(日) 15:27:34.24ID:eP/1gSav >>651-652
なるほど、ありがとうございました
なるほど、ありがとうございました
654デフォルトの名無しさん
2018/10/14(日) 22:51:29.78ID:yTLvFK6H 1、<test>a="[^\"]*"</test>
2、<test>a=".*?"</test>
この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------
2、<test>a=".*?"</test>
この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------
656デフォルトの名無しさん
2018/10/15(月) 00:13:04.80ID:fKW/Yset この誤爆のことに注意を払えているなら .*? で問題ないよ
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
657デフォルトの名無しさん
2018/10/15(月) 22:36:58.63ID:fKW/Yset # 文字列 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
);
$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:39.83ID:fKW/Yset # 文字列 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
);
$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:58.45ID:s3Db0e4D 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] を消せる、完成
左右対称形、後ろから読めば 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:36.85ID:s3Db0e4D こっちのほうがスマートだ..
# 状態遷移図から導かれる正規表現
([^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*
# 分岐ループを展開して完成
y*(x*[^xy]y*)x*
# 状態遷移図から導かれる正規表現
([^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*
# 分岐ループを展開して完成
y*(x*[^xy]y*)x*
661デフォルトの名無しさん
2018/10/20(土) 20:45:04.19ID:WB0b2hD6 (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)*)*)*$
# (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デフォルトの名無しさん
2018/10/21(日) 19:43:06.22ID:7AODCPK7 (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* は分岐を無限に増やす入り口のような役割をする
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デフォルトの名無しさん
2018/10/21(日) 23:04:31.26ID:mkrTRrBN このスレで名前が挙がってたTresGrep、気が付いたらbregonig.dllにも対応してるじゃん
プルダウンのモード切替で.NETの正規表現と切り替えられるのもいい感じ
もうこれでサクラエディタのGrepはお役御免にできるかもしれない
なんだけど・・・rubyの正規表現が全部使えるわけじゃないのに
「鬼雲検索」
を名乗るのはどうなんだろう
プルダウンのモード切替で.NETの正規表現と切り替えられるのもいい感じ
もうこれでサクラエディタのGrepはお役御免にできるかもしれない
なんだけど・・・rubyの正規表現が全部使えるわけじゃないのに
「鬼雲検索」
を名乗るのはどうなんだろう
664662
2018/10/22(月) 01:40:50.08ID:oA8lJo/T2018/10/22(月) 07:15:14.86ID:nc1bV2B+
全角スペースを\u3000と書いた場合とか
bregonigだとperl互換じゃない書き方は受け入れてもらえないわけで
bregonigだとperl互換じゃない書き方は受け入れてもらえないわけで
666662
2018/10/22(月) 14:03:03.71ID:oA8lJo/T 自分は文字コードの知識が無いので迂闊なことは言えないから
ちょっと調べたことだけ書いておくね
ここで
http://k-takata.o.oo7.jp/mysoft/bregonig.html
\u0149 を検索してみるとbregonigでも使えてそうなことが書かれてたよ
ちょっと調べたことだけ書いておくね
ここで
http://k-takata.o.oo7.jp/mysoft/bregonig.html
\u0149 を検索してみるとbregonigでも使えてそうなことが書かれてたよ
667662
2018/10/22(月) 21:23:16.87ID:oA8lJo/T サクラエディタでいろいろ実験してたら \s が全角スペースにマッチした
サクラエディタ向けの正規表現を作るときには気を付けないといけないな
サクラエディタ向けの正規表現を作るときには気を付けないといけないな
668デフォルトの名無しさん
2018/10/22(月) 23:33:25.25ID:aIOUU5bU bregonigは鬼雲の機能限定版(perl互換の正規表現だけが動く)って話をどこかで読んだ記憶があったんだよね
どうせやるなら本家onigmoのRuby版正規表現も全部動くようにすればいいのに、って思っただけなんだ
ちょっと難癖に近いなとは自分でも思ってる
\sもそうだけど\dに全角数字がマッチしちゃって痛い目に合うのもまれによくあること
サクラに限らないんじゃないかね
どうせやるなら本家onigmoのRuby版正規表現も全部動くようにすればいいのに、って思っただけなんだ
ちょっと難癖に近いなとは自分でも思ってる
\sもそうだけど\dに全角数字がマッチしちゃって痛い目に合うのもまれによくあること
サクラに限らないんじゃないかね
669デフォルトの名無しさん
2018/10/23(火) 00:10:38.63ID:W9szHIq5 I/Fの問題だろう
Onigmoの仕様では、\sは
Unicode以外の場合:
\t, \n, \v, \f, \r, \x20
Unicodeの場合:
0009, 000A, 000B, 000C, 000D, 0085(NEL),
General_Category -- Line_Separator
-- Paragraph_Separator
-- Space_Separator
ASCII外の文字を含むかどうかは ONIG_OPTION_ASCII_RANGE オプションに依存する。
とある
実際、サクラエディタで試すと、
2028(LS),2029(PS),
0009,000a,000b,000c,000d,0085,
0020,00a0,1680,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,200a,202f,205f,3000(SS)
がマッチする
なので、サクラエディタはUnicodeで鬼雲を使ってると思われる
Janeの場合でも、StyleはSJISであり、XenoはUnicodeなので
https://egg.5ch.net/test/read.cgi/software/1536058236/515
に対して、\d{6}がマッチするのはXenoのみである
Onigmoの仕様では、\sは
Unicode以外の場合:
\t, \n, \v, \f, \r, \x20
Unicodeの場合:
0009, 000A, 000B, 000C, 000D, 0085(NEL),
General_Category -- Line_Separator
-- Paragraph_Separator
-- Space_Separator
ASCII外の文字を含むかどうかは ONIG_OPTION_ASCII_RANGE オプションに依存する。
とある
実際、サクラエディタで試すと、
2028(LS),2029(PS),
0009,000a,000b,000c,000d,0085,
0020,00a0,1680,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,200a,202f,205f,3000(SS)
がマッチする
なので、サクラエディタはUnicodeで鬼雲を使ってると思われる
Janeの場合でも、StyleはSJISであり、XenoはUnicodeなので
https://egg.5ch.net/test/read.cgi/software/1536058236/515
に対して、\d{6}がマッチするのはXenoのみである
670662
2018/10/23(火) 00:11:35.27ID:FESm7ID8 なるほど、dll からは ONIG_SYNTAX_PERL しか使えないから
ruby を使い慣れてる人にとっては歯がゆいと..
> \dに全角数字がマッチしちゃって
ですね〜、(?a) で防げるようなので覚えておきます
ruby を使い慣れてる人にとっては歯がゆいと..
> \dに全角数字がマッチしちゃって
ですね〜、(?a) で防げるようなので覚えておきます
671デフォルトの名無しさん
2018/10/23(火) 00:18:39.55ID:FESm7ID8672デフォルトの名無しさん
2018/10/23(火) 00:24:56.92ID:W9szHIq5 なおUnicodeの空白でも、上記のCc(0009〜0085)、LS,PS,Zs(Space Separator)
以外のCf(200b,200c,200d,FEFF)だとどうかなと試したが案の定マッチしなかった
さすがは仕様どおりだ
以外のCf(200b,200c,200d,FEFF)だとどうかなと試したが案の定マッチしなかった
さすがは仕様どおりだ
673デフォルトの名無しさん
2018/10/23(火) 01:02:05.21ID:FESm7ID8 > 200b,200c,200d,FEFF
サクラエディタにIMEパッドから打ち込んで試してみたら同じくマッチせず
# 主要部
(?&sp)
# 定義部
(|(?!)
(?<sp>
(?u)
[\x{200b}\x{200c}\x{200d}\x{FEFF}\s]
)
)
自分がこれ使うことは永遠になさそうだけどとりあえず..
サクラエディタにIMEパッドから打ち込んで試してみたら同じくマッチせず
# 主要部
(?&sp)
# 定義部
(|(?!)
(?<sp>
(?u)
[\x{200b}\x{200c}\x{200d}\x{FEFF}\s]
)
)
自分がこれ使うことは永遠になさそうだけどとりあえず..
674デフォルトの名無しさん
2018/10/23(火) 03:03:21.50ID:FESm7ID8675デフォルトの名無しさん
2018/10/25(木) 14:38:08.86ID:4OmhnPU0 あるファイルパスがありディレクトリのN階層目までのみを抽出したいのですが、正規表現について教えてください
例えばこんな入力のリストがある場合
aaa
aaa/bbb/ccc
aaa/bbb/ccc/ddd/eee/fff
で各リストに対して2階層目までを取得したい場合
aaa
aaa/bbb
aaa/bbb
となるのが期待値です。
((?:¥w+¥/?){1,2})とかしてみたんですが上手くいきませんでした、お手数ですがよろしくお願いします
例えばこんな入力のリストがある場合
aaa
aaa/bbb/ccc
aaa/bbb/ccc/ddd/eee/fff
で各リストに対して2階層目までを取得したい場合
aaa
aaa/bbb
aaa/bbb
となるのが期待値です。
((?:¥w+¥/?){1,2})とかしてみたんですが上手くいきませんでした、お手数ですがよろしくお願いします
676デフォルトの名無しさん
2018/10/25(木) 15:23:45.93ID:RdSksp9Y >>675
正規表現はプログラム言語や正規表現オブジェクトのオプションによって
動作がけっこう変化するので質問するときはそういうの書いてね
[^/]+(?:/[^/]+)?
ただしこれは正しいパスが与えられることを前提としているので注意
正規表現はプログラム言語や正規表現オブジェクトのオプションによって
動作がけっこう変化するので質問するときはそういうの書いてね
[^/]+(?:/[^/]+)?
ただしこれは正しいパスが与えられることを前提としているので注意
677デフォルトの名無しさん
2018/10/25(木) 15:29:23.12ID:ZE3NVml1 / の数が、0〜2
678デフォルトの名無しさん
2018/10/25(木) 15:39:26.06ID:5Cy/pQlU ./ で始まってたらどう数えるん
/ で始まってたら?
/ で始まってたら?
679デフォルトの名無しさん
2018/10/25(木) 17:47:09.80ID:4OmhnPU0 >>676
ありがとうございます、perlが希望でしたので次回から書くようにします
例は2階層で固定のようですが、ちなみにn階層目とか可変で書くような場合は下記のような感じで良いでしょうか?
[^/]+(?:/[^/]+){0,n-1}
ありがとうございます、perlが希望でしたので次回から書くようにします
例は2階層で固定のようですが、ちなみにn階層目とか可変で書くような場合は下記のような感じで良いでしょうか?
[^/]+(?:/[^/]+){0,n-1}
680デフォルトの名無しさん
2018/10/25(木) 18:40:41.61ID:RdSksp9Y ああ、N階層までのマッチという質問だったのか、ごめんね
それで合ってるよb
それで合ってるよb
681デフォルトの名無しさん
2018/10/26(金) 10:18:13.83ID:MwloQati 暇つぶしに鬼雲の再帰処理に欠陥がないか探してみたけど見つからなかった
例、\1 を空文字にマッチさせて再帰の無限ループを狙う
()(?<name>a|\1\g<name>c)
例2、<x> を複数使ってマッチするのが空文字ではないように見せかける
(?<x>)(?<x>text)(?<name>a|\g<x>\g<name>c)
例、\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:01.03ID:MwloQati ・perl 5.22
if ( "a" =~ /^\Fa\E$/ )
{ print "match.\n"; }
else
{ print "no.\n"; }
# 結果: match.
・ サクラエディタ + bregonig.dll (ONIG_SYNTAX_PERL)
検索欄: ^\Fa\E$
テキスト: a
結果: 見つかりませんでした
\F の意味が知りたい..
if ( "a" =~ /^\Fa\E$/ )
{ print "match.\n"; }
else
{ print "no.\n"; }
# 結果: match.
・ サクラエディタ + bregonig.dll (ONIG_SYNTAX_PERL)
検索欄: ^\Fa\E$
テキスト: a
結果: 見つかりませんでした
\F の意味が知りたい..
683デフォルトの名無しさん
2018/10/26(金) 23:58:52.37ID:MwloQati http://perldoc.jp/docs/perl/5.16.1/perlreref.pod#ESCAPE32SEQUENCES
> \F \E まで畳み込み文字にします
bregonig.dll は Perl 5.14 ほぼ準拠だからまだ未対応らしい
> \F \E まで畳み込み文字にします
bregonig.dll は Perl 5.14 ほぼ準拠だからまだ未対応らしい
684デフォルトの名無しさん
2018/10/28(日) 00:53:19.71ID:ZnGbnC1U http://jane2ch.net/community/kako/1299/12999/1299979723.html
レス241からの高速化の話題を検証してみた
レス243
>1は例えば (?:http://)〜 と、始めの数バイトをグループ化してやると速くなる
検証結果: 速度変わらず
レス245
> : の部分で一旦切れるようにすれば条件は平等になると思う
> (?:http:|ttp:|tp:) が速いわけではないと分かる
検証結果:
1. 10.345 ms
2. 10.560 ms
3. 05.130 ms
結論: (?:http:|ttp:|tp:) は速かった
レス241からの高速化の話題を検証してみた
レス243
>1は例えば (?:http://)〜 と、始めの数バイトをグループ化してやると速くなる
検証結果: 速度変わらず
レス245
> : の部分で一旦切れるようにすれば条件は平等になると思う
> (?:http:|ttp:|tp:) が速いわけではないと分かる
検証結果:
1. 10.345 ms
2. 10.560 ms
3. 05.130 ms
結論: (?:http:|ttp:|tp:) は速かった
685デフォルトの名無しさん
2018/10/28(日) 01:36:44.44ID:ZnGbnC1U <鬼雲のリファレンス>
(?<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
(?<element> \g<stag> \g<content>* \g<etag> )
(?<stag> < \g<name> \s* > )
(?<name> [a-zA-Z_:]+ )
(?<content> [^<&]+ (\g<element> | [^<&]+)* )
(?<etag> </ \k<name+1> >)
)
リファレンス方式は後ろの {0} を読むまでそこが定義だと分からない
main部と定義部の境がはっきりせず読みにくい
対してとんこ式は (?!(?!)tonco 以降が定義部だと分かるので読みやすい
(?!(?!)tonco を とんこ で辞書登録しておけば {0} をコピペしなくて済む
とんこ式の とんこ とは発案者の名前とのこと
(?<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
(?<element> \g<stag> \g<content>* \g<etag> )
(?<stag> < \g<name> \s* > )
(?<name> [a-zA-Z_:]+ )
(?<content> [^<&]+ (\g<element> | [^<&]+)* )
(?<etag> </ \k<name+1> >)
)
リファレンス方式は後ろの {0} を読むまでそこが定義だと分からない
main部と定義部の境がはっきりせず読みにくい
対してとんこ式は (?!(?!)tonco 以降が定義部だと分かるので読みやすい
(?!(?!)tonco を とんこ で辞書登録しておけば {0} をコピペしなくて済む
とんこ式の とんこ とは発案者の名前とのこと
686デフォルトの名無しさん
2018/10/28(日) 14:53:16.06ID:ZnGbnC1U これらの記述法には1つ弱点があり
(?<name>ほにゃらら){0}
より前に
\k<name>
が出現すると文法エラーになる
例、
(?<tag>foo \k<name> bar){0}
(?<name>ほにゃらら){0}
\g<tag>
このため定義する順序が限定されてしまう、これは解消されるべき問題である
(?<name>ほにゃらら){0}
より前に
\k<name>
が出現すると文法エラーになる
例、
(?<tag>foo \k<name> bar){0}
(?<name>ほにゃらら){0}
\g<tag>
このため定義する順序が限定されてしまう、これは解消されるべき問題である
687デフォルトの名無しさん
2018/10/28(日) 15:07:39.92ID:ZnGbnC1U ↑これの例はおかしいな、このレスは取り消し
688デフォルトの名無しさん
2018/10/28(日) 15:36:10.31ID:ZnGbnC1U 昨日、詳説 正規表現の本を枕の下に置いて寝た
寝ている間に正規表現のパワーがもらえると思ったからだ
すると.. 夢に正規表現の神様が現れた
神様 「 \1 はな、 ${1} と書いてもマッチするんじゃよ」
朝、目覚めると飛び起きてperlを動かしてみた
if ( "aa" =~ /(a)${1}/ )
{ print "match!!\n"; }
else
{ print "no match..\n"; }
実行結果を見た私は奇跡を見ていた
寝ている間に正規表現のパワーがもらえると思ったからだ
すると.. 夢に正規表現の神様が現れた
神様 「 \1 はな、 ${1} と書いてもマッチするんじゃよ」
朝、目覚めると飛び起きてperlを動かしてみた
if ( "aa" =~ /(a)${1}/ )
{ print "match!!\n"; }
else
{ print "no match..\n"; }
実行結果を見た私は奇跡を見ていた
689デフォルトの名無しさん
2018/10/28(日) 20:54:51.63ID:ZnGbnC1U revilog.com/2012/08/7939.html
> a?[a-z] という正規表現は [b-z]|aa? という正規表現と
> 等価であり置換可能
前者は ab にマッチするが後者は...
> 同様に[a-z]?[A-z]という正規表現は [A-Z]|([a-z][a-z]?)
> という正規表現と 等価であり置換可能
前者は aA にマッチするが後者は...
> a?[a-z] という正規表現は [b-z]|aa? という正規表現と
> 等価であり置換可能
前者は ab にマッチするが後者は...
> 同様に[a-z]?[A-z]という正規表現は [A-Z]|([a-z][a-z]?)
> という正規表現と 等価であり置換可能
前者は aA にマッチするが後者は...
690デフォルトの名無しさん
2018/10/29(月) 00:52:40.24ID:BYis7ms7 ・ 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}
対象:アイウエオ
結果:見つかりません
サクラエディタ (unicode) ではマッチした
(?a)\p{Katakana} でもマッチ
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}
対象:アイウエオ
結果:見つかりません
サクラエディタ (unicode) ではマッチした
(?a)\p{Katakana} でもマッチ
691デフォルトの名無しさん
2018/10/29(月) 01:00:01.03ID:BYis7ms7 perl がマッチするのはもしかしたら内部的にunicodeになってるとかかな
自分はプログラマじゃないんでさっぱり
自分はプログラマじゃないんでさっぱり
692デフォルトの名無しさん
2018/10/29(月) 01:09:53.75ID:BYis7ms7 どうやら当たりらしい、unicodeに変換してからマッチしてた
if ( "あ" =~ /\x{3042}/ ) # true
if ( "あ" =~ /\x{82A0}/ ) # false
if ( "あ" =~ /\x{3042}/ ) # true
if ( "あ" =~ /\x{82A0}/ ) # false
693デフォルトの名無しさん
2018/10/29(月) 19:52:31.20ID:BYis7ms7 ・再帰の穴を狙う2
(str)
(?<name>
(?(1)yes|no)
\g<name>
|inner)
↓これに書き換えると
(?(1)yes) → 文法エラー
(?(1)|no) → 文法エラー
ガードが鉄壁ですごい、ほんと良く出来てるな〜
(str)
(?<name>
(?(1)yes|no)
\g<name>
|inner)
↓これに書き換えると
(?(1)yes) → 文法エラー
(?(1)|no) → 文法エラー
ガードが鉄壁ですごい、ほんと良く出来てるな〜
694デフォルトの名無しさん
2018/10/31(水) 16:56:37.48ID:ZWlmxwfj (?(条件)真の式|偽の式) の不具合を発見
() に "?:" を付けるかどうかで結果が変わってしまう
対象テキスト: 13 に対し、
1、
\A(?<name>1)(?(<name>)(2|3))\z
結果:マッチ
2、
\A(?<name>1)(?(<name>)(?:2|3))\z
結果:みつかりません
bregonig.dll (shift_jis, unicode 両方で確認)
ちなみに対象テキストを 12 にするとどちらもマッチする
() に "?:" を付けるかどうかで結果が変わってしまう
対象テキスト: 13 に対し、
1、
\A(?<name>1)(?(<name>)(2|3))\z
結果:マッチ
2、
\A(?<name>1)(?(<name>)(?:2|3))\z
結果:みつかりません
bregonig.dll (shift_jis, unicode 両方で確認)
ちなみに対象テキストを 12 にするとどちらもマッチする
695デフォルトの名無しさん
2018/10/31(水) 17:14:05.35ID:ZWlmxwfj やっぱりこれ欲しいなぁ
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
これの有無で便利度が数段変わるんだよね
これの代わりに複数回の置換を行うと \G を使うときに困る
同じものを複数回検索するので速度低下に繋がる
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
これの有無で便利度が数段変わるんだよね
これの代わりに複数回の置換を行うと \G を使うときに困る
同じものを複数回検索するので速度低下に繋がる
696デフォルトの名無しさん
2018/10/31(水) 19:55:08.08ID:ZWlmxwfj ・ (?'name=~' )
変数name の中身をマッチテストする先読みの親戚のようなもの
(?'name' <div> .*? </div> )
(?:
(?'name=~' \A .* abc .* \z)
pattern1 # タグの間に abc があるとき
|
(?'name=~' \A .* def .* \z)
pattern2 # タグの間に def があるとき
|
pattern3 # それ以外のとき
)
これもあると便利だけど (?(name) | ) で代用出来るから必要度は低い
変数name の中身をマッチテストする先読みの親戚のようなもの
(?'name' <div> .*? </div> )
(?:
(?'name=~' \A .* abc .* \z)
pattern1 # タグの間に abc があるとき
|
(?'name=~' \A .* def .* \z)
pattern2 # タグの間に def があるとき
|
pattern3 # それ以外のとき
)
これもあると便利だけど (?(name) | ) で代用出来るから必要度は低い
697デフォルトの名無しさん
2018/11/01(木) 00:56:07.61ID:+M+OiFJp698デフォルトの名無しさん
2018/11/01(木) 01:35:03.88ID:zrOHiVOt ニュタマーハタマーフ
699デフォルトの名無しさん
2018/11/01(木) 17:25:34.93ID:+M+OiFJp (*^-^*)
700デフォルトの名無しさん
2018/11/01(木) 17:34:43.67ID:+M+OiFJp >>694 のバグがrubyでも起こることを確認
ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
原因は bregonig.dll でなく Onigumo にあるようだ
これは気付きやすい部類のバグだと思うんだけど
今までバグ報告が無かったようなのが不思議
takata神はここ見てるのかな
ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
原因は bregonig.dll でなく Onigumo にあるようだ
これは気付きやすい部類のバグだと思うんだけど
今までバグ報告が無かったようなのが不思議
takata神はここ見てるのかな
701デフォルトの名無しさん
2018/11/01(木) 17:41:25.59ID:+M+OiFJp # 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
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デフォルトの名無しさん
2018/11/01(木) 23:04:15.23ID:dBKH7CcG703デフォルトの名無しさん
2018/11/02(金) 01:26:49.16ID:XP4jtOby704デフォルトの名無しさん
2018/11/05(月) 20:41:07.84ID:SJelCvn/ >>683
畳み込み文字ってなんですか?
畳み込み文字ってなんですか?
705デフォルトの名無しさん
2018/11/05(月) 23:47:01.14ID:xCFT0arz (?:
( V ) > (0 -1)
|
( . ) > (1 0)
)
俺も分からん
( V ) > (0 -1)
|
( . ) > (1 0)
)
俺も分からん
706デフォルトの名無しさん
2018/11/06(火) 18:39:37.29ID:4TN3vyid <正常>
(1)?
(?(1)(?:2|3)|4)
(1)?
(?(1)(?:2|3)|(?:4|5))
(1)?
(?(1)2|(?:3|4))
(1)?
(?(1)(2|3))
(1)?
(?(1)(?>2|3))
----------------------------
<異常>
(1)?
(?(1)(?:2|3))
(1)?
(?(1)(?:2|3)|4)
(1)?
(?(1)(?:2|3)|(?:4|5))
(1)?
(?(1)2|(?:3|4))
(1)?
(?(1)(2|3))
(1)?
(?(1)(?>2|3))
----------------------------
<異常>
(1)?
(?(1)(?:2|3))
707デフォルトの名無しさん
2018/11/06(火) 19:30:27.97ID:4TN3vyid <異常>
(1)?
(?(1)(?:2|(3)))
置換: [$2]
対象テキスト: 3
結果: [3]
-----------
<正常>
(1)?
(?(1)(?>2|3)|4)
(1)?
(?(1)(?>2|3)|(?>4|5))
(1)?
(?(1)(?:2|(3)))
置換: [$2]
対象テキスト: 3
結果: [3]
-----------
<正常>
(1)?
(?(1)(?>2|3)|4)
(1)?
(?(1)(?>2|3)|(?>4|5))
708デフォルトの名無しさん
2018/11/06(火) 19:36:59.61ID:4TN3vyid >>707 の実験でバグの原因が分かった
1、不要なカッコを取り除く処理が (?: ) を取り去った
2、分岐の "|" の意味合いが変わってしまった
ということだね、原因が分かれば回避が簡単なのでこのまま放置でも良さそう
1、不要なカッコを取り除く処理が (?: ) を取り去った
2、分岐の "|" の意味合いが変わってしまった
ということだね、原因が分かれば回避が簡単なのでこのまま放置でも良さそう
709デフォルトの名無しさん
2018/11/09(金) 18:21:43.84ID:BZlL2mTg perl5.14
# 1文字が2文字にマッチ
if ( "fi" =~ /\A\x{fb01}\z/i ){ print "true\n"; } else { print "false\n"; }
# 1文字が2文字にマッチ
if ( "fi" =~ /\A\x{fb01}\z/i ){ print "true\n"; } else { print "false\n"; }
710デフォルトの名無しさん
2018/11/09(金) 18:52:26.91ID:BZlL2mTg if ( "K" =~ /\A\x{212A}\z/i ) true
if ( "K" =~ /\A\x{212A}\z/il ) false
if ( "K" =~ /\A\x{212A}\z/il ) false
711デフォルトの名無しさん
2018/11/09(金) 21:22:21.15ID:BZlL2mTg if ( "\x{212A}" =~ /[[:print:]]/ ) true
if ( "\x{212A}" =~ /[[:print:]]/a ) false
if ( "\x{212A}" =~ /[[:print:]]/a ) false
712デフォルトの名無しさん
2018/11/10(土) 00:04:00.21ID:EY2CMtcP \d{0,32766}
# ok
\d{0,32767}
# error "Quantifier in {,} bigger than 32766 in regex;"
# ok
\d{0,32767}
# error "Quantifier in {,} bigger than 32766 in regex;"
713デフォルトの名無しさん
2018/11/10(土) 00:21:29.46ID:EY2CMtcP # \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
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デフォルトの名無しさん
2018/11/10(土) 18:21:06.77ID:EY2CMtcP # 検索表現の途中にある \G をマッチさせる
my $str = 'abcde';
$str =~ /abc/g;
if ($str =~ /abc\Gd/){ print "true\n"; } else { print "false\n"; }
my $str = 'abcde';
$str =~ /abc/g;
if ($str =~ /abc\Gd/){ print "true\n"; } else { print "false\n"; }
715デフォルトの名無しさん
2018/11/13(火) 00:16:05.06ID:QabZTjVa # (?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
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:20.83ID:QabZTjVa ## (?{code}) を使って >>695 の置換
if ( "ybrybrb" =~ /
\A
(?|
(?<赤>r)(?{ "aka"; })
| (?<青>b)(?{ "ao"; })
| (?<黄>y)(?{ "ki"; })
)*
brybrb ## バックトラックに対応出来るか試す
\z
/x )
{ print "true. Color <${1}> is <${^R}> .\n"; } else { print "false.\n"; }
## 結果: true. Color <r> is <aka> .
## バックトラックの対応、成功
if ( "ybrybrb" =~ /
\A
(?|
(?<赤>r)(?{ "aka"; })
| (?<青>b)(?{ "ao"; })
| (?<黄>y)(?{ "ki"; })
)*
brybrb ## バックトラックに対応出来るか試す
\z
/x )
{ print "true. Color <${1}> is <${^R}> .\n"; } else { print "false.\n"; }
## 結果: true. Color <r> is <aka> .
## バックトラックの対応、成功
717デフォルトの名無しさん
2018/11/13(火) 21:32:36.34ID:QabZTjVa # 仲間外れを探せ
if ("\x{1990}" =~ /
\N{U+1990}
#\N{1990}
#\N{NEW TAI LUE LETTER HIGH NA}
/x){ print "match.\n"; } else { print "false.\n"; }
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:07.07ID:Hh1ptiAj 717
719デフォルトの名無しさん
2018/11/14(水) 14:37:49.07ID:duOGmOFb ワロタw
720デフォルトの名無しさん
2018/11/14(水) 18:45:40.17ID:I91AeKub このクイズだか検証だかよくわからんの書き連ねてるのは何なの?
一人で無意味に書き連ねてるの?誰かとやりとりしてるの?
一人で無意味に書き連ねてるの?誰かとやりとりしてるの?
721デフォルトの名無しさん
2018/11/14(水) 23:41:31.78ID:cpUdYoRF 正規表現の勉強をしながら気付いたことをメモってるだけです
基本的には一人でやってます
仲間が欲しい...
基本的には一人でやってます
仲間が欲しい...
722デフォルトの名無しさん
2018/11/14(水) 23:44:34.67ID:CNd6PM4x ここはお前のチラシの裏なのか
ある程度まとまってんならともかくメモ書きなら他所でやれよ
ある程度まとまってんならともかくメモ書きなら他所でやれよ
723デフォルトの名無しさん
2018/11/15(木) 00:11:59.19ID:Ow4iH1sO 需要ないかな?無いならやめます
724デフォルトの名無しさん
2018/11/15(木) 22:32:34.48ID:IM0UsOCP 無いよ
725デフォルトの名無しさん
2018/11/16(金) 17:20:00.59ID:eADG8kUk bregonig.dll の (?a)\w の処理速度が遅い
(?u)\w と同じ速さ
\s や \d や [a-zA-Z_] より4倍の遅い
改善の余地ありそうだね
(?u)\w と同じ速さ
\s や \d や [a-zA-Z_] より4倍の遅い
改善の余地ありそうだね
726デフォルトの名無しさん
2018/11/17(土) 03:22:15.33ID:YADh6pBI ## (?(R1)yes|no) のサンプルコード
if ("abc23yz" =~ /
\A
( # $1
( # $2
a(?1)z
|
b(?2)y
|
c(?(R1)1|2)(?(R2)3|4)
) # $2
) # $1
/x){ print "match. <$&> \n"; } else { print "false.\n"; }
# 結果: match. <abc23yz>
# aとzの間にあるcは (?1) の中でマッチしているが
# bとyの間でもあるため (?2) の中でもある
# この場合はcを直接覆っている (R2) だけがyesになる
# 直接でない (R1) はnoになる
if ("abc23yz" =~ /
\A
( # $1
( # $2
a(?1)z
|
b(?2)y
|
c(?(R1)1|2)(?(R2)3|4)
) # $2
) # $1
/x){ print "match. <$&> \n"; } else { print "false.\n"; }
# 結果: match. <abc23yz>
# aとzの間にあるcは (?1) の中でマッチしているが
# bとyの間でもあるため (?2) の中でもある
# この場合はcを直接覆っている (R2) だけがyesになる
# 直接でない (R1) はnoになる
727デフォルトの名無しさん
2018/11/17(土) 12:49:09.25ID:Oiq/x6oK いつまで続くの?
728デフォルトの名無しさん
2018/11/21(水) 19:34:31.80ID:CU3gUCH4 ●Regular Expressionの使用環境
C#
●検索か置換か?
置換
●説明
先頭の全角スペースのみを置換したい
先頭の全角スペースは1文字の場合もある
●対象データ
ああああ あ あ あ あ あ
●希望する結果
空空空ああああ あ あ あ あ あ
C#
●検索か置換か?
置換
●説明
先頭の全角スペースのみを置換したい
先頭の全角スペースは1文字の場合もある
●対象データ
ああああ あ あ あ あ あ
●希望する結果
空空空ああああ あ あ あ あ あ
729デフォルトの名無しさん
2018/11/21(水) 23:39:43.26ID:UsYfXb0d >>728
Regex.Replace(str, @"(?<=^\s*)\s", "空");
Regex.Replace(str, @"(?<=^\s*)\s", "空");
730デフォルトの名無しさん
2018/11/21(水) 23:41:52.91ID:UsYfXb0d あ全角スペースか
\sを全角スペースに変えて
\sを全角スペースに変えて
731デフォルトの名無しさん
2018/11/22(木) 01:15:55.43ID:YNRtrxPu 可変長の戻り読みは便利だけどコールバックで処理するのが普通じゃないかな
https://ideone.com/4l8abQ
https://ideone.com/4l8abQ
732729
2018/11/22(木) 03:09:11.69ID:YAZbwzDX >>731
たしかにそっちの方が倍くらい速かった
ちなみに正規表現関係ないけど
var trimed = str.TrimStart(' ');
var replaced = new string('空', str.Length - trimed.Length) + trimed;
とか
var sb = new StringBuilder(str);
for(int i = 0; i < sb.Length; i++) if (sb[i] == ' ') sb[i] = '空'; else break;
とかにするとさらに10倍以上速かった
正規表現使わないでもいい時はなるべく使わないほうがええね
たしかにそっちの方が倍くらい速かった
ちなみに正規表現関係ないけど
var trimed = str.TrimStart(' ');
var replaced = new string('空', str.Length - trimed.Length) + trimed;
とか
var sb = new StringBuilder(str);
for(int i = 0; i < sb.Length; i++) if (sb[i] == ' ') sb[i] = '空'; else break;
とかにするとさらに10倍以上速かった
正規表現使わないでもいい時はなるべく使わないほうがええね
733デフォルトの名無しさん
2018/11/22(木) 11:43:47.30ID:sD3Vu3lJ >>729-732
どうもありがとうございました
どうもありがとうございました
734デフォルトの名無しさん
2018/11/26(月) 03:08:54.11ID:bvNwlvbS Regex.Replace(str, @"\G ", "空");
でもいけるよ
でもいけるよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 【DAZN】ワールドカップ欧州予選総合 ★5
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【J SPORTS】FIFA U-17ワールドカップ ★10
- 「世の中、バカが多くて疲れません?」👉1991年日本人大発狂 [543236886]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 自閉症が「んなっしょい」と連呼するお🏡
- 寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い寒い
- マクラーレン、女性ドライバー3名を加入 [462275543]
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
