[表示 : 全て 最新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以降

809 名前:デフォルトの名無しさん mailto:sage [2019/01/29(火) 06:11:22.47 ID:mzqJgDrY.net]
$1
Windows PowerShell Cookbook
Regular Expressions Cookbook
Perl Cookbook
PHP Cookbook
Android Cookbook

Humble Book Bundle: Programming Cookbooks by O'Reilly (pay what you want and help charity)
https://www.humblebundle.com/books/programming-cookbooks

810 名前:デフォルトの名無しさん mailto:sage [2019/01/29(火) 06:32:49.85 ID:mzqJgDrY.net]
Tools for Working with Regular Expressions
RegexBuddy
RegexPal
RegexMagic

More Online Regex Testers
RegexPlanet
regex.larsolavtorvik.com
Nregex
Rubular
myregexp.com

More Desktop Regular Expression Testers
Expresso
The Regulator
SDL Regex Fuzzer
PowerGREP
Windows Grep
RegexRenamer

811 名前:デフォルトの名無しさん [2019/01/31(木) 16:07:48.62 ID:Sc+6fvIO.net]
誰かこの鬼雲のバグ修正PR投げてあげて

https://github.com/k-takata/Onigmo/issues/106

812 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 16:08:40.61 ID:Sc+6fvIO.net]
https://github.com/k-takata/Onigmo/issues/106
(?(n) (?: X | Y ) ) and (?(n) X | Y ) behavior is same.
(?: ) is left out.

(?(n) (?: X | Y ) | ) is nomal behavior.
This is a solution to a this bug problem.

ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
bregonig.dll Ver.4.12 with Onigmo 6.1.2

813 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 00:35:05.11 ID:HRhgNpoV.net]
鬼雲には鬼雲を知ろうとすればするほど謎のテキストエディタの
情報が集まってくるという不思議な不具合があるがこのフィックスは不可能 :-)

814 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:57:23.09 ID:sEA+6w2y.net]
今日元号の改正の準備で日付関連のコード書いてきたんだけど
>>697の置換が出来ると便利だったなという所があった
再帰が使えるのにこれが使えないのはバランス感覚に欠ける気がします
どうしてこうなった?

815 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 13:14:07.01 ID:vSZ9R6NM.net]
先読みの(?=huge)をつけると、後方がキャプチャーされません

そもそも前方に文字のない?=って使い方あってるでしょうか?
ちなみに言語はVB6です

816 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 00:19:48.81 ID:heD+eXgL.net]
Are you japanese?
Your japan language is strange.

Please show me sample codes.

817 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 01:39:37.63 ID:bUFEpZHr.net]
あなたの英語も変ですよ。
日本人はJapaneseとキャピタライズしてください。
日本語もjapan languageではなくJapanese languageです。
Japaneseだけで日本語という意味になりますが、前の文で日本人という意味で使っているのでlanguageを付けるのはいい判断でした。
また最後の文は、どうしても複数の例を見たいことを強調するのでない限りcodesではなくのcodeがふつうです。
不定冠詞のaも付けません。(絶対にただひとつの例だけ欲しいのでない限り)



818 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 02:16:45.79 ID:heD+eXgL.net]
自分の英語力は小学生相当なのでこんなもんです
教えてくれてありがとね

819 名前:デフォルトの名無しさん [2019/03/13(水) 02:29:04.73 ID:Z/ka/TFK.net]
irregular expression, exactly.

820 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 08:53:04.20 ID:heD+eXgL.net]
I am good at irregular expression.

821 名前:デフォルトの名無しさん [2019/03/13(水) 14:12:32.68 ID:ZUOT1OTB.net]
nativeのひとに「あなた英語上手ですね」って言われても誉め言葉じゃないからな
その時点で下に観られてる

822 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 17:54:44.14 ID:k53fNhgw.net]
上手ですねと言われる可能性が0なので大丈夫です

823 名前:デフォルトの名無しさん [2019/04/22(月) 20:21:53.32 ID:GQt1LKrG.net]
sed
置換
1に挟まれたN個以下の0または-で構成された文字列を、同数の1で置き換える

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

置換対象と同数の文字列で置換するというところをどう正規表現で表すかわからず、、、
よろしくお願いします

824 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 05:37:05.12 ID:TbAsj7lM.net]
正規表現で数を数えるのは無理
マッチさせて自力で文字を数えるコード書いて入れ替えて

ちなみに\Gが使える正規表現環境なら正規表現単独で可能

825 名前:デフォルトの名無しさん [2019/04/23(火) 07:05:11.04 ID:k/th3sVe.net]
>>803
sed ':r; s/1[0-]\([0-]*1\)/11\1/; tr'

前方に 1 のある 10 を 11 に置換する
置換に成功したら tラベル で :ラベル の位置に戻って繰り返す

826 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 08:49:46.57 ID:ef59e0DS.net]
>>803
たぶんこれだけでは不要なところを置換しそう
:a;s/1([^0\-]*)(?:[0\-])(.*)1/1$11$21/g;t a
例題をこなすのは確認

