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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
424
(1): 2018/02/16(金)14:15 ID:CPKH/1dQ(1/2) AAS
それ文末以外消えるけどええのん
425
(2): 421 2018/02/16(金)15:30 ID:mPXTHkFg(1/2) AAS
>>424
文中は消えていいんじゃない?

>>420
> [うう][ええ]そそそそそ
> そそそそそ

ってあるし
あ、

> ※先頭じゃない文中の[はは]は残したい

この[はは]はマッチしたらダメなのか
これ例の中においてくんないかなー
省14
426: 421 2018/02/16(金)15:30 ID:mPXTHkFg(2/2) AAS
>>425
[たた]ななはは[まま]やや
の[まま]を含めずマッチしたい([たた])ならかなり複雑になりそうでちょっといますぐは思いつかないや

それってつまり
 行頭[
 行頭から括弧が繋がり、且つ、行末]を含めない範囲
なら
[たた][なな][はは][まま][やや]
のマッチが
→[たた][なな][はは][まま]
省1
427: 2018/02/16(金)15:55 ID:CPKH/1dQ(2/2) AAS
>>425
カッコ内も同じ文字が重なるように読めるしなー
まぁこういう仕様をちゃんと書けるならそもそも正規表現で困らんのだろうけど
428: 2018/02/16(金)15:57 ID:CWd36B/o(2/3) AAS
orz...
試したら確かに

>>422 だと先頭が残りますネ
429
(2): 2018/02/16(金)16:00 ID:CWd36B/o(3/3) AAS
AA省
430
(1): 421 2018/02/16(金)16:24 ID:rLsYeXBU(1/2) AAS
>>429
[たた]ななはは[まま]やや
は?
[たた][なな][はは][まま][やや]
はどーなんの?

[あいう[かきく]たちつ]
[あいう[かきく]]たちつ
とか括弧内包の場合どーなんのとかも

