[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:48 / Filesize : 330 KB / Number-of Response : 1037
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Regular Expression(正規表現) Part14



1 名前:デフォルトの名無しさん [2017/03/15(水) 02:04:35.47 ID:e01p03UP.net]
Regular Expressionスレです。

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

前スレ
Regular Expression(正規表現) Part13
echo.2ch.net/test/read.cgi/tech/1415149975/


次スレは>>980宜しく
天ぷら等2以降

384 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 01:01:11.97 ID:06if4WxO.net]
>>374
正規表現よりHTMLパーサ使えってのは>>374に同意するがjQueryは外部HTMLをパース/操作するものではない

ttps://sites.google.com/site/scriptsexamples/learn-by-example/parsing-html
この辺参考にするのがいいんじゃない

385 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 07:53:34.73 ID:HLwn5MaC.net]
急にHTMLパーサなんて言われてもチンプンカンプンやわ

386 名前:デフォルトの名無しさん [2017/12/11(月) 09:34:01.52 ID:78kXJ+6a.net]
すぐできるだろうと思って泥沼にハマることが多いわ、こりだすとキリがないわで、あきらめどころが難しいのが正規表現。

自分の中で制限時間(10分など。忙しさによる)を設けて、
それ以上時間がかかる場合は正規表現による解決するのをあきらめるってのが、運用上は合理的だろうね。
正規表現そのものの学習・調査をしたい場合は、もちろん違うが。
このスレの客層はどっちなのってことなのかな。

387 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 14:24:59.19 ID:HLwn5MaC.net]
jQueryやらHTMLパーサやら能書きばっかり

正規表現で出来たから、もうええわ

388 名前:デフォルトの名無しさん mailto:sage [2017/12/12(火) 00:30:19.52 ID:u8BojTW8.net]
>>376
>jQueryは外部HTMLをパース/操作するものではない

なんでよ?

389 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 17:08:16.97 ID:lv6L9acp.net]
Perl互換ですが,
ファイルの先頭から末尾までをマッチさせる,つまりファイルのテキストを全部取得するにはどう書いたらいいのでしょうか?

390 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 17:36:18.19 ID:lv6L9acp.net]
解決しました
([\s\S]*)で出来ました.

391 名前:デフォルトの名無しさん [2017/12/16(土) 03:31:44.42 ID:ArLhqftT.net]
正規表現は構文解析器(parser)じゃないから、
XML, HTML のように、文書に構造があるものは解析できない。バグる

例えば、コメント部に、
<td
と書かれていても、正規表現では該当してしまう

それに要素間に、祖先・子孫などの関係があって、入れ子構造になるから、
開始・終了タグが一致しない

392 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 22:01:18.38 ID:fLY/8wUq.net]
バックスラッシュt、でいいやろ



393 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 23:20:44.39 ID:LMSHu3dl.net]
正規表現でできることできないことの見極めが難しい。
うまくできない原因が、自分の未熟によるものか、そもそも誰がやろうが無理なのか、という見極め。
これは正規表現に限った話でないが、正規表現を使っていると遭遇することが非常に多い。

394 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 23:31:28.83 ID:Xb/4cQMD.net]
自分が使ってる範囲で使えるものか完璧を目指すかで違ってくるよ

395 名前:デフォルトの名無しさん [2017/12/25(月) 17:59:18.23 ID:9hKP95Nk.net]
もはや姓のサイトウ(斉藤、齊藤など)に適した検索方法って正規表現ぐらいじゃね?


プレス発表 「文字情報基盤整備事業」で推進していた漢字6万文字の国際規格化が完了:IPA 独立行政法人 情報処理推進機構
https://www.ipa.go.jp/about/press/20171225.html

396 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 18:01:37.66 ID:9hKP95Nk.net]
というか外字だとマルチプラットホーム対応した検索アルゴリズムを作ることが困難だったので、国際規格化されただけまだマシか。

397 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 22:40:21.08 ID:8yZmKHLj.net]
ユニコードなので特に何かに限定されない
ZWSPやZWJなどの方が地獄
anti.rosx.net/etc/memo/002_space.html

398 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 13:30:58.99 ID:bFwGimBi.net]
新年おめでとうございます

スマホアプリで正規表現を使いたくて調べたレベルで恐縮です
'\s'は空白文字だそうですが半角スペースのみを表現できないでしょうか?
また'/'を用いて半角スペースを表す方法はありませんでしょうか?
宜しくお願い致します