827 名前:デフォルトの名無しさん [2019/04/23(火) 10:21:33.54 ID:yIB0exXp.net]
>>803
100010
とか
1000101
とか
があるのか?
あった場合はどうすべきか
そこは明記しような。
謎だらけの設計書書く奴はIT向いてない。



828 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 11:46:04.64 ID:ef59e0DS.net]
>>807
>>806で> 100010→111110、> 1000101→1111111は確認

というかオレは前後にゴミがつくことは何ら影響がある題とは思わなかった
>>803の「1に挟まれたN個以下の0または-で構成された文字列を、同数の1で置き換える」にはその前後について言及ないから「触らない」と判断

後者を1000101→1111101で求めるかという点は気になるところ
最初の1〜1ブロックのみなのか、行中の1〜1最長一致ブロックなのか(すべての1〜1ブロックを個別処理も同一)

829 名前:デフォルトの名無しさん [2019/04/23(火) 12:07:17.02 ID:yIB0exXp.net]
>>808
()で囲うとなってれば入れ子のケースは当然問題になるんだから
入れ子を考慮する必要があるかを明確に定義してないのは駄目な仕様。

10-以外が現れた場合の扱いも明記されていない
→現れることはないとみなしている
んだから
100010は現れないと想定して書く選択肢もある。
いずれにしろ、不明瞭な仕様を書く奴は無能だし、
勝手に解釈するのも実際の仕事じゃトラブルの元。

830 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 12:23:27.03 ID:ZY45SR7V.net]
Ruby なら、

re = /1([^1]+)1/ # 1〜1 で、はさまれた部分

str = "x10-0y0-1x"

# $1 は、capture 部分で、0-0y0-。この部分を置換する。
# 結果は、x1 (111y11) 1x
p str.sub( re ) { |s| "1" + $1.gsub( /[0-]/, "1" ) + "1" }

831 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 12:38:52.51 ID:ef59e0DS.net]
>>809
反論と取られたのかな
反論でも賛意でもないよ

個人的には>>803が「よい定義や仕様」とは欠片も思わない一方で「ダメダメ」とも思わない
組んでいく中で詳細を詰めていくことも現実としてある
あなたが求めているようながっちり仕様が決まっていたらむしろやることなんてほぼないかも
単に日本語を翻訳する作業になるのでむしろ苦痛かな…
そこまで詰められるなら日本語で指示しないで自分で書けよと思ってしまうかも

スレ的に読み替えればがっちり仕様を出した上で「これは正規表現で可能か?」という命題に繋がるのでスレでがっちり仕様を出すなと言う意味ではないです(念為)

仕事でもなし頭の体操的にてきとーに答えてるだけなんでこれくらいなら気にしない派

832 名前:デフォルトの名無しさん [2019/04/23(火) 13:02:53.90 ID:k/th3sVe.net]
% printf '100010\n1000101\n' | sed ':r; s/1[0-]\([0-]*1\)/11\1\n/; tr; s/\n//g'
111110
1111101
%

833 名前:801 [2019/04/23(火) 13:49:39.47 ID:CFFnqXFD.net]
問題が曖昧であったため議論を紛糾させてしまいました。すみません。
たしかに入れ子のことや、一致する最初の文字列か、最長か、01-以外の文字の存在などを明確に記載できていませんでした。
今回の問題で聞きたかったことをシンプルに表現すると、検索文字列の文字数(1〜N個)に依存した置換が可能なのか、になります。
そこについては先の人が回答してくださった通り、文字数を記憶しておくような処理は不可能であるから正規表現の範疇ではないと思いました。
これまでの意見から当初目的ではないものの多くのヒントをもらいました。ありがとうございました。
問題提示者としていたらないながら、この話はクローズさせていただきます。

834 名前:デフォルトの名無しさん [2019/04/23(火) 13:52:46.13 ID:yIB0exXp.net]
>>811
反論だなんて受取ってないから妄想やめて。
定義が曖昧過ぎてねえ…
としか言ってないから。

01-以外でいいのか、1.*1でいいのか
などなど要件がこんな不明瞭じゃねえ

と言う話しかしてないのであしからず。

835 名前:デフォルトの名無しさん [2019/04/23(火) 13:54:41.14 ID:yIB0exXp.net]
>>811
というか、そもそもお前宛じゃないのに
なんでお前が絡んで来てるのか謎。
勝手にお前が批判されたと妄想するなよ。