あと行末も係わるんだから、例の同じ行に余計な文字列入れないで(たぶんこの件では大過ないと思うけど)
431: 421 2018/02/16(金)16:25 ID:rLsYeXBU(2/2) AAS
>>430
内包無視するとしたら
(?<=^)(?:\[[^\[]*?\])+(?!$)
ところによって(?<=(?:^|\n))(?:\[[^\[]*?\])+(?!(?:\n|$))
かね

>>429を満たし、
[たた]ななはは[まま]やや
→[たた]
[たた][なな][はは][まま][やや]
→[たた][なな][はは][まま]
省6
432: 2018/02/16(金)16:26 ID:dBpGhFbZ(1/2) AAS
仕様に不備があると作る方は大変だな
433
(3): 2018/02/16(金)17:00 ID:Q4bZpk0j(1/2) AAS
正規表現の使いどころってどんなところですかね?
普通レベルのプログラマから見ると可読性低くて保守性も悪い気がする
タグの要素を最初にバッと配列に入れやすいとか?
434
(1): 2018/02/16(金)17:11 ID:GgVv8IsN(1/2) AAS
>>433
可読性低くて保守性も悪いっていうのは本当にその通り
プログラミングで使うならまずは(正規表現が非常に直感的でない限りは)正規表現以外の選択肢を考えるべきで, それが可読性や保守性を上げないとなった上で正規表現が選択されるのがよい
勿論保守性や可読性を気にしないワンライナーとかであれば気にする必要はないが

あとはエディタやgrepなんかだと他に有力な選択肢がないから正規表現になる
435
(1): 2018/02/16(金)17:18 ID:h4N2NTdR(1) AAS
単純に、
(?m)^\[.*\](.*)
じゃだめなん?
436
(1): 2018/02/16(金)17:23 ID:GgVv8IsN(2/2) AAS
>>435
全然ダメ
入力が

[abc]def[ghi]

なら全文がマッチする(量化指定子*はgreedyだから末尾手前まで全部食う)
437
(1): 2018/02/16(金)17:34 ID:dBpGhFbZ(2/2) AAS
>>433
実行環境によってだけどコンパイルされて速くなったりするので
さくっと一行で書けるならメリットはあるよ
プログラム書いた方が良い場合もある
ケースバイケース
438: 2018/02/16(金)18:30 ID:Q4bZpk0j(2/2) AAS
>>434
>>437
レスサンクスコ
今Pythonで作られているパッケージを保守してるんだけど、お約束のように最初に正規表現で抜いて後で編集してる
最初のパフォーマンスを考慮してるのかもだけど、読みにくくて一般人にはいいことないよ
439: 2018/02/16(金)19:13 ID:M8XJLm2H(1) AAS
>>433
ワンライナーで可読性保守性とか気にしない
ストリームエディタで検索、ログの抽出が最たる用途じゃないか
440: 2018/02/16(金)20:46 ID:d9VDf+sb(1) AAS
>>420
$# 「行頭部分にある 1 個以上の \[[^\]*\] を削除」と初見で思ったのだが、違うのか?
$# それとも C# でどうやるかわからないという話? 申し訳ないが C# は知らない。
$
$cat a_in
[ああ]おおおおお
[いいい]こここここ
[うう][ええ]そそそそそ
ととととと[たた]
[ええ]あああ[いい]うう
省13
441
(1): 2018/02/16(金)21:24 ID:nYHQACKk(1) AAS
>>436
Non-greedy(最短)なマッチ使えばいいだけじゃね?
使えない環境なの?
442: 2018/02/17(土)05:30 ID:xZfN9pA3(1) AAS
何を望んでいるのかを明確にする方が先かと……
443: 2018/02/17(土)11:13 ID:sN1lrGX4(1) AAS
>>441
none-greedyじゃ先頭しかマッチしない

[abc][def]ghi

の[abc]しか除去出来ない
反復適用すればいいというならその通りではあるが
444
(1): 2018/02/17(土)11:27 ID:IU1gsQgu(1/4) AAS
[ab][cd][ef]ああ

これは、繰り返しが入っている。
N回削除する必要がある

[ab][cd][ef]ああ
[cd][ef]ああ
[ef]ああ
ああ

[〜] でグループ化すべき
445: 2018/02/17(土)12:22 ID:IU1gsQgu(2/4) AAS
/^\[[^\]]*\]/ =~ "[ab][cd]ああ"
$& #=> [ab]

Ruby で書いた。
行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある
446: 2018/02/17(土)12:32 ID:IU1gsQgu(3/4) AAS
/^\[[^\]]*\]/ =~ "[ab][cd]ああ"
$& #=> [ab]
$' #=> [cd]ああ

/^\[[^\]]*\]/ =~ $'
$& #=> [cd]
$' #=> ああ

/^\[[^\]]*\]/ =~ $'
#=> nil

Ruby で書いた。
行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある
省2
447: 2018/02/17(土)12:42 ID:IU1gsQgu(4/4) AAS
/^(\[[^\]]*\])+/ =~ "[ab][cd]ああ[ef]"
$& #=> [ab][cd]

やったー。Ruby で出来た