399 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 19:00:49.45 ID:I9szCE3x.net]
何故その程度ググらない?
半角スペースはそのまま半角スペースだ

400 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 20:13:20.96 ID:bFwGimBi.net]
>>391
半角文字ばかり調べて盲点でした
ありがとうございました

401 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 20:03:46.61 ID:eEPcZWZ ]
[ここ壊れてます]

402 名前:O.net mailto: 社外に情報を持ち出せず脳内再生ですみませんが、
以下の抽出条件を教えてください

●Regular Expressionの使用環境
Excel/VBAの参照設定で5.5

C#からのソースを移植中に、
Executeメソッドで(おそらく後読みができず)エラーとなっているが、
正規表現初心者で手も足も出ず…

●検索か置換か?
検索

●説明
複数行の
任意のホワイトスペースhostname: 後の文字列を検索し、
直後のドメイン名を取得したい。ただし、IPアドレスは除外したい。

●対象データ
hostname: hogehoge.com改行
hostname: mogemoge.com改行
hostname: 192.168.1.1改行

●希望する結果
hogehoge.com
mogemoge.com

よろしくお願いします。
[]
[ここ壊れてます]



403 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 20:08:09.69 ID:eEPcZWZO.net]
●対象データ
△△hostname:△hogehoge.com改行
△△△△hostname:△mogemoge.com改行
△hostname:△192.168.1.1改行

のようにスペースが入っています。

Janeでカキコするとスペースが消えたので補足します。

404 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 21:13:44.07 ID:RuMnMvof.net]
ホスト名の条件が分からんからドメイン名と同等と仮定する
マルチラインモードで

^\s*(?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?:[^\S\x0A\x0D]*((?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?)$

としてグループ1のキャプチャを見る, とか
つうかVBAなら正規表現で頑張るより改行文字と:でそれぞれsplitしてループ回しながらtrimするのが自然だと思うけど

405 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 22:13:51.90 ID:eEPcZWZO.net]
>>395
なるほど、hostnameを検索して後読みするのではなく、
ドメインで合致させつつ、IPアドレスを除外するというわけですね。

理解のために改行してみました。
^\s*
(?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])
?:[^\S\x0A\x0D]
*(
(?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])
?)$
のうち、
[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])
がドメイン、
[^\S\x0A\x0D]
がIPアドレス除外ですね。

私もVBAならInstrとMIDを駆使したほうが可読性も生産性も上がると思うのですが、
過去のC#とPerlの正規表現コードを再利用しつつ、将来的にはPythonとかにも応用できるように
正規表現でがんばれ、との指示を受けたのですが、
いきなりVBAでは後読みできないとか、まわりに有識者のいない罠にはまり難儀しています。

406 名前:デフォルトの名無しさん mailto:sage [2018/01/06(土) 22:25:41.73 ID:RuMnMvof.net]
> がIPアドレス除外ですね
違う
\Sは空白文字以外だから[^\S\x0A\x0D]は空白文字以外とCR, LFの「何れでもない」場合, つまり空白文字からCRとLFを除外したもの
そもそも(先頭が英字でなければならない)ドメイン名でマッチングしてるんだから先頭が数字で始まるIPアドレスを後から除外する必要はない

再利用性に関しても, 後読み出来るエンジンかそうでないかで既に失われてるんじゃないかね
キャプチャの取得方法なんぞ言語ごとに大分違うしな

仕事で使うなら尚更メンテし辛い上に遅い正規表現を使わにゃならん積極的理由は無い
splitでループ回せば入力のサイズに対して線型時間で終わることが保証される上に保守性も高い

407 名前:デフォルトの名無しさん mailto:sage [2018/01/07(日) 12:17:55.91 ID:ln22xrzP.net]
>>393
ここでドメイン名文字種チェックせにゃならんの
IPアドレスではないで判断でけんの

408 名前:デフォルトの名無しさん mailto:sage [2018/01/10(水) 23:41:51.90 ID:qa5Jh8Cf.net]
>>398
現仕様だとまさにIP除外なんだけど、123.comとかが入ってくるので、あとで除外しているという。。