836 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 15:45:58.43 ID:ef59e0DS.net]
>>815
> というか、そもそもお前宛じゃないのに
ふあ?
>>809(ID:yIB0exXp)で>>808(ID:ef59e0DS)に安価されてるからですよ
んーなんなんかな(´д`)

837 名前:デフォルトの名無しさん [2019/04/23(火) 17:14:05.07 ID:yIB0exXp.net]
>>816
>>807のことだが。
お前宛じゃないのに絡んで来たのお前だろ。
記憶喪失ワロタw



838 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:20:56.30 ID:GneiHx9I.net]
まーまー、ここはわしの顔を立てて双方おとなしくしてくれまいか。

839 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:41:58.96 ID:ef59e0DS.net]
>>817
あーきみがいいたいのはそっちか
例題をこなす正規表現を提示している>>805,806宛と捉えたんだよね
すでに>>805,806出てるのになにも提示してないでぐちぐち言ってるんで

まあ気に障ったようなので安価張って絡んだ形になったのは謝るよ

840 名前:デフォルトの名無しさん [2019/04/23(火) 19:46:57.33 ID:yIB0exXp.net]
>>819
>>807>>803宛だと明示してるし
>>805>>806なんてどこにも書かれていないのに勝手に勘違いされてもさあ。
どこをどう見たってお前が勝手に絡んで来てるのに
「絡んだ形」とかふざけた言い方すんなよ。

841 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 19:37:45.85 ID:kN2xWSes.net]
質問者の例題は数に応じた置換の簡単なサンプルが欲しくて書いたものだと思う
再帰的に無理やり導くクソコードなんて書かれても迷惑なだけでしょ

842 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 21:35:46.86 ID:SVxlletW.net]
端からは大人と子供
ご愁傷様

843 名前:デフォルトの名無しさん [2019/04/25(木) 02:00:13.99 ID:nkf4NYVZ.net]
pythonスレで似たテーマ観たからマルチ認定

844 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 22:15:29.45 ID:pXwlHtT3.net]
sedとpythonじゃまるで違うから別件だろうな

>>819
勘違いして迷惑かけた分際で「ぐちぐち」って言葉を使うか普通..

というかこの文体、昔セガBBSにいた南瓜さんという人にそっくりだな
別人だろうけど思い出してワロタ

845 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 22:34:09.92 ID:7hEPz6dq.net]
しばらくぶりにノゾいたらワロタ

ID:yIB0exXp
hissi.org

846 名前:/read.php/tech/20190423/eUlCMGV4WHA.html

平日の朝から晩まで
内容がとっても抽象的
ネット弁慶クンってホントにいるんだな!w
[]
[ここ壊れてます]

847 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 23:09:55.86 ID:DINb0EDe.net]
マ板恒例、湿度高めの展開になってきましたー



848 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 13:12:59.58 ID:W9D3URJl.net]
オブジェクト指向最高さんは今回まったく落ち度が無い
迷惑かけといて素直に謝ることも出来ないくそコード製造機はもう来なくていい

849 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 21:25:24.59 ID:CxhHumup.net]
翌日以降もこんな感じですよ
ttp://hissi.org/read.php/tech/20190424/M1dYN3QzOXA.html
ttp://hissi.org/read.php/tech/20190425/VThrOUNyV3U.html
ttp://hissi.org/read.php/tech/20190426/NGZaS2JZWkg.html
ttp://hissi.org/read.php/tech/20190427/QzZmMHJVWmE.html
こちらで引き取ってもらえませんか?

850 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 22:49:23.33 ID:Wy3P56AZ.net]
引き取ってくれてありがとう〜(^。^)

851 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 23:29:43.55 ID:NoMeOMsF.net]
よろしくお願い致します。

●Regular Expressionの使用環境
Python 3.7

●検索か置換か?
検索

●説明
3つ目と4つ目のダブルクオートの間の文字列を探す

●対象データ
"文字列1":[1000:"文字列2"]

●希望する結果
文字列2

852 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 07:22:28.54 ID:NTWA4E5y.net]
>>830
Javaの正規表現テストサイト(*1)でしか試してないけど…
(?:[^"]*"){3}([^"]*)"

*1 https://regex-testdrive.com/ja/

853 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 08:48:50.22 ID:ZbLZAkBS.net]
>>831
文字列1が空だと空振るのでいっそベタ書きするかな
それと対象の規模によっては計算量も30%少なくて済む
"[^"]*"[^"]*"([^"]*)"

くどいーと思ってまとめてみても
"(?:[^"]*"){2}([^"]*)"
若干悪化して15%offくらいに留まる

854 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 09:14:01.64 ID:js+SNbQS.net]
やっぱり可変長の戻り読み使えないなら後方参照で抜き出すしかないよね
というか正規表現以外で抜き出した方が処理軽いんじゃ

855 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 10:41:49.43 ID:NTWA4E5y.net]
>>832
> 文字列1が空だと空振るのでいっそベタ書きするかな
空振るの意味がよくわからん
効率は考えてない

856 名前:デフォルトの名無しさん mailto:sage [2019/05/30(木) 16:00:31.98 ID:0UuZnvit.net]
>>834
皆様、ありがとうございます。
>>831にてご提案頂いたものに、Pythonのエスケープシーケンスを加えて採用しました。
ほか、ご提案頂いたものも大変勉強になりました。

857 名前:デフォルトの名無しさん mailto:sage [2019/06/12(水) 18:51:34.75 ID:8qMgnvIv.net]
正規表現で全角記号だけ抜き出す事はできますか?
★ファイル名 
みたいにして先頭に来るようにしてたんですが、全角記号はエラーおこすことがあるようです



858 名前:デフォルトの名無しさん mailto:sage [2019/06/12(水) 20:16:21.08 ID:ATCcrAWn.net]
なんの処理系か書けよな

859 名前:デフォルトの名無しさん mailto:sage [2019/06/12(水) 20:18:49.53 ID:0U8oWwW8.net]
使用する文字コードも

860 名前:デフォルトの名無しさん mailto:sage [2019/06/17(月) 00:16:17.89 ID:ks+4WGLz.net]
助けてください。おながいします

●Regular Expressionの使用環境
Sakura Editor
(begonig.dll ver.3.06 with Onigmo 5.15.0)

●検索か置換か?
検索

●説明
日本語の文章の中に、全角英字が混じっています。
「全角英字の単語直後の任意の1文字」をマッチさせたいです。

(?<=[a-zA-Z]+).
でいけると思ったのですが、invalid pattern in look-behindでエラーになってしまいます。
どうもDLLの仕様で肯定後読みの式は固定文字長でなければならないらしく

861 名前:、代替案がないかなーと……

●対象データ
ああいいいabcうABCえおかきくけ

●希望する結果
「う」、「え」の2か所
[]
[ここ壊れてます]

862 名前:デフォルトの名無しさん mailto:sage [2019/06/17(月) 02:22:40.96 ID:FPrxRapn.net]
(?<=[a-zA-Z])[^a-zA-Z]

863 名前:デフォルトの名無しさん mailto:sage [2019/06/17(月) 06:40:06.13 ID:LXSfy5ij.net]
>>839
> 「全角英字の単語直後の任意の1文字」

> ああいいいabcうABCえおかきくけ
bcうBCえ

> 「う」、「え」の2か所
任意とは

864 名前:デフォルトの名無しさん mailto:sage [2019/06/17(月) 21:52:38.33 ID:ks+4WGLz.net]
>>840
天才!天才!解決しました。大量に感謝
発想が . に囚われていた……勉強になります

>>841
単語というのが1文字じゃなくて英字で構成されたブロックの〜という意味でした。わかりにくくてスマソ

865 名前:デフォルトの名無しさん mailto:sage [2019/06/18(火) 22:51:14.09 ID:y1gFJJpS.net]
ちょっとした疑問
アラビア語のような右書き言葉だと正規表現をどう書くのだろう
文字列も正規表現も右書きだから、/xyz$/ は /$zyx/ ?

(レス不要です)

866 名前:デフォルトの名無しさん [2019/06/19(水) 05:02:00.28 ID:tVNS+22r.net]
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/

867 名前:デフォルトの名無しさん [2019/06/19(水) 14:27:57.27 ID:Yoy0IPRe.net]
いし正が左らか右は語本日



868 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 22:51:37.03 ID:WHM6Ibwm.net]
>>836
理論上は
|
で全部やればできる


ちょうど単なる全角(
1文字が2つの幅をもつ
ロシアの言語なども2幅
)
を捉えようとしていたので道具を紹介
https://i.imgur.com/9l39lUv.jpg
正規表現は (.) で1文字を習得し
バイト数が1でないものを拾うロジック

869 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 06:26:17.63 ID:F4CLQWNj.net]
ttps://so-zou.jp/software/tech/programming/tech/regular-expression/meta-character/variable-width-encoding.htm
こういうので全角記号だけさっくり選ばせろって事なんだろうけど
全角半角はユニコードだとフォント依存なので曖昧
ascii 以外って意味で言ってるんだろうけど
恐らく"ファイル名"て事からSJisの範疇外の文字って事かなと

870 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 21:23:57.79 ID:4+LiJo6+.net]
一文字決めうち かつ あらっぽいコレクション
vim の :h digraphs には結構ある
[??????????▲△??▼▽??◆◇?○◎●??????★☆?????♀♂?????♪?♭?♯??? 、。〃?々〆〇《》]

871 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 21:24:32.12 ID:4+LiJo6+.net]
[??????????▲△??▼▽??◇?○◎●??????★☆?????♀♂?????♪?♭?♯??? 、。〃?々〆〇《》]

872 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 21:24:52.95 ID:4+LiJo6+.net]
[??????????△??▼▽??◆◇?○◎●??????★☆?????♀♂?????♪?♭?♯??? 、。〃?々〆〇《》]

873 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 21:28:31.79 ID:4+LiJo6+.net]
おわった
NG word 群が正規表現を妨げる

一文字限定なら [] の処理が早い
vim の :h digraphs
には 1300個ぐらいの 記号を含むデータリストがあるから
それから組みたてやすい とおもう

874 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 21:56:38.71 ID:meJBThiE.net]
NGワードと文字化けの区別ができない人は書き込んじゃダメ。

875 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 23:17:52.70 ID:4+LiJo6+.net]
そういえばブラウザに NG word に指定したのは自分だった
あらしが記号を使ってたことがあったので

876 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 07:18:11.77 ID:0Do2GL77.net]
荒らしが記号を使うことと書き込みを制限することに全く関連が無い

877 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 08:36:20.64 ID:Y04/VZ6Y.net]
https://i.imgur.com/QA0OVK8.jpg

こう見えていたんだ
左がわひどいね ごめんね



878 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 00:38:09.05 ID:m6vFYfK4.net]
●Regular Expressionの使用環境
サクラ

879 名前:エディタ(か秀丸エディタ)

●検索か置換か?
置換

●説明
不定回数のパターンを置換したい。


●対象データ
[A=a,A=b,A=c,A=d,・・・・]
・・・・の部分はどこまで続くのかは決まってない。が、多くても20個くらい

●希望する結果
A=a,b,c,d・・・・
[]
[ここ壊れてます]

880 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 05:29:01.40 ID:9IE9wmRC.net]
(?<!^)A=

881 名前:854 mailto:sage [2019/07/08(月) 23:27:17.45 ID:Rb/08H3f.net]
>>857
ありがとうございます。
否定戻り読みってこうやって使うのですね。

もうちょっと深掘りして以下の場合どのようになるでしょう。
■対象データ
[A=a OR A=b OR A=c OR A=d・・・・]
[B=d OR B=c OR B=b OR B=a・・・・]
[C=a OR C=b OR C=c OR C=d・・・・]

■希望結果
A=a,b,c,d
B=d,c,b,a
C=a,b,c,d

ORの部分が難しくて混乱しています。。

882 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 08:43:33.27 ID:WA2fRW/e.net]
\s++OR\s++.=
,

883 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 09:18:54.80 ID:StxWbt+s.net]
ここの住民の正規表現能力は超人的だ
お節介させてくれ
もし使用環境に perl があれば、
ウルトラ難しい正規表現を理解可能な小さなパーツに分類できる

cat /dev/clipboard
[A=a OR A=b OR A=c OR A=d・・・・]
[B=d OR B=c OR B=b OR B=a・・・・]
[C=a OR C=b OR C=c OR C=d・・・・]

cat /dev/clipboard | perl -ne 'if ( m{^ \[ ( \w+ [=] ) }xcm) {print $1}; { if ( m{ = (\w+) \s }xcg ) {print "$1,"; redo} if ( m{ = (\w+) \S }xc ) {print "$1\n"} }'
A=a,b,c,d
B=d,c,b,a
C=a,b,c,d

884 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 09:35:40.67 ID:StxWbt+s.net]
そして同じような形を処理するのに
必要な正規表現が大きく変わったりしない

cat /dev/clipboard
[A=a,A=b,A=c,A=d,A=e,A=f,A=g,A=h,A=i,A=j]

cat /dev/clipboard | perl -ne 'if ( m{^ \[ ( \w+ [=] ) }xcm) {print $1}; { if ( m{ = ( \w+ [,] ) }cxg ) {print "$1"; redo} if ( m{ = (\w+) [^,] }xc ) {print "$1\n"} }'
A=a,b,c,d,e,f,g,h,i,j

885 名前:854 mailto:sage [2019/07/11(木) 01:01:12.77 ID:/KpWZOtx.net]
>>859
すごい。。
置換できましたありがとうございます。

が、情けない話ですがなぜこういう置換結果になるのかが理解できません。
良ければどなたか解説いただけないでしょうか

>>860
ほんと、超人的ですね。。

Perlでのご教授ありがとうございます。
1度組んでしまえば汎用的に使えそうですね。

886 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 21:00:44.92 ID:SCYCuKB+.net]
>>862
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja

887 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 20:47:25.54 ID:57lWPs8z.net]
動作についての質問です。よろしくお願いします。

●Regular Expressionの使用環境
JavaScript (chrome)

●検索か置換か?
検索

●説明
'@time;prop1:style1;prop2:style2'.match(/(^|[@;])[^@;]*/g); が
["", ";prop1:style1", ";prop2:style2"] になる理由が分かりません。私の理解では、
["", "@time",";prop1:style1", ";prop2:style2"] となって欲しいところです。
どなたか説明お願いします。
^は文字列検索位置を「動かさない」と認識しています。
(以前は「動かす」と誤認識していましたが、何かで見解を改められたことを記憶しています)

●対象データ
ID@time;style 形式の指定で、
ID、time、styleの省略は全てありで、timeとstyleの順序は自由(IDは必ず先頭)
@開始はtime指定、それ以外はstyle指定とし、デリミタは ; としています。
この形式で任意の文字列(ユーザー入力)を処理します。
なお、'@time;prop1:style1;prop2:style2'.match(/(^.|[@;])[^@;]*/g); では希望の解
["@time", ";prop1:style1", ";prop2:style2"] を得られていますが、
デバッグ中に上記に引っかかったので、分かりましたらよろしくお願いいたします。



888 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 23:13:26.72 ID:57lWPs8z.net]
正規表現の問題ではなくJavaScript固有の問題のようなので、質問を閉じ、
JavaScriptスレにて質問し直します。
興味のある方は以下をご覧ください。(これからすぐ投稿します)
https://mevius.5ch.net/test/read.cgi/tech/1417749547/341-

889 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 23:31:59.74 ID:57lWPs8z.net]
すいません自己解決しましたが一応。以下となりました。
https://mevius.5ch.net/test/read.cgi/tech/1417749547/341-342

890 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 04:59:50.53 ID:XILHsvHP.net]
この質問内容ならここで合ってます、jsスレよりもこのスレ向きです
正規表現には統一規格みたいなものは存在しないので環境によって動作が異なります

このスレの住民なら2番目のマッチが t から始まる環境も想定します
["","time", ";prop1:style1", ";prop2:style2"]

詳しい仕様を知らなくても動作を確認するコードを作っていろいろ試すと
どう動く環境なのかだいたい分かってしまうことが多いです

891 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 08:17:29.28 ID:LdVrbIxu.net]
>>867
> 正規表現には統一規格みたいなものは存在しないので環境によって動作が異なります
これは知ってますがBREの範囲だと当然間違いなく動くし、
ほぼPCREに向けて統一中、といったところなのでは?
まあやたら複雑になってバックトラッキング等の問題が発生し、
結果的に速いライブラリに収束して行っているのはいいことだと思いますが。

> このスレの住民なら2番目のマッチが t から始まる環境も想定します
> ["","time", ";prop1:style1", ";prop2:style2"]
これは一応アウトなのでは?正規表現自体はデリミタごと取り込もうとしており、それが出来ていません。
これを言うならJavaScriptもアウトですが。

個人的にはJavaScriptは面白いのですが仕様がイマイチなところが散見されるのが難点ですね。
それが初心者に無用な混乱を引き起こし、上達の妨げになっている。
今回私も数時間無駄にしましたが、これが初心者だと脱出出来なくて誤解したままになってしまう。
そして本人はそれを自覚出来ず、Web上に間違った情報を垂れ流し、馬鹿が再生産されるというループになっている。

この意味では正規表現の現在の状況も同じようなものですが、
正規表現は「実装の幅がものすごくある」と共有されているだけまだましです。
JavaScriptの連中はその間違った実装を「正しい」と思いこんでいたりするので、会話が成立しません。
といってもJavaScriptのString.matchの仕様バグを今更直すことも出来ず、未来永劫このままだと思いますが。

892 名前:デフォルトの名無しさん [2019/07/14(日) 10:58:08.46 ID:wR6d2dgQ.net]
PCREに向けて統一中なんてどんな根拠で喋ってんだ
regex101で試してみれば分かるけどPCRE使ってるPHP以外のPython, ECMAScript, Goは全滅だぞ

893 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 12:13:01.78 ID:LdVrbIxu.net]
>>869
ゴミという意味でだろ。
逆にお前はどう思ってるんだ?

JavaScriptのString.matchについては単にパッチを実装する場所を間違えただけ。
結果、String.match と RegExp.exec での結果が異なるという、言語内での不一致を引き起こしてる。
そしてこれはもう修正されることはない。
仕様バグとして永久に残り、プログラマに無駄な時間を消費させるだけのものとなる。
結果、言語が腐っていく。

正しくは RegExp.exec 側を修正し、両方とも無限ループにならずに
["", "@time",";prop1:style1", ";prop2:style2"]
を返すべきだった。
RegExp.lastIndex だけで状態管理出来ると「間違えた」からそうなった。
本来は先頭マッチフラグ RegExp.canMatchHead みたいなのが必要で、それを実装すれば両方とも正しい結果を返せた。
それを実装せず、String.match に間違ったパッチを当てたからそうなった。
これは実装者(おそらくブレンダンアイク本人)の判断ミスだ。

正規表現はPerlが再定義したと言っていい状況だ。だからみんなPCREを見てる。
PHPはさっさと取り込んだ。これは正しい判断だ。
JavaScriptはPCREを見てる。というか本来は取り込みたいのだろうが、上記のように今更部分がありすぎる。
Pythonには歴史的経緯があるのだろう、状況は知らん。
Goは最初から既にゴミだ。確実に廃れるだろうし、俺もそれを願っている。
そもそもGoなんてPCREが覇権取ったあとに出てきたのにPCREを採用してない時点でゴミ。
それ以外にもあの言語は独自路線を行き過ぎていて、ユーザーに無駄な勉強時間を強いている。
結果、既に他言語で慣らした強者が近づかず、結果的に馬鹿の楽園になってWeb系の馬鹿共に大受けしてるだけ。
Goの正規表現については詳しくは知らんが、仮にそれが奇妙な振る舞いをしたとして、お前はGo側の怠慢だと思わないのか?
JavaScriptやPython等それなりの歴史があるのならともかく、Goの場合は確実に防げた問題でしかない。
連中はそれを「わざと」やらなかったんだぞ。俺はそんな言語は支持しないし、ゴミだと何度でも断言する。

いずれにしても、今からの初心者が学ぶべきはPCREだろ。
お前は何が言いたいんだ?

894 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 12:35:52.54 ID:QmWR+pGh.net]
ゼロ幅で永久にマッチし続けるのになんで@timeに進めると思うの?

895 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 13:05:26.62 ID:LdVrbIxu.net]
>>871
お前は実装と仕様の違いを理解出来てないタイプだな。


String.matchは「マッチ全部を配列で返す」メソッドだ。
当然、無限ループなんてしてはいけない。
(ただし無限ループしない為に空文字マッチだと一文字進めるパッチだから仕様バグになってるが)

RegExp.execは「gマッチを一つずつ実行し、ユーザーがそこで適宜処理を行う」為のメソッドだ。
当然、何もしなければ順に次のマッチをしていくのが正しく、今現在のように無限ループするようでは駄目だ。
結果、今はユーザーが本来不要なコードを毎回書く羽目になってる。
具体的に言えば、 if (match!=='') が毎回必要になる。これが無駄だ。

JavaScript界隈にはお前みたいな馬鹿が多い。
本来はどうあるべきか、或いは何故この無駄なコードが必要なのか分からず、
今の「実装」が正しいと思いこんでいるタイプだ。
動かさないと分からない、あるいは動いていればいい程度のコードしか書けないからだが。
とはいえ、今回のようなケースに遭遇するとそうなるのも分かる気はするが。


いずれにしても、これはJavaScript環境固有の問題で、ここでは割とどうでもいいと思うが。
お前が正規表現として /(^|[@;])[^@;]*/g を書いたとき、全ての環境で無限ループするべきだ!と思っているのならそれでいいが、
実際はそうではないだろ?なら無駄にいちゃもんつけるなよ。

896 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 13:21:26.40 ID:XILHsvHP.net]
>>868
"t" からマッチは誤りでした、申し訳ない..

タグの外側だけ対象に置換する
www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside

この記事の動作のことを言いたかったんですがうろ覚えのまま
適当に書いてしまいました、ごめんなさい

897 名前:デフォルトの名無しさん [2019/07/14(日) 13:28:58.74 ID:wR6d2dgQ.net]
>>870
PCREに統一中だという主張の根拠を聞いたんだがそれへの回答はないわけだ
PCREが素晴らしい実装で最初に触っとけばいいというのは同意するが, それが最良だなんてのはあり得ないし単なる妄想だよ



898 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 14:15:14.24 ID:LdVrbIxu.net]
>>873
ああなるほど、Perlも似たようなゴミ実装になってるな。

> そこで,Perl では空文字列に マッチするような場合には,初回は空文字列がマッチするがそれ以降は マッチせずに必ず 1文字分は進むようにマッチしようとする.
これも実装ミスだ

899 名前:な。
正しくは、このフラグを「空文字以外のマッチごとにセット」すればいいだけで、修正は1行で済むのだが、こちらも今更なのだろう。
「初回は」というのが間違いで、「空文字にマッチした直後は」が正しい。
ついでにもっと具体的に言っておくと、「初回は」というのが正しければ、
今の実装は検索起動時にフラグをセットして空文字マッチ後にリセットしているはず。
このフラグを「空文字以外のマッチ後」に毎回セットし直すように1行入れる。これで直る。
君がPERL等のOSSか何かにcontributeする気があって修正案を出してくるのなら見てあげるけど。
(俺自身ではそこまでやる気はない)

まあしかし、JavaScriptだけがゴミじゃない、ってのは分かった。
というかもしかしてJavaScriptの実装ってPERL実装互換に敢えてしてる?



>>874
お前は何派なんだよ?
JavaScriptに関してはMDNでも前は「PCREで大体使えます」みたいな事書いてたぞ。
最近大幅リニューアルしてその記述はなくなったが。
(というより色々見にくくなってあまり確認してない)

鬼車派ならこの手の「実装ミス」をひたすら潰しておけばワンチャンあるかもしれんよ。
JavaScriptにしてもPerlにしてもこの辺のミスは確実に足枷になってる。
具体的に言うと遭遇した全プログラマが数時間ずつ無駄に検索その他をさせられる羽目になってる。
これは「新規プログラマ」からすると上達を妨げる障壁でしかない。
JavaScriptで言うと「IEデハー」な件を全部暗記してて今もそれにすがっている奴のウザさみたいなもんだ。
仕様バグがない、というのはそれなりに武器になる。
[]
[ここ壊れてます]

900 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 15:13:19.95 ID:LdVrbIxu.net]
>>869
今更regex101で確認してみたが、PCREだけは(これに関しては)正しく通るじゃねえかよ。

Perlの「初回は」というのはつまり g の時だけおかしくなるということであり、今回は当たらないからだが。
だからJavaScriptも仮にPerl実装互換にしようとしたとしてもしくってるな。


>>873
ちなみに
> > と < は後読みと先読みにして外に出すことができるので
の意味分かる?
おそらくはバックトラックを小さくする為(つまり高速化)だと思うのだが、
実際 regex101で試す限り余計に遅くなる。
テストサンプルはそこの下の「XMLタグを加工する」の上側半分のxmlで、こちらだと
(?:^|>)(.*?)(?:$|<) の場合は 29matches, 1277steps だが
(?:^|(?<=>))(.*?)(?:$|(?=<)) の場合は 29matches, 1875stepsで、余計に遅くなってる。
格好良くはないが別に $1$2$3 で置換しても問題ないと思うのだが。

901 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 15:29:05.53 ID:XILHsvHP.net]
>>876
> > と < は後読みと先読みにして外に出すことができるので

これは文字を消費しないための措置
マッチさせたい部分以外の部分にまでマッチしてしまうと次回の
検索開始位置が意図しないところに進んでしまったりするので先読みを
使って消費しないようにします

あとあなたが言ってることにはおおむね同意です
変な挙動は無くなるといいですね、perl6に期待したいところだけど
perl6では出来る限り最長文字数のマッチを目指す挙動になると聞いたような..
自分にとっては処理が重くなるのであまり嬉しくないですね..

902 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 16:03:14.68 ID:LdVrbIxu.net]
>>877
ああなるほど、\G使ってるからずれるのか、確かに。

BRE出身だから個人的には最初から />[^<]*</ が第一選択肢で、
筆者の発想が意味不明だったのだが、確かにそうだな。
ここら辺は正規表現だけで何とか出来る(Perl)思想と、
BREだけではどうにもならないからざっくり切り出して自前でプログラミングする(AWK)思想の違い

903 名前:セな。

Perl6はガン無視されてる感があるけどね。
今更Perlで組めるかよ、というのはPerlを使っている奴自身が感じていることらしいし。
(もっとも嫌われてる言語がPerl、2017はダントツの一位、
しかし同じStackOverflow実施の2018の結果はVBでperlは落ち着いたようだが)
https://stackoverflow.blog/2017/10/31/disliked-programming-languages/
https://news.mynavi.jp/article/20180604-639227/
もしかしてPerl6って徐々に使われだしてる?

> perl6では出来る限り最長文字数のマッチを目指す挙動になると聞いたような..
ん?
全てのプログラミング言語では最長マッチがデフォ、
というかそもそも下位の正規表現(BRE等)にはそれしかないが。(non-greedyがない)
XPATH等の文書検索側の人かな?だからって別に特に問題はないが。
[]
[ここ壊れてます]

904 名前:デフォルトの名無しさん [2019/07/15(月) 15:22:14.71 ID:y88H95dP.net]
Ruby で、

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

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

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

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

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

905 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:42:33.19 ID:xqOJLOC2.net]
>>879
テストしてくれたって事か?なら一応まとめておく。


/(^|[@;])[^@;]*/g に対してテスト文字列 '@time;prop1:style1;prop2:style2' で
PCRE: ["", "@time",";prop1:style1", ";prop2:style2"]
JavaScript, Python, Go, Ruby, : ["",";prop1:style1", ";prop2:style2"]

結論、PCRE以外全部ゴミ
現時点でPCREが最良だ馬鹿タレ >>874
お前が何派か知らんが、PCREが最良でないと言い張るのなら少なくとも通るライブラリを具体的に提示しろ


ただまあこれにはちょっと情状酌量の余地有りで、
おそらく ^ が「先頭文字」ではなく「位置」にマッチすると再定義したのはPerlだ。
そもそもBREには | がない。従って (^| のような「先頭の空文字」マッチなんて書けない。
だからBREだと先頭の「位置」なのか「文字」なのかを厳密に区別する必要がない。
| が導入されたのはEREからだが、EREなんて大して使われてない。
結果、BRE育ちの連中が「位置」だと厳密に認識せずにコーディングすると間違える、というわけ。
そしてJavaScript, Python, Go, Ruby は全滅だ。

JavaScriptに関してはPerlを模倣したわけでもなく、単なるミスだ。言語内不一致を生じているし。
他言語は知らん。

Rubyみたいに「実装が仕様だボケ」と言い張る糞言語ではこの手の仕様バグを永久に修正出来ない。
よって新人は毛嫌いして離れていく。当たり前の話だ。
JavaScriptはおそらくバグだと認識されているが、今更直せない。
Perl6はこの点、仕様と実装を分離したから、バージョンアップと共に確実に修正する。
従って最良は現時点でもPCREだし、今後ともPCREだ馬鹿タレ >>874

906 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 23:23:32.64 ID:3MPTmFRg.net]
BREの正規表現と今の正規表現の使い方の違いの話は面白いなぁ

しかしこの人こんなにすごいスキルとモチベがあるなら質問なんかせずに
自力でなんとか出来たのではw
質問してくれたおかげで面白い話をいろいろ聞けたからこちらは嬉しいけどネ

おかしな挙動と言えばperl5とOnigmoでは\Gの挙動に違いが
あってどちらかが違和感のある動作をしたはず
\Gの概念自体が微妙に違ったはずだけどメモるの忘れた
興味のある人はぐぐってね

907 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:24:59.03 ID:wQsYVdH6.net]
ネット弁慶がイキりたかっただけでしょ



908 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 16:08:47.84 ID:cpfSTA9t.net]
>JavaScript, Python, Go, Ruby, : ["",";prop1:style1", ";prop2:style2"]
深くて理解できないことが多いが、これはやばい気がする

909 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 17:23:30.54 ID: ]
[ここ壊れてます]






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

前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