\[ があり、\[ 以外の文字が、0以上続いて、\] がある。
これをグループ化して、1回以上繰り返す

ただし、グループ外に、先頭からを指定する
448: 2018/02/18(日)07:04 ID:4dAbe4pu(1) AAS
正規表現で使用される記号があるとワケわからなくなってくるから
適当な記号、例えばQなどに置き換えて試行錯誤して最後に元の記号に戻したりする
449: 2018/02/18(日)11:53 ID:QWcmX5lk(1) AAS
余計なバックトラックを防ぐために
$s = qr/(?>\s*)/
ってやってパターンに埋め込むことならある。
450
(1): 2018/02/23(金)22:29 ID:vtIXFjR6(1) AAS
(?s:^(?=.*ス)(?=.*プ))
CHmateで使う正規表現らしいんだけど最初の

(?s:"

の意味が検索してもわからないのですが教えていただけないでしょうか
451
(1): 2018/02/23(金)22:45 ID:0zsudQHR(1) AAS
>>450
シングルラインモード
>>348
452: 2018/02/24(土)00:35 ID:bvxyjlLF(1) AAS
>>451
ありがとございます
確認してなんとなく分かりました

ところでこの正規表現の場合(?s:)って名前には改行はないので不要じゃないかと思ってしまうのですがどういう目的で使われているのでしょうか
453: 2018/02/24(土)01:37 ID:d6NztqhC(1) AAS
書いたヤツの趣味じゃ?
しかもかなりてきとう

ワッチョイ名前ならおそらくドコモ判別?でもプだけではない2chスレ:mango
先読みなんてコストかけなくてもKOROKORO AAはSd固定
改行を無理矢理入れ込んでというシチュエーションでスとプでねらい打ちも違和感

本文で^(?=.*A)の類を使うとレス数後半のコストはかなりのもの
これは名前だから大したことにはならないけど

深謀遠慮があるのかも知れんがそれこそ書いた本人へ
454
(1): 2018/02/27(火)15:54 ID:2v1tH105(1) AAS
C#で、
var rgx = new Regex("(.)+");
var str = "こんにちは。";
Console.WriteLine(rgx.Replace(str, "$1"));
とすると「。」が出力されるのですが、なぜですか?
$1は「。」になるのですか?「こ」だと思ったのですが、違いますか?
455
(2): 2018/02/27(火)16:08 ID:u9k8VAiO(1/2) AAS
>>454
理由はここ読んで
外部リンク[html]:www.regular-expressions.info

短い説明は↓ここでも出てくる
外部リンク:regex101.com
456: 2018/02/27(火)17:03 ID:VEiALCIH(1) AAS
どれどれ…
javascript
'こんにちは。'.replace(/(.)+/, '$1');
=> "。"

ほんまや!知らんかった
457
(1): 2018/02/27(火)19:34 ID:LuvO3mbW(1) AAS
>>455
配列に入れてくれればいいのに
って思ったことあるわ
458: 2018/02/27(火)21:09 ID:PLAOSS1/(1) AAS
Ruby でも、

'こんにちは。'.gsub(/(.)+/, $1)

#=> "。"
459: 2018/02/27(火)22:02 ID:u9k8VAiO(2/2) AAS
>>457
.NETはCaptureCollectionってのに入れてくれるみたいよ

ただフルマッチとキャプチャリンググループと両方1度に必要なければ
/(.){1}/みたいに正規表現変えれば配列に入れられるよね
460
(1): 2018/02/28(水)21:03 ID:V9ixSdqS(1) AAS
>>455
すみません。
教えて頂いたサイトを見ても分かりません。
簡単に解説をお願いしたいのですが。
461: 2018/02/28(水)22:05 ID:pxJOkH76(1) AAS
単純に最後にマッチした部分ってことじゃないかな。赤ラクダにそう書いてある。
C# は知らない。誰か翻訳してあげて。
462
(1): 2018/03/01(木)00:07 ID:UkKloD3U(1/3) AAS
>>460
キャプチャグループに量指定子がついてるとそのキャプチャグループの箇所に複数回マッチする可能性があるよね。
んで複数回マッチした場合は最後にマッチしたやつがそのキャプチャグループに入ってるってこと

"こんにちは。”に対して、/(.)+/でマッチをかけると
最初にピリオドが“こ”にマッチしてそれをグループ1に入れて
次に+を見てまたマッチするか繰り返す
今度はピリオドに”ん”がマッチするからそれをグループ1に入れて、、、
あとは繰り返し
“こんにちは。”が/(.)+/にフルマッチした時点でグループ1に入ってるのは”。”
463
(1): 2018/03/01(木)00:17 ID:ikcjc59H(1) AAS
/(.+)/ =~ 'こんにちは。'
$1 は、'こんにちは。'

/(.)+/ =~ 'こんにちは。'
$1 は、'。'

上は、1回しかマッチしていない、最長マッチ。
下は、1文字のマッチで、6回マッチして、最後のマッチが、'。'
464
(1): 2018/03/01(木)00:55 ID:UkKloD3U(2/3) AAS
>>463
うーん、1文字マッチで6回マッチするのはどっちも同じじゃない?
キャプチャグループに入れる回数の違い
465: 2018/03/01(木)02:58 ID:ksBcbegD(1) AAS
>>462
なるほど。
466: 2018/03/01(木)05:29 ID:AobHbkwq(1) AAS
詳細 ○○表現
尼での評価がよかったので買ってみたが全然
リファレンスにもならない
やっぱり海外の訳本はだめだ、すくなくとも自分には良書でなかった
467: 2018/03/01(木)15:52 ID:UkKloD3U(3/3) AAS
フクロウ本のことかな
中の仕組みを理解するための本であって
リファレンス本でも入門書でもないからね
468: 2018/03/02(金)09:24 ID:O5NS5hyG(1) AAS
>>464
そういうマッチャー自分で作る時はスキップするよう作るけど
正規表現エンジンはしないのか
複雑だとやってられないとかか
469
(1): 2018/03/02(金)13:01 ID:btKfsNEv(1) AAS
試しに
for pat in '([cd])+' '(.)+' '.*(.)' ; do perl -Mre=debug -e '$pat = shift; print "abcd" =~ /$pat/ ,"\n" ;' "$pat" ; done
ってやってみた。最適化してそうだ。.*(.) は意味的には同じだと思うがバックトラックの分だけ不利。
Perl のソースコードを確認したわけではないので断定はしかねるが。
470: 2018/03/03(土)08:34 ID:ooAwkD9v(1) AAS
今はサンプルだからいいけど
長大な文章じゃスキップで最適化しないとやってられないよな
471: 469 2018/03/03(土)13:47 ID:GJwmn3yF(1) AAS
個人的には (.)+ と書くべき理由が思い当たらない。
472: 2018/03/04(日)15:44 ID:QUMop1Gl(1) AAS
正規表現とギターの速弾きが出来る奴は賢いと尊敬している
473
(1): 2018/04/06(金)19:38 ID:U5C29TI1(1) AAS
複数のSQL文の書かれているSQLファイルから、DBの処理単位でSQL文を逐次取り出す正規表現が書きたいのですがどうしたら良いですか?
厳密なものでは無くても良くて英文字から始まってセミコロンで終わるというもので良いのです。
ただ、SQL分は行頭から始まるとは限らず、セミコロンの直後に次のSQL文が始まったり、空白文字などがあってからSQLの文が始まったりすることもあります。
また、文中に出てくるエスケープされたセミコロンや文字列中のセミコロンは文末の対象になって区切られては困るのでそれはスキップして評価がしたいです。
474
(1): 2018/04/06(金)22:09 ID:witjIkkr(1) AAS
文字列の内外を判断するの難しい・・・・難しくない?
475: 2018/04/07(土)12:21 ID:BRhgC8GS(1/2) AAS
multilineのオプション付けて
;でsplitしただけじゃだめなん
476: 2018/04/07(土)12:23 ID:BRhgC8GS(2/2) AAS
>>474
それが含まれる時点で無理に正規表現一行で書くのはいつもあきらめる
477: 2018/04/07(土)12:30 ID:LBmouzwW(1) AAS
ちゃんとやるなら文字列中のエスケープされたシングルクォートとかも処理しないとダメだし正規表現でやるのはすごく大変だと思う
478: 2018/04/07(土)12:57 ID:wQfk+GMe(1) AAS
正規文法ではかなり厳しい印象で, BNFの管轄だと思うおよね
479: 2018/04/08(日)06:27 ID:1mmlbc0v(1/2) AAS
1. ; で分割して、配列に入れる
2. 配列の各要素から、余分なものを削除する

2 のルールを、厳格に決めればよい

Ruby で作る方が速い
480
(1): 2018/04/08(日)11:04 ID:YK+KPtHu(1) AAS
正規表現は置いといて
DB用意して""で囲まれた部分をテキストとしてDBに入れながらID取得
本文側はIDに置き換える
あとは正規表現を使っても使わなくてもいいが;で分割
最後にまたID部分に元のテキストを流し込む
481: 2018/04/08(日)13:00 AAS
そこであきらめんなよ!
正規表現だけで乗り切ろうという気概を見せろよ!
482: 2018/04/08(日)13:08 ID:wO4VFvVz(1) AAS
(シングル|ダブル)クオート文字列って正規言語で表せる範囲にあるんかね?
文脈自由言語では表せるけど
483
(1): 2018/04/08(日)13:27 ID:aPw27k7Z(1/2) AAS
どの正規表現がつかえるのかがわからん
環境を明示してくれないとなー
484: 2018/04/08(日)18:18 ID:1mmlbc0v(2/2) AAS
/\"([^\"]*)\"/ =~ 'a"bc"d'
$1 #=> bc

"〜" で、〜には、" 以外の文字列が入る
485: 2018/04/08(日)18:28 ID:aPw27k7Z(2/2) AAS
"のエスケープや'もあるし
'a"b\"c'd"e'
486
(1): 473 2018/04/09(月)10:33 ID:Q+cYQrXX(1) AAS
沢山ご回答ありがとうございます。
皆さんのご意見を伺った限り、やはり正規表現一本では難しそうですよね…

はじめは前処理で既成のsqlパーサなどを通して、きれいに整形して別ファイルに保存してから処理する方法も検討していましたが、
できれば現物ファイルを生のまま読み込んで正規表現でなんとか行けないかなと思い試行錯誤していて、
うまい書き方が全然できなくてここに書き込みさせて頂いた次第です。

>>483
使用できる正規表現はPCREです。

具体的にはPHPで省メモリで巨大なSQLファイルを実行する仕組みが作りたくて
相談させてもらいました。自分の頭の中のアイデアでは
 1.fileをbufsize分readして
省7
487: 2018/04/09(月)12:10 ID:M/BmQ9Z1(1) AAS
"'", "\""
'"', '\''

クォーテーション内にクォーテーションがある、入れ子状態が難しい。
クォーテーションを、\ でエスケープしたりもあるし

XML Parser とか、プログラム実行の命令木とか、解析ツールを使わないと無理。
プログラミングで何とかできる、範囲を超えている

そもそも、入れ子状態にどういうパターンがあるのか、
全列挙して考えるのが、非常に難しい

入れ子の入れ子とか、再帰的に入れ子するかも知れないし
488: 2018/04/09(月)17:17 ID:4vJW9Ikj(1/3) AAS
>>486
こういう感じでどうだろう
[a-zA-Z](?:\\"|\\'|[^"';]|(["'])(?:\\\1|(?:(?!\1).))*(?<!\\)\1)*;
英数字で始まって、\"や\'は許す;で終わる文字列
頭に^\s*を付けたほうがいいかもしれないけど
文字列は、" ' "、' " '、" \" "、' \' 'は許す( ; もOK)