>>397
今日、やっと開発場所で試しました。
ドメインは見事マッチしました!が、
△△domain:△hogehoge.com改行
の行までマッチしてしまうので、
^\s*
(?:[A-Za-z]〜
のところを
^\shostname:*
(?:[A-Za-z]〜
にしてみましたが、今度はすべてマッチしなくなりました。
スペース連続shostname:*を除外したつもりなんですが…

409 名前:教えてくだされ。 []
[ここ壊れてます]

410 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 10:30:10.40 ID:Xo4biI2J.net]
^[△]*hostname:[△]*([0-9.]*[A-Za-z\-][0-9A-Za-z.\-]*)$
^[△]*hostname:[△]*([0-9.]*[^\s0-9.]\S*)$

hostname:△mevius.5ch.net
hostname:△86886.jp
hostname:△日本語.jp
hostname:△はじめよう.みんな

411 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 12:30:44.58 ID:/99JjIqr.net]
>>399
要件は満たしたつもりだが, その行がマッチしちゃならん理由は?
それともキャプチャの意味が分かってないのか?

412 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 13:56:21.29 ID:/99JjIqr.net]
>>399
あと申し訳ないけど, 正規表現を全く理解してないよね?
何でその書き換えで除外出来たと思ったのか教えてくれる?



413 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 17:51:18.77 ID:WzsJRajU.net]
あぁ, hostnameは固定文字列なのか
なら

^\s*hostname:[^\S\x0A\x0D]*((?:[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?\.)*[A-Za-z](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?)$

だけど

414 名前:デフォルトの名無しさん [2018/01/16(火) 12:15:21.97 ID:RA24ssqp.net]
正規表現の書き方教えてください。

CentOS 7のサーバーにURLを要求した際、下記のような余計な文字が付きます。付くことがあります。
/ディレクトリ/ファイル名.拡張子%01
/ディレクトリ/desktop.inib%01
/ディレクトリ/desktop.inie%01

またファイル名の後に、
%EE%81%9F%E2%81%80%EE%81%97%C9%84とか
%E6%89%B8%E7%A8%B7%E4%99%BA%E5%A5%97%E3%8D%95%E4%BD%8C%E6%A1%B2%01とか
ファイル名の語尾に不特定の文字が勝手に付く場合もあります。
ディレクトリを要求したときも
ディレクトリの語尾に%E4%84%B7など(これも不特定)が付いてしまうことがあります。

これを除外するには、
正規表現でどのように書けば良いのでしょうか?

よろしくお願いします。

415 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 13:31:33.72 ID:y9BMfGeo.net]
https://social.technet.microsoft.com/Forums/ja-JP/5debbbcd-1def-42f8-a495-f655ebd58c4b/windows10-1709-webdav-?forum=win10itprogeneralJP

コレか?
URLエンコード文字だけなら簡単だがASCIIが入るとなると容易ではない(どこまでがファイル名か判別出来ない)

クライアント側のアップデートを待つ方が賢明な気がする

416 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 13:45:59.33 ID:y9BMfGeo.net]
あと忘れてたけどWebDAVならクライアントにWinSCP使うとか

417 名前:403 mailto:sage [2018/01/16(火) 14:48:31.79 ID:RA24ssqp.net]
ありがとうございます。
自分の場合「空」にはなってませんが似てますね。
便利なクライアントアプリケーション探してみます。

418 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 17:00:43.44 ID:1yOH1J8J.net]
pattern = /^(.*)(?!%)/

p pattern.match('abc%123')

Ruby で否定先読みを使ったら、「abc」だけ取れない。
すべての文字列にマッチしてしまう

なんでやねんw

419 名前:デフォルトの名無しさん [2018/01/16(火) 17:14:43.11 ID:G8V+pnDB.net]
なんでやもなにも、.* だから全体にマッチするよ。1文字ごとにチェックするか、文字クラスを使いなさい。

420 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 18:31:44.93 ID:1yOH1J8J.net]
Ruby では、先頭から、% を探して、それ以降を削除する

str = '/dir/desktop.inib%01%EE%81'
pos = str.index('%')

if pos
str = str.slice(0...pos)
end

puts str

結果
/dir/desktop.inib

421 名前:409 mailto:sage [2018/01/16(火) 19:25:09.57 ID:1yOH1J8J.net]
正規表現でも、できた。
Ruby では、先頭から、% 以外の文字を探す

pattern = /^[^%]+/
str = '/dir/desktop.inib%01%EE%81'

