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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
1
(5): 2017/03/15(水)02:04 ID:e01p03UP(1) AAS
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part13
2chスレ:tech

次スレは>>980宜しく
天ぷら等2以降
2
(3): 2017/03/15(水)02:06 ID:ko4BTSP2(1/5) AAS
スルーされにくい質問のテンプレと例

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

※ ^ はアンダーラインだそうな ^^;
3
(3): 2017/03/15(水)02:06 ID:ko4BTSP2(2/5) AAS
◆関連サイト
正規表現メモ
外部リンク[html]:www.kt.rim.or.jp
Perl正規表現雑技
外部リンク[htm]:www.din.or.jp
Regular Expression(Riue ちゃんの正規表現講座)
外部リンク:www.sixnine.net
正規表現パズル
外部リンク:www.geocities.jp
詳説 正規表現
外部リンク:www.oreilly.co.jp
正規表現プログラミングFAQ
外部リンク[html]:capslockabcjp.kitunebi.com
JScript 正規表現の概説
外部リンク[aspx]:msdn.microsoft.com
.NET Framework 正規表現言語要素
外部リンク[aspx]:msdn.microsoft.com
【 初心者 】 正規表現 【 入門 】 ←閉鎖
外部リンク:funcchan.blog16.fc2.com
クックブック ←追加
鬼車、鬼雲 ←追加
73
(4): 2017/04/23(日)07:11 ID:2K1Rl01+(1) AAS
^[^+]*$|\+(|0*[0-9]|0*[1-9][0-9]|[1-9][0-9][0-9]|0([1-7][0-9][0-9]|8[0-9][0-9])|0(90[1-9]|9[1-9][0-9])|[1-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)

●入力と結果(✓一致 ❌不一致)
✓ Sat May 24 08:05:44 2014
✓ Tue Mar 28 06:21:47 2017 +
✓ Tue, 26 Jul 2016 23:55:46 -0
✓ Wed, 05 Oct 2016 15:24:09 -0900
✓ Wed, 4 Mar 2015 08:39:08 +09000
✓ Fri, 30 Oct 2015 07:56:41 +00900
✓ Wed, 4 Mar 2015 08:39:08 0900
❌ Wed, 25 Mar 2009 14:18:41 +0900
❌ Tue, 8 Mar 2016 16:11:55 +0900 (JST)
❌ Sat, 24 Jul 2004 03:48:21 +0900<br>
80
(3): 2017/04/30(日)03:04 ID:sTLetcQY(1) AAS
慇懃無礼でうぜえ
101
(3): 2017/05/05(金)08:29 ID:bm+deAdf(1) AAS
「Regular Expression」ってことは
RegularじゃないExpressionもあるのかな?
111
(6): 2017/05/14(日)20:19 ID:IUk17Lsy(2/2) AAS
>>110
すみません、実はJaneStyleなど複数の環境で正規表現を使っていて、一番よく使うサクラエディタを例に出してしまいました。
確かにサクラエディタだと「英大文字と小文字を区別する」ってチェックがありますよね・・・

>>109
ありがとうございます!バッチリいけました。 ><
222
(4): 2017/06/25(日)14:40 ID:gOEYQ1GV(1) AAS
Unicode正規化
249
(5): 2017/07/26(水)01:05 ID:3rtPYRQF(1) AAS
^AA\d{2}-\d{4}(\.xlsm$)?

$?
行末の後ろに、? か。
この式は、見た瞬間に、おかしいとわかる
272
(3): 2017/08/12(土)17:55 ID:cYclCetd(1/3) AAS
●Regular Expressionの使用環境
Java1.8

●検索か置換か?
検索

●説明
下記の部分を抽出したい
AV0bc-t3.jpg
B32bc4f.jpg

●対象データ(一部)
風景-20170503-AV0bc-t3.jpg
b5-two-mountain-B32bc4f.jpg

最初は-を区切りとして抽出できるかと思ったが
抽出対象の文字列にも-が登場することが判明して為万事休す状態です。
どうかご指導お願い致します。
330
(3): 2017/10/20(金)00:50 ID:hFePCOoH(1) AAS
過去にAutohotkeyスレで正規表現自体の質問は正規表現スレに行けとあったのでこちらで質問させて下さい(巻き添えアク禁でソフトウェア板に書き込めません)。宜しくお願いします。

●Regular Expressionの使用環境
wikiより引用
>AutoHotkeyで用意されている正規表現は、Perl 5に搭載されているものと概ね互換のPCRE(Perl Compatible Regular Expressions)である

●検索か置換か?
検索

●説明
順不同の単語群のすべてを含む文字列の最長を検索し取り出したいです

●対象データ
var := "クリスマス任意の文字列お盆任意の文字列正月任意の文字列"
pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)", $)
MsgBox, pos=%pos% $=%$%
s)の意味はシングルラインモード
posはマッチした位置
$にはマッチした全体が入ります