ところで、" ' " ' "とは書けるんだっけ?
こういう括弧のネストが可能なら、正規表現の方もネスト構文や条件構文を使わないといけないけど
(俺は使ったことはないけど)
489: 2018/04/09(月)17:44 ID:4vJW9Ikj(2/3) AAS
ただし↑は、コメント文はないものとしてのこと
490: 2018/04/09(月)19:00 ID:4vJW9Ikj(3/3) AAS
さっそくダメだった
"\\"
491
(1): 2018/04/10(火)00:21 ID:oEQHPFsL(1) AAS
仕様を確定させるのが難しい。
単なるテキストには、ルールが無いだろ

XML とか、プログラム言語には、仕様があって、
ルール違反の書き方を許さないから、プログラムで判定できる

だから、まずこう書いたらエラーにする、という仕様を決めるべき
492: 2018/04/10(火)01:17 ID:IM3kTV8x(1) AAS
>>491
外部リンク[html]:ronsavage.github.io
こいつのcharacter string literalとか読め
ちゃんと規格化されてるんだからさ
その上で正規表現で書くのは難しいって話
493: 2018/04/11(水)13:14 ID:p/bo/Ju1(1) AAS
試しに Perl でやってみた。最も楽観的な想定ならこのくらいまでは手抜きできる。