puts pattern.match str

結果
/dir/desktop.inib

422 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 20:18:43.79 ID:y9BMfGeo.net]
要件には書いてないけど, .iniまでが正しいファイル名だと思うよ
その後ろのbとかeもゴミ



423 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 22:39:12.31 ID:9E60uHWe.net]
どういう法則性でb,eが付いたのかがわからないと、
b,eの他にも付くのがあるのか、また付かないこともあるのかもわからん
例えば、hoge.exee%01とかになるのか?

424 名前:403 mailto:sage [2018/01/17(水) 15:18:31.78 ID:BVJUZk9+.net]
皆さんありがとうございます。

>>413
それ以外にも幾つか変な文字の時もあり、
問題なく何も付かない時もあります。
決まったパターンは無いと思った方が良いですね。

すべてが1byte文字の時は

425 名前:413 mailto:sage [2018/01/17(水) 17:17:53.77 ID:BVJUZk9+.net]
最後に変な文章を残してしまいました。
すべてが1byte文字を要求するときは、
そんな変なゴミは付きにくいと書こうと思ったのですが、
まだ確証が無いので無視して結構です。

426 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 23:42:01.50 ID:3vNjEx0B.net]
●Regular Expressionの使用環境
桜エディタ(テキストエディタ)

●検索か置換か?
置き換え

●説明
文字数、文字種はいろいろです。ただしすべて半角(1バイト文字)です。
結果として、<>内の文字だけにできればどんな方法でも構いません

必要な情報かわかりませんが、<>の外には、<>があることはありません。
asqa>w3e<a>s98<as897kja> ←こんな感じの行はありません。
行末は必ず、>で終わり、必要な文字は必ず<>でくくられたものの中にあります。
いらない文字<必要な文字>ここに改行が入る という書式は絶対です。

●対象データ
R&^&*(!TYUIKM<slihfd>
BA%(*&%ASAS<asdlikh>
TF^(VB(*&N<a09sfyighkljn>

●希望する結果
slihfd
asdlikh
a09sfyighkljn


よろしくお願いいたします。

427 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 00:23:12.83 ID:kN+YdVUy.net]
^[^<>]*<([^<>]+)>$
$1

428 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 23:06:15.86 ID:VxK8nSc/.net]
[^<>^] サンクス

429 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 23:24:13.78 ID:Zisu4Ynz.net]
>>417
ありがとうございます。うまく抽出できました。

430 名前:デフォルトの名無しさん mailto:sage [2018/02/08(木) 23:37:41.58 ID:kN+YdVUy.net]
このぐらいの正規表現なら基本だし, 覚えると正規表現の載ってるエディタでの編集が楽になるよ
とりあえずPerl互換を勉強してみるといい

431 名前:デフォルトの名無しさん mailto:sage [2018/02/14(水) 13:35:37.03 ID:2LP2x+pK.net]
C#なんですが

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



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

にしたいんですが、どうしたらいいでしょうか。
※先頭じゃない文中の[はは]は残したい

432 名前:デフォルトの名無しさん [2018/02/14(水) 17:41:06.84 ID:ZzaOqvDP0]
^\[.*\]



433 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 13:56:45.89 ID:uX7uVTrc.net]
\[[^\]]*?\](?!$)
ところによっては\[[^\]]*?\](?!(?:\n|$))

434 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 14:10:38.80 ID:ga78Zu+3.net]
マルチラインモード

^(?:\[([^\[\]])\1*\])+

マッチ部分を除去

435 名前:420 mailto:sage [2018/02/16(金) 14:11:39.72 ID:CWd36B/o.net]
1行目でバッチリ
感動しました!!!

436 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 14:15:41.25 ID:CPKH/1dQ.net]
それ文末以外消えるけどええのん

437 名前:421 mailto:sage [2018/02/16(金) 15:30:22.93 ID:mPXTHkFg.net]
>>426
文中は消えていいんじゃない?

>>421
> [うう][ええ]そそそそそ
> そそそそそ

ってあるし
あ、

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

この[はは]はマッチしたらダメなのか
これ例の中においてくんないかなー
というか定義がよくわからんちん

^\[.*\](?!$)
ところによっては(?<=(?:^|\n))\[.*\](?!(?:\n|$))

