[過去ログ] Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
892
(1): 2019/07/17(水)09:46 ID:u050lnGw(1/3) AAS
話を単純化すると、
1. ある文字、例えば@ から、次の@ の直前の文字まで
2. 先頭が、@ でなければ、先頭から、@ の直前の文字まで。
つまり、先頭が、@ でなければ、先頭文字を、@ とみなして処理する

つまり、ルール1・2は、同時に適用させず、先にルール1を適用し、
ルール1に適用しないものだけを、ルール2に使う

(^|[@;])[^@;]*

だから、この正規表現がおかしい。
定義があいまいになる、解釈を含んでいる!

OR の部分が、並列ではない。
ルール1を優先すべき!
893
(1): 892 2019/07/17(水)09:51 ID:u050lnGw(2/3) AAS
(^|[@;])[^@;]*

OR を使うと、両方に該当する場合に、どちらの処理がされるのか、あいまい!
つまり、先頭文字が@; の場合に、両方に該当するので、処理があいまい!

A|B
A, B 両方に該当する場合に、A,B どちらの処理がされるのか、あいまい!
895
(2): 877 2019/07/17(水)10:06 ID:u050lnGw(3/3) AAS
>>889
Ruby で、

str = "@time;prop1:style1;prop2:style2"

re = /((^|[@;])[^@;]*)/

p results = str.scan( re )
# [["", ""], [";prop1:style1", ";"], [";prop2:style2", ";"]]

[ 0 ]がマッチした部分、[ 1 ]がキャプチャー部分

>>862
の、["", ";prop1:style1", ";prop2:style2"] と同じ結果

# * を、+ に変えた。
re_2 = /((^|[@;])[^@;]+)/

p results_2 = str.scan( re_2 )
# [["@time", "@"], [";prop1:style1", ";"], [";prop2:style2", ";"]]
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.219s*