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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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
1-
あと 289 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.021s