マッチ
[ああ]おおおおお
[いいい]こここここ
[うう][ええ]そそそそそ
[たた]ななはは[まま]やや
→[たた]ななはは[まま]
[たた]ななははまま[やや]
→[たた]

アンマッチ
ととととと[たた]
ちち[はは]ぱぱまま

438 名前:421 mailto:sage [2018/02/16(金) 15:30:54.45 ID:mPXTHkFg.net]
>>427
[たた]ななはは[まま]やや
の[まま]を含めずマッチしたい([たた])ならかなり複雑になりそうでちょっといますぐは思いつかないや

それってつまり
 行頭[
 行頭から括弧が繋がり、且つ、行末]を含めない範囲
なら

439 名前:
[たた][なな][はは][まま][やや]
のマッチが
→[たた][なな][はは][まま]
でいいのか、それとも行そのものがアンマッチなのかよーわからんし
[]
[ここ壊れてます]

440 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 15:55:42.80 ID:CPKH/1dQ.net]
>>427
カッコ内も同じ文字が重なるように読めるしなー
まぁこういう仕様をちゃんと書けるならそもそも正規表現で困らんのだろうけど

441 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 15:57:06.09 ID:CWd36B/o.net]
orz...
試したら確かに

>>424 だと先頭が残りますネ

442 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 16:00:32.77 ID:CWd36B/o.net]
すみません

[ああ]おおおおお    → おおおおお
[あああ]おおおおお   → おおおおお
[ああ][いい]おおおおお → おおおおお
あああああ[いい]     → あああああ[いい]
あああ[いい]うう      → あああ[いい]うう

です。
先頭付近の [] は消したいけど、それ以外は残したい、って風です。



443 名前:421 mailto:sage [2018/02/16(金) 16:24:42.64 ID:rLsYeXBU.net]
>>431
[たた]ななはは[まま]やや
は?
[たた][なな][はは][まま][やや]
はどーなんの?

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

あと行末も係わるんだから、例の同じ行に余計な文字列入れないで(たぶんこの件では大過ないと思うけど)

444 名前:421 mailto:sage [2018/02/16(金) 16:25:23.31 ID:rLsYeXBU.net]
>>432
内包無視するとしたら
(?<=^)(?:\[[^\[]*?\])+(?!$)
ところによって(?<=(?:^|\n))(?:\[[^\[]*?\])+(?!(?:\n|$))
かね

>>431を満たし、
[たた]ななはは[まま]やや
→[たた]
[たた][なな][はは][まま][やや]
→[たた][なな][はは][まま]
となるし

たぶん
 行頭[ および 行頭[に対応する]までマッチ
 行頭[ および 行頭[に対応する]から括弧が繋がり、且つ、行末] および 行末]に対応する[までを含めない範囲
あたりなんだろうなー
ぱっと思いつくのはちょめちょめしたダウンロードファイルのリネームをしたいようなかんじかね

445 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 16:26:09.97 ID:dBpGhFbZ.net]
仕様に不備があると作る方は大変だな

446 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:00:58.65 ID:Q4bZpk0j.net]
正規表現の使いどころってどんなところですかね?
普通レベルのプログラマから見ると可読性低くて保守性も悪い気がする
タグの要素を最初にバッと配列に入れやすいとか?

447 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:11:19.84 ID:GgVv8IsN.net]
>>435
可読性低くて保守性も悪いっていうのは本当にその通り
プログラミングで使うならまずは(正規表現が非常に直感的でない限りは)正規表現以外の選択肢を考えるべきで, それが可読性や保守性を上げないとなった上で正規表現が選択されるのがよい
勿論保守性や可読性を気にしないワンライナーとかであれば気にする必要はないが

あとはエディタやgrepなんかだと他に有力な選択肢がないから正規表現になる

448 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:18:48.02 ID:h4N2NTdR.net]
単純に、
(?m)^\[.*\](.*)
じゃだめなん?

449 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:23:34.33 ID:GgVv8IsN.net]
>>437
全然ダメ
入力が

[abc]def[ghi]

なら全文がマッチする(量化指定子*はgreedyだから末尾手前まで全部食う)

450 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 17:34:31.04 ID:dBpGhFbZ.net]
>>435
実行環境によってだけどコンパイルされて速くなったりするので
さくっと一行で書けるならメリットはあるよ
プログラム書いた方が良い場合もある
ケースバイケース

