[過去ログ] Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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省
524: 2018/05/26(土)19:07 ID:vUfk79H6(1/2) AAS
外部リンク:regex101.com
なぁこれメンテしたいか?というか出来るか?なぁ?
(?i:<a(?:\s+[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?)*>)
((?:
(?i:<img(?:\s+(?:src="([^"]+)"|[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?))*(?:\s*\/)?>)
|(?i:<([a-z][a-z0-9]*)(?:\s+[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?)*>(?1)<\/\3>)
|(?i:<[a-z][a-z0-9]*(?:\s+[a-z][a-z0-9]*(?:=(?:"[^"]*"|'[^']+'))?)*\s*\/>|.*?))*)
(?i:<\/a>)
525: 2018/05/26(土)19:08 ID:vUfk79H6(2/2) AAS
アップデートするの忘れてたわ
外部リンク:regex101.com
526: 2018/06/23(土)01:47 ID:19kQ7FFf(1) AAS
のりこめー
【IT】プログラマーが正規表現を使いこなすメリットとは?
2chスレ:bizplus
527: 2018/06/24(日)13:33 ID:wSHpLaLO(1/2) AAS
文字列の中から数字13桁(それ未満でも超えてもNG)を抽出するにはどうしたらいいでしょう
JANコードらしきを抜き取りたいのです。
候補を抽出してから後でチェックデジット計算しますので
数字13桁のみで大丈夫です。
528: 2018/06/24(日)15:06 ID:F1zD07yq(1) AAS
数字40桁くらい連続してたらどうする?
529: 2018/06/24(日)16:56 ID:wSHpLaLO(2/2) AAS
40桁はJANコードじゃないので除外したいです
530(2): 2018/06/24(日)17:16 ID:1DBcJ9cD(1) AAS
\b[0-9]{13}\b
とか
(?<![0-9])[0-9]{13}(?![0-9])
とか
携帯だから試してない
531(1): 530 2018/06/24(日)20:41 ID:LPLL+qJx(1) AAS
先頭と末尾も考慮すると
外部リンク:regex101.com
(?:(?<=[^0-9])|^)[0-9]{13}(?:(?=[^0-9])|$)
ただかなりバックトラックするから性能は悪い
どうせチェックディジット確認するなら13桁以上で全抽出して桁数チェック追加した方がマシに見える
外部リンク:regex101.com
[0-9]{13,}
532: 2018/06/24(日)23:39 ID:chBT6m1a(1) AAS
結構、難しい
A <13桁の数字> B
A の部分が、文字列の先頭か、数字以外で、
B の部分が、文字列の末尾か、数字以外
533: 2018/06/25(月)07:16 ID:HTnjHonA(1) AAS
文字列操作可能なら両端に数字以外の文字を付加して
[^0-9][0-9]{13}[^0-9]
かな
534(1): 2018/06/25(月)08:32 ID:g3low2hV(1) AAS
>>531
先読み後読みは先頭や末尾にも一致するからそういうのは無駄
>>530の二つ目で完成している
535: 2018/06/25(月)09:21 ID:9/L2g6Oc(1) AAS
>>534
せやな, 否定前後読みならそのままでよかったわ(肯定で試しちゃった)
ただどのみちバックトラック多くて無駄だから正規表現だけでやるのでなければ13桁以上でマッチングして桁数判定入れるべきだと思う
536: 2018/06/25(月)21:12 ID:lRi8bnr9(1) AAS
13桁を超えていても候補として受け取っておいて
チェックデジットの計算の手前で落とします。
どうもありがとうございました。
537: 2018/06/26(火)18:51 ID:PFtq6YS9(1) AAS
文字列の先頭の文字以外を*に変換する
というのはどう書けばいいでしょうか?
538: 2018/06/26(火)20:16 ID:IMFKH44M(1/2) AAS
こういうこと?
$perl -pe 's/(?!^)./*/g'
alpha
a****
beta
b***
gamma
g****
$
良い方法かどうかはわからないが。
539: 2018/06/26(火)20:22 ID:IMFKH44M(2/2) AAS
perl -pe 's/(?<!^)./*/g'
とすべきだったかな。
540: 2018/07/04(水)22:06 ID:gFgZc5FG(1) AAS
J1Q
541: 2018/07/05(木)16:31 ID:AeL6VB/V(1) AAS
J1Q
542(1): 2018/07/16(月)14:08 ID:80hpbb9v(1) AAS
1 2 3 の3つの文字を、順番不同で、必ず各々、1つ以上含む
a23b1 → 真
1a2 → 偽
これは順番の組み合わせだから、正規表現で出来ますか?
543: 2018/07/16(月)14:41 ID:/+vnEc6c(1) AAS
>>542
先読みが使えれば
^(?=.*1)(?=.*2)(?=.*3)
544: 2018/07/25(水)19:56 ID:1XdhMp/e(1) AAS
サクラエディタで
<>で囲まれていないaaaをあああにしたいです
<aaab>aaa<caaadaaa>baaadeaaa<ccc>baaad<baaa>aaabaaadaaa<ee>
↓
<aaab>あああ<caaadaaa>bあああdeあああ<ccc>bあああd<baaa>あああbあああdあああ<ee>
>([^<>a]*?)(aaa)([^<>a]*?)<
>$1あああ$2<
だと「>aaa<」や「>baaad<」は置換できるけど「>baaadeaaa<」や「>aaabaaadaaa<」が置換できずに残る
そこで
>([^<>a]*?)(aaa)([^<>a]*?)(aaa)([^<>a]*?)<
省4
545(1): 2018/07/25(水)20:31 ID:AmPlbSPQ(1/2) AAS
[]内のa取っ払って
ぜんぶ変換できるまで何回もやったら?
(>[^<]*?)aaa([^>]*?<)
546(1): 2018/07/25(水)20:46 ID:AmPlbSPQ(2/2) AAS
aaa(?=[^>]*<)
前後に必ずタグがあるならこれなら一回
547: 2018/07/26(木)09:15 ID:4NbdqkDU(1) AAS
>>545>>546
できた!できました!
ありがとうございます
548(1): 2018/07/29(日)09:53 ID:JxpitKP8(1/4) AAS
●
パターン1, (\d+)月(\d+)日
パターン2, (\d+)月(\d+)数字以外(\d+)日
これを一回で取得したい
●対象データ
7月1日
7月2〜4日
7月6から10日
7月12・13日
●希望する結果
省5
549: 2018/07/29(日)10:18 ID:kCYuy8BN(1/3) AAS
取得って何だよ変数に入ればいいのか置換結果として取得したいのか
550: 2018/07/29(日)10:49 ID:TzC7zb5n(1) AAS
>>548
ほんまにそれが希望する結果?
数字とりだしてるだけなんだけど。
551: 2018/07/29(日)10:59 ID:JxpitKP8(2/4) AAS
取り出すだけでいいです。
552(1): 2018/07/29(日)11:42 ID:kCYuy8BN(2/3) AAS
数字取り出して変数に入れるだけなら /(\d+)月(\d+)(?:\D+(\d+))?日/gu で仕舞いだが
553: 2018/07/29(日)11:45 ID:JxpitKP8(3/4) AAS
>>552
完璧です。
ありがとうございました。
554: 2018/07/29(日)11:49 ID:kCYuy8BN(3/3) AAS
変数にキャプチャしたいのか置換で取り出したいのかくらい書こうな
555: 2018/07/29(日)11:57 ID:JxpitKP8(4/4) AAS
失礼しました
556(2): 2018/08/12(日)20:55 ID:MOc1ccj1(1/2) AAS
C#で正規表現を使ってHTML内から文字コードをとってきたいのですが
以下の場合だと"UTF"としか取得できません。
"UTF-8"と取得する場合どうすればいいでしょうか?
<[^>]*\bcharset\s*=\s*[""']?(?<charset>\w+)\b
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
557(4): 2018/08/12(日)21:30 ID:mMH07JtW(1/2) AAS
>>556
HTMLは扱いが難しいからパーサ使った方がいい
どうしても正規表現だというなら,
1. とりあえず的な修正
外部リンク:regex101.com
/<[^>]*\bcharset\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)")\b/$1$2$3/i
2. もう少し気合の入れた修正
外部リンク:regex101.com
|<meta
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*
省4
558: 2018/08/12(日)21:47 ID:L571MbNB(1) AAS
>>557
神だ
559(2): 557 2018/08/12(日)21:53 ID:mMH07JtW(2/2) AAS
2.の方を若干修正, charsetには値が必要ですわ
外部リンク:regex101.com
|<meta
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*
(?:\s+charset\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)"))
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*\s*/?>|$1$2$3|i
560: 2018/08/12(日)22:00 ID:MOc1ccj1(2/2) AAS
>>557
ありがとうございます!
当方がやりたかったことは、HTMLをテキストデータとして大量に取得して、その中から特定のワードでの絞り込みです。
正しい文字コードでHTMLを落としてからパースしようと思ったのですが、確かにパーサでやる手もありそうですね
正規表現は今まで避けてきたので、読むのがシンドイっていうかチンプンカンプンですが
求めていた動作です。とても助かりました。
使わせてももらいます。ありがとうございました。
561(3): 2018/08/12(日)23:56 ID:2UQfVx23(1) AAS
HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理
<1><x></x><y></y></1>
開き・閉じタグで、前から一致させると、
<1></x> が対応してしまう
ネストも無限にできるから、対応させるのは無理。
パーサを使うべき
上下前次1-新書関写板覧索設栞歴
あと 441 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s