use strict;
my $comment = qr/(?:--.*?\n)/ ;
my $literal_ch = qr/(?:\'\'|[^\'])/ ;
my $ch_str_literal = qr/(?:\'(?>$literal_ch*)\')/ ;
my $other_ch = qr/[^\';]/ ;
my $some_str = qr/(?:$comment|$ch_str_literal|$other_ch)/ ;
my $statement = qr/(?:$some_str*;)/ ;
my $text = '';
while (<>){ $text .= $_; while ( $text =~ s/^$statement// ){ print("Found:$&\n") }}
省6
494: 2018/04/11(水)14:19 ID:jfPKheqL(1) AAS
仕様通りのParser とか、構文解析ツールが必要

それらを使って出力された、抽象構文木を使うのがよい
495
(2): 2018/05/04(金)19:16 ID:kVAlpXQV(1) AAS
★タイトル
★★タイトル

上のものにマッチさせたいのですが、
^★.*$
としてしまうと、下まで含まれるのですが、どうしたらいいでしょうか
496: 2018/05/04(金)19:36 ID:eD01Afe2(1) AAS
>>495
^★(?! ★).*$
497: 495 2018/05/04(金)21:14 ID:L0LZvRGB(1) AAS
半角SP紛れ込んだわ

^★(?!★).*$
498: 2018/05/05(土)05:47 ID:iaqxNbgL(1/2) AAS
↑解答どうも
できなかったです
ちなみにmeryというテキストエディタの正規表現です
何の言語かはわかりませんが
499: 2018/05/05(土)06:26 ID:O3up5M1Q(1) AAS
外部リンク:regex101.com

鬼雲みたいだし動くと思うんだけど, 先頭とか末尾に余計なスペース入ってない?
500: 2018/05/05(土)19:07 ID:iaqxNbgL(2/2) AAS
↑ありがとうございます。行けました。
.*の前に否定を入れればいいんですね
501: 2018/05/05(土)21:57 ID:+tF+3NSL(1) AAS
鬼雲…だと…?!
502: 2018/05/07(月)13:28 ID:XtvW294Z(1/2) AAS
正規表現をちゃんと論理的に導きたいと思って参考になる本を
買ったら必要な予備知識に群とか環が出てきて即諦めた
正規表現周りの開発をしてる人達はすごい人達なんだなぁ
すごさを直で実感出来た
503: 2018/05/07(月)14:59 ID:QMgv+0U5(1) AAS
用語に慣れてないだけだろ
やってることは大したことじゃない
504: 2018/05/07(月)18:08 ID:XtvW294Z(2/2) AAS
まぁ膨大な時間と労力をかければ自分にも分かるんだろうけど
現実的じゃないんだよなぁ(人の何倍も時間かかるだろうし)

これからは正規表現技術者の努力に感謝しながら正規表現を
使おうと思います(^^)>
505
(1): 2018/05/14(月)07:31 ID:0PI4I4+g(1) AAS
JavaScriptによる正規表現チェッカー

くっそ長いので短縮
外部リンク:goo.gl

外部リンク:fatiherikli.github.io
o54++44Oe44OD44OB44OG44K544OIICovXG5cbi8vIOato+imj+ihqOePvlxudmFyIHJlID0gbmV3IFJlZ0V4cCgv
XFxkKy9nKTtcblxuLy8g44OG44Kt44K544OIXG52YXIgdGV4dCA9IChmdW5jdGlvbiAoKSB7LypcbmFhYVxuYmIx
MmJcbmM1NjdjYzg5XG4qL30pLnRvU3RyaW5nKCkuc3BsaXQoL1xcbi8pLnNsaWNlKDEsLTEpO1xuXG5jb25zb2x
lLmxvZyhcIlJlZ0V4cDpcIiwgcmUudG9TdHJpbmcoKSlcbmNvbnNvbGUubG9nKFwiVGV4dDpcIiwgdGV4dCk7XG5c
bnRleHQuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgY29uc29sZS5sb2coXCJsaW5lOlwiLCBsaW5lKTtcbiA
gICB2YXIgcmVzdWx0ID0gbGluZS5tYXRjaChyZSk7XG4gICAgaWYocmVzdWx0KVxuICAgICAgICBjb25zb2xlLmxv
省1
506
(1): 2018/05/15(火)21:31 ID:xchMEgzc(1) AAS
ちょっと修正
外部リンク:goo.gl
507: 2018/05/19(土)02:57 ID:F73VBvr9(1) AAS
Linuxに触れるまで正規表現に方言があるなんて知らなかった
基本正規表現だの拡張正規表現だの
vimの置換で悩んでたら原因がエスケープの有無が原因とかもうね
ある程度は使えるが先読みとか後読みとか僅かでも深入りすると余計に混乱する
508: 2018/05/19(土)11:08 ID:rxs2hai/(1) AAS
小さい世界で囲い込まれてれば楽だよな
ただし何かの拍子ではみ出した時に世界の広さを知って己の無力さを痛感する
よくあるパターン
509: 2018/05/23(水)19:28 ID:Au5e7VGg(1) AAS
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

QBPEH
510: 2018/05/24(木)10:47 ID:cPlRxlDn(1) AAS
QBPEH
511
(1): 2018/05/25(金)13:52 ID:X/Hngdv+(1/2) AAS
HTMLの解析を正規表現でやりたいのですが

<a href="xxxxx"><img src="yyyyy" /></a>

という風に、<a> で括られた img の src だけを抽出したいんですけど
どうしたらいいのでしょう。

<a> で括られてない

<img src="yyyyy" />
省1
512
(1): 2018/05/25(金)13:53 ID:X/Hngdv+(2/2) AAS
あ、すみません

<a href="xxxxx"><img src="yyyyy" /></a>
<a href="xxxxx">あああ<img src="yyyyy" /></a>
<a href="xxxxx"><img src="yyyyy" />いいい</a>
<a href="xxxxx">あああ<img src="yyyyy" />いいい</a>
<a href="xxxxx"><img src="yyyyy" /><div>あああ<div></a>

みたいに、<a> の中は <img> 以外のゴミも入ってきます。
※ゴミは無視したい
513
(1): 2018/05/25(金)14:10 ID:dgrSTrid(1) AAS
>>512
^<a\b.+<img src="([^"]+)".+</a>$

$1
514: 2018/05/25(金)16:20 ID:fgSfMucA(1) AAS
>>513
<a href=""></a><img src="1.jpg"><a href=""></a>
515: 2018/05/25(金)20:00 ID:OUvr9ihJ(1/3) AAS
頑張ってみてもこの程度が限界
外部リンク:regex101.com

で, >>511がHTMLの解析を正規表現だけでやる理由は何だ?
Pythonのhtml.parser, RubyのNokogiri, PHPならGoutter, それ以外の言語でも間違いなくHTMLパーサは誰かしら作ってる
そんな中で何故正規表現だけで?ぶっちゃけこういう用途には向いてない, というかHTMLの構文規則は正規言語を超えるんだけど, 分かってる?
516: 2018/05/25(金)20:29 ID:rhJz1xPv(1) AAS
パーサかましてXPathで必要な情報だけ抜くのが基本だしな
どうしても使えないっていう理由があるなら仕方ないけど
517
(1): 2018/05/25(金)21:21 ID:lQiYp+1p(1) AAS
鬼雲限定
<a (?~</a>)<img src="([^"]+)"[^>]*>(?~<a )</a>
518
(1): 2018/05/25(金)22:28 ID:Cqv+6nk2(1) AAS
■変更前
004a34
A521n2
785b66

■変更後
0049934
99521992
7859966
----------------------

数値以外を99に置換したいです
省1
519
(1): 2018/05/25(金)23:31 ID:gd/oxjVv(1) AAS
木構造のものは、正規表現じゃ無理

1< 2< abc 3> 4>

2<からの最短マッチで、対応する3>を取れるけど、
1<からの最短マッチで、対応する4>を取れない。
3>にマッチしてしまうから

1< 2< 3< abc 4> 5> 6>

これでも、2<と5>をマッチさせられない。
最長・最短マッチでも、マッチしない
省2
520: 2018/05/25(金)23:43 ID:OUvr9ihJ(2/3) AAS
>>518
数値以外と簡単に言うが改行文字や空白等の扱いはどうするんだ
変換対象文字をちゃんと明示しないと

/[^0-9]/99/g

こんなもんが欲しいわけではあるまい
とりあえずASCII印字可能文字に限るなら

/[\x21-\x2F\x40-\x7E]/99/g

だが当然マルチバイト文字は対象外
521: 2018/05/25(金)23:44 ID:OUvr9ihJ(3/3) AAS
\x40じゃなくて\x3Aだわ
522: 2018/05/26(土)10:42 ID:oqQZJpqn(1) AAS
>>517
非包含オペレータか
523: 2018/05/26(土)17:59 ID:xbMfHZm2(1) AAS
AA省
1-
あと 479 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.032s