451 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 18:30:54.06 ID:Q4bZpk0j.net]
>>436
>>439
レスサンクスコ
今Pythonで作られているパッケージを保守してるんだけど、お約束のように最初に正規表現で抜いて後で編集してる
最初のパフォーマンスを考慮してるのかもだけど、読みにくくて一般人にはいいことないよ

452 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 19:13:24.69 ID:M8XJLm2H.net]
>>435
ワンライナーで可読性保守性とか気にしない
ストリームエディタで検索、ログの抽出が最たる用途じゃないか



453 名前:デフォルトの名無しさん [2018/02/16(金) 20:46:56.42 ID:d9VDf+sb.net]
>>421
$# 「行頭部分にある 1 個以上の \[[^\]

454 名前:*\] を削除」と初見で思ったのだが、違うのか?
$# それとも C# でどうやるかわからないという話? 申し訳ないが C# は知らない。
$
$cat a_in
[ああ]おおおおお
[いいい]こここここ
[うう][ええ]そそそそそ
ととととと[たた]
[ええ]あああ[いい]うう
$perl -pe 's/^(\[[^\]]*\])+//' < a_in
おおおおお
こここここ
そそそそそ
ととととと[たた]
あああ[いい]うう
$perl -0777 -pe 's/^(\[[^\]]*\])+//gm' < a_in
おおおおお
こここここ
そそそそそ
ととととと[たた]
あああ[いい]うう
$
[]
[ここ壊れてます]

455 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 21:24:08.90 ID:nYHQACKk.net]
>>438
Non-greedy(最短)なマッチ使えばいいだけじゃね?
使えない環境なの?

456 名前:デフォルトの名無しさん [2018/02/17(土) 05:30:35.08 ID:xZfN9pA3.net]
何を望んでいるのかを明確にする方が先かと……

457 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:13:15.50 ID:sN1lrGX4.net]
>>443
none-greedyじゃ先頭しかマッチしない

[abc][def]ghi

の[abc]しか除去出来ない
反復適用すればいいというならその通りではあるが

458 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:27:08.57 ID:IU1gsQgu.net]
[ab][cd][ef]ああ

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

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

[〜] でグループ化すべき

459 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 12:22:01.47 ID:IU1gsQgu.net]
/^\[[^\]]*\]/ =~ "[ab][cd]ああ"
$& #=> [ab]

Ruby で書いた。
行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある

460 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 12:32:03.69 ID:IU1gsQgu.net]
/^\[[^\]]*\]/ =~ "[ab][cd]ああ"
$& #=> [ab]
$' #=> [cd]ああ

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

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

Ruby で書いた。
行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある

$& はマッチした部分で、$' はマッチした部分の後ろを表すから、
マッチを繰り返していけば、出来るけど

461 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 12:42:57.33 ID:IU1gsQgu.net]
/^(\[[^\]]*\])+/ =~ "[ab][cd]ああ[ef]"
$& #=> [ab][cd]

やったー。Ruby で出来た

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

ただし、グループ外に、先頭からを指定する

462 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 07:04:41.40 ID:4dAbe4pu.net]
正規表現で使用される記号があるとワケわからなくなってくるから
適当な記号、例えばQなどに置き換えて試行錯誤して最後に元の記号に戻したりする



463 名前:デフォルトの名無しさん [2018/02/18(日) 11:53:19.92 ID:QWcmX5lk.net]
余計なバックトラックを防ぐために
$s = qr/(?>\s*)/
ってやってパターンに埋め込むことならある。

464 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:29:48.73 ID:vtIXFjR6.net]
(?s:^(?=.*ス)(?=.*プ))
CHmateで使う正規表現らしいんだけど最初の

(?s:"

の意味が検索してもわからないのですが教えていただけないでしょうか

465 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:45:42.10 ID:0zsudQHR.net]
>>452
シングルラインモード
>>349

466 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 00:35:55.07 ID:bvxyjlLF.net]
>>453
ありがとございます
確認してなんとなく分かりました

ところでこの正規表現の場合(?s:)って名前には改行はないので不要じゃないかと思ってしまうのですがどういう目的で使われているのでしょうか

467 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 01:37:05.64 ID:d6NztqhC.net]
書いたヤツの趣味じゃ?
しかもかなりてきとう

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

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

深謀遠慮があるのかも知れんがそれこそ書いた本人へ

468 名前:デフォルトの名無しさん [2018/02/27(火) 15:54:44.12 ID:2v1tH105.net]
C#で、
var rgx = new Regex("(.)+");
var str = "こんにちは。";
Console.WriteLine(rgx.Replace(str, "$1"));
とすると「。」が出力されるのですが、なぜですか?
$1は「。」になるのですか?「こ」だと思ったのですが、違いますか?

469 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 16:08:59.77 ID:u9k8VAiO.net]
>>456
理由はここ読んで
https://www.regular-expressions.info/captureall.html

短い説明は↓ここでも出てくる
https://regex101.com/r/te5DBr/1

470 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 17:03:18.46 ID:VEiALCIH.net]
どれどれ…
javascript
'こんにちは。'.replace(/(.)+/, '$1');
=> "。"

ほんまや!知らんかった

471 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 19:34:07.35 ID:LuvO3mbW.net]
>>457
配列に入れてくれればいいのに
って思ったことあるわ

472 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 21:09:42.50 ID:PLAOSS1/.net]
Ruby でも、

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

#=> "。"



473 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 22:02:02.32 ID:u9k8VAiO.net]
>>459
.NETはCaptureCollectionってのに入れてくれるみたいよ

ただフルマッチとキャプチャリンググループと両方1度に必要なければ
/(.){1}/みたいに正規表現変えれば配列に入れられるよね

474 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:03:30.09 ID:V9ixSdqS.net]
>>457
すみません。
教えて頂いたサイトを見ても分かりません。
簡単に解説をお願いしたいのですが。

475 名前:デフォルトの名無しさん [2018/02/28(水) 22:05:09.20 ID:pxJOkH76.net]
単純に最後にマッチした部分ってことじゃないかな。赤ラクダにそう書いてある。
C# は知らない。誰か翻訳してあげて。

476 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 00:07:23.55 ID:UkKloD3U.net]
>>462
キャプチャグループに量指定子がついてるとそのキャプチャグループの箇所に複数回マッチする可能性があるよね。
んで複数回マッチした場合は最後にマッチしたやつがそのキャプチャグループに入ってるってこと

"こんにちは。”に対して、/(.)+/でマッチをかけると
最初にピリオドが“こ”にマッチしてそれをグループ1に入れて
次に+を見てまたマッチするか繰り返す
今度はピリオドに”ん”がマッチするからそれをグループ1に入れて、、、
あとは繰り返し
“こんにちは。”が/(.)+/にフルマッチした時点でグループ1に入ってるのは”。”

477 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 00:17:03.42 ID:ikcjc59H.net]
/(.+)/ =~ 'こんにちは。'
$1 は、'こんにちは。'

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

上は、1回しかマッチしていない、最長マッチ。
下は、1文字のマッチで、6回マッチして、最後のマッチが、'。'

478 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 00:55:21.78 ID:UkKloD3U.net]
>>465
うーん、1文字マッチで6回マッチするのはどっちも同じじゃない?
キャプチャグループに入れる回数の違い

479 名前:デフォルトの名無しさん [2018/03/01(木) 02:58:48.22 ID:ksBcbegD.net]
>>464
なるほど。

480 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 05:29:23.47 ID:AobHbkwq.net]
詳細 ○○表現
尼での評価がよかったので買ってみたが全然
リファレンスにもならない
やっぱり海外の訳本はだめだ、すくなくとも自分には良書でなかった

481 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 15:52:15.50 ID:UkKloD3U.net]
フクロウ本のことかな
中の仕組みを理解するための本であって
リファレンス本でも入門書でもないからね

482 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 09:24:29.36 ID:O5NS5hyG.net]
>>466
そういうマッチャー自分で作る時はスキップするよう作るけど
正規表現エンジンはしないのか
複雑だとやってられないとかか



483 名前:デフォルトの名無しさん [2018/03/02(金) 13:01:46.53 ID:btKfsNEv.net]
試しに
for pat in '([cd])+' '(.)+' '.*(.)' ; do perl -Mre=debug -e '$pat = shift; print "abcd" =~ /$pat/ ,"\n" ;

484 名前:' "$pat" ; done
ってやってみた。最適化してそうだ。.*(.) は意味的には同じだと思うがバックトラックの分だけ不利。
Perl のソースコードを確認したわけではないので断定はしかねるが。
[]
[ここ壊れてます]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<330KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef