[過去ログ] Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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) → 文法エラー
ガードが鉄壁ですごい、ほんと良く出来てるな〜
上下前次1-新書関写板覧索設栞歴
あと 309 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s