これですと先頭の"位置"にマッチ(pos=1になります)するのでマッチした全体$は空になってしまいます

●希望する結果
$=クリスマス任意の文字列お盆任意の文字列正月
実際は長文の一部で単語群がもっと多いです
どの文字が先頭でどの文字が最後か不明のとき、これらの単語群がすべて含まれる文字列全体を取り出すにはどのように書いたら良いでしょうか

(クリスマス|お盆|正月).+(?1)
これですと正月という単語が含まれなくてもマッチしてしまいます
332
(3): 2017/10/20(金)02:42 ID:GaFTw98F(1/4) AAS
>>330
その2を組み合わせればいいじゃん
/(?=.*クリスマス)(?=.*お?盆)(?=.*正月)(?:クリスマス|お?盆|正月).*(?:クリスマス|お?盆|正月)/
333
(3): 2017/10/20(金)19:27 ID:P/1hvwmS(1) AAS
2ch → 5chになったタイミングでアク禁って全解除されたと思うけど、また規制され始めたのかな?
338
(3): 2017/10/20(金)20:23 ID:JiGfFRv1(2/3) AAS
pos := RegExMatch(var, "s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))", $)
MsgBox, %$1%
すみませんこれで1文字目不問で取り出せました
長文失礼しました
420
(3): 2018/02/14(水)13:35 ID:2LP2x+pK(1) AAS
C#なんですが

[ああ]おおおおお
[いいい]こここここ
[うう][ええ]そそそそそ
ととととと[たた]



おおおおお
こここここ
そそそそそ
ととととと[たた]

にしたいんですが、どうしたらいいでしょうか。
※先頭じゃない文中の[はは]は残したい
421
(4): 2018/02/16(金)13:56 ID:uX7uVTrc(1) AAS
\[[^\]]*?\](?!$)
ところによっては\[[^\]]*?\](?!(?:\n|$))
433
(3): 2018/02/16(金)17:00 ID:Q4bZpk0j(1/2) AAS
正規表現の使いどころってどんなところですかね?
普通レベルのプログラマから見ると可読性低くて保守性も悪い気がする
タグの要素を最初にバッと配列に入れやすいとか?
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"'=><`]+|'[^']*'|"[^"]*"))?)*
(?:\s+charset(?:\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)"))?)
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*\s*/?>|$1$2$3|i

ぐらいか
でもこれ後で読むのしんどいでしょ
561
(3): 2018/08/12(日)23:56 ID:2UQfVx23(1) AAS
HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理

<1><x></x><y></y></1>

開き・閉じタグで、前から一致させると、
<1></x> が対応してしまう

ネストも無限にできるから、対応させるのは無理。
パーサを使うべき
583
(13): 2018/08/26(日)18:08 ID:sCPJIsfv(2/4) AAS
自分用に作るならこんな感じかなぁ、動作確認してないので使わないでね

|
<meta (?=\s) [^<>]* \s charset \s* = \s* (?:["']\s*)? ([^\s"'<>;]+)
|x;

こういうのは想定外  ※  " " の中に > がある

<meta comment="a>b" charset="UTF-8">
601
(3): 2018/09/17(月)12:06 ID:SR+usNFF(1) AAS
C#、System.Text.RegularExpressions.Regexの正規表現で

xxの中を取り出すにはどうしたらいいのでしょう?
ただし取り出したいのはトップのxxで、xxが閉じる前にyyがあるときはそのxxは無視という条件付きです

対象文字列 "<xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx>";
試した正規表現 @"<xx>.*?[^(</yy>)]</xx>"

結果
 <xx><xx><yy>111</yy></xx></xx><xx>222</xx>
 <xx>333</xx>

欲しい結果
 <xx><xx><yy>111</yy></xx></xx>
 <xx>222</xx>
 <xx>333</xx>
605
(3): 2018/09/18(火)00:00 ID:lHFpavF+(1/2) AAS
>>601
.NET Frameworkの正規表現は知らんけど、鬼雲でなら
(?=<xx>)(<(\w+)>([^<]*|\g<-3>)*</\k<-2-0>>)
これは最低限のものでイレギュラーなものには対応しない
  文字列でエスケープされてるとかコメントが入ってるとか
  タグにタグ名以外の余計なものが入ってるとか(</a href=...>とか<br />とか)
  ペアでないタグがあるとか(<br>のような単独タグ,<xx>と</xx>のどちらかしかないとか)
そういうのにも対応させるなら工夫して

一応、.NET Frameworkの正規表現の再帰については
外部リンク:qiita.com
611
(3): 2018/09/18(火)07:04 ID:iA/s8q9i(1/5) AAS
ぶっちゃけ欲しい結果が何なのか結局よく分かってない

<xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx>
662
(4): 2018/10/21(日)19:43 ID:7AODCPK7(1) AAS
(a|b|c|d)* の展開についての考察

a*(ba*)*{ca*(ba*)*}* の a は全て a* の形になっているのでこれを利用する
a を (a|d) に置き換えることで分岐を1つ増やす

(a|d)* = a*(da*)* なので a* を a*(da*)* に置き換えるだけで答えが求まる
a*(da*)*(ba*(da*)*)*(ca*(da*)*(ba*(da*)*)*)*

(a|b|c|d|f)* を求めたいときは同じように a* を置き換えるだけで求まる
このように a* は分岐を無限に増やす入り口のような役割をする
729
(4): 2018/11/21(水)23:39 ID:UsYfXb0d(1/2) AAS
>>728
Regex.Replace(str, @"(?<=^\s*)\s", "空");
801
(7): 2019/04/22(月)20:21 ID:GQt1LKrG(1) AAS
sed
置換
1に挟まれたN個以下の0または-で構成された文字列を、同数の1で置き換える

10001→11111
100-1→11111
1---1→11111
10-0-0001→111111111

置換対象と同数の文字列で置換するというところをどう正規表現で表すかわからず、、、
よろしくお願いします
804
(3): 2019/04/23(火)08:49 ID:ef59e0DS(1/5) AAS
>>801
たぶんこれだけでは不要なところを置換しそう
:a;s/1([^0\-]*)(?:[0\-])(.*)1/1$11$21/g;t a
例題をこなすのは確認
805
(3): 2019/04/23(火)10:21 ID:yIB0exXp(1/6) AAS
>>801
100010
とか
1000101
とか
があるのか?
あった場合はどうすべきか
そこは明記しような。
謎だらけの設計書書く奴はIT向いてない。
915
(3): 2019/07/20(土)17:29 ID:AFOF1ubv(1/4) AAS
JSです
「はい」「はい」
「うん」「うん」
「■●」「■●」
「△◎」「△◎」
など、同じ文字列2回(あるいは2回以上)の繰り返しを探すにはどうすればよいでしょうか?

/「(.+)+」/
とかだと、1回目と2回目が違ってもヒットしちゃいますよね…?
994
(3): 2019/10/13(日)01:09 ID:Gu1oNPJo(1/2) AAS
Ruby で、

text = <<"EOT"
<aaa bbb
ccc
ddd>
<eee>
ffff ggg
<hhh
iiii>
EOT

# m option は、multi-line。$1 は、キャプチャー部分。
# [^>]+ は、> 以外の文字が、1文字以上続く
puts text.gsub( /<([^>]+)>/m ) { |matched| $1.gsub( "\n", " " ) }

>>993
>$1.gsub("\n", "")
"" は、" "(半角空白)の間違いだろ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.064s