[過去ログ]
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489511075/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
804: デフォルトの名無しさん [sage] 2019/04/23(火) 08:49:46.57 ID:ef59e0DS >>801 たぶんこれだけでは不要なところを置換しそう :a;s/1([^0\-]*)(?:[0\-])(.*)1/1$11$21/g;t a 例題をこなすのは確認 http://mevius.5ch.net/test/read.cgi/tech/1489511075/804
805: デフォルトの名無しさん [] 2019/04/23(火) 10:21:33.54 ID:yIB0exXp >>801 100010 とか 1000101 とか があるのか? あった場合はどうすべきか そこは明記しような。 謎だらけの設計書書く奴はIT向いてない。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/805
806: デフォルトの名無しさん [sage] 2019/04/23(火) 11:46:04.64 ID:ef59e0DS >>805 >>804で> 100010→111110、> 1000101→1111111は確認 というかオレは前後にゴミがつくことは何ら影響がある題とは思わなかった >>801の「1に挟まれたN個以下の0または-で構成された文字列を、同数の1で置き換える」にはその前後について言及ないから「触らない」と判断 後者を1000101→1111101で求めるかという点は気になるところ 最初の1〜1ブロックのみなのか、行中の1〜1最長一致ブロックなのか(すべての1〜1ブロ
ックを個別処理も同一) http://mevius.5ch.net/test/read.cgi/tech/1489511075/806
807: デフォルトの名無しさん [] 2019/04/23(火) 12:07:17.02 ID:yIB0exXp >>806 ()で囲うとなってれば入れ子のケースは当然問題になるんだから 入れ子を考慮する必要があるかを明確に定義してないのは駄目な仕様。 10-以外が現れた場合の扱いも明記されていない →現れることはないとみなしている んだから 100010は現れないと想定して書く選択肢もある。 いずれにしろ、不明瞭な仕様を書く奴は無能だし、 勝手に解釈するのも実際の仕事じゃトラブルの元。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/807
808: デフォルトの名無しさん [sage] 2019/04/23(火) 12:23:27.03 ID:ZY45SR7V 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" } http://mevius.5ch.net/test/read.cgi/tech/1489511075/808
809: デフォルトの名無しさん [sage] 2019/04/23(火) 12:38:52.51 ID:ef59e0DS >>807 反論と取られたのかな 反論でも賛意でもないよ 個人的には>>801が「よい定義や仕様」とは欠片も思わない一方で「ダメダメ」とも思わない 組んでいく中で詳細を詰めていくことも現実としてある あなたが求めているようながっちり仕様が決まっていたらむしろやることなんてほぼないかも 単に日本語を翻訳する作業になるのでむしろ苦痛かな… そこまで詰められるなら日本語で指示しないで自分で書けよと思ってしまうかも スレ的に読み替えればがっちり
仕様を出した上で「これは正規表現で可能か?」という命題に繋がるのでスレでがっちり仕様を出すなと言う意味ではないです(念為) 仕事でもなし頭の体操的にてきとーに答えてるだけなんでこれくらいなら気にしない派 http://mevius.5ch.net/test/read.cgi/tech/1489511075/809
810: デフォルトの名無しさん [] 2019/04/23(火) 13:02:53.90 ID:k/th3sVe % printf '100010\n1000101\n' | sed ':r; s/1[0-]\([0-]*1\)/11\1\n/; tr; s/\n//g' 111110 1111101 % http://mevius.5ch.net/test/read.cgi/tech/1489511075/810
811: 801 [] 2019/04/23(火) 13:49:39.47 ID:CFFnqXFD 問題が曖昧であったため議論を紛糾させてしまいました。すみません。 たしかに入れ子のことや、一致する最初の文字列か、最長か、01-以外の文字の存在などを明確に記載できていませんでした。 今回の問題で聞きたかったことをシンプルに表現すると、検索文字列の文字数(1〜N個)に依存した置換が可能なのか、になります。 そこについては先の人が回答してくださった通り、文字数を記憶しておくような処理は不可能であるから正規表現の範疇ではないと思いました。 これまでの意見から当初
目的ではないものの多くのヒントをもらいました。ありがとうございました。 問題提示者としていたらないながら、この話はクローズさせていただきます。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/811
812: デフォルトの名無しさん [] 2019/04/23(火) 13:52:46.13 ID:yIB0exXp >>809 反論だなんて受取ってないから妄想やめて。 定義が曖昧過ぎてねえ… としか言ってないから。 01-以外でいいのか、1.*1でいいのか などなど要件がこんな不明瞭じゃねえ と言う話しかしてないのであしからず。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/812
813: デフォルトの名無しさん [] 2019/04/23(火) 13:54:41.14 ID:yIB0exXp >>809 というか、そもそもお前宛じゃないのに なんでお前が絡んで来てるのか謎。 勝手にお前が批判されたと妄想するなよ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/813
814: デフォルトの名無しさん [sage] 2019/04/23(火) 15:45:58.43 ID:ef59e0DS >>813 > というか、そもそもお前宛じゃないのに ふあ? >>807(ID:yIB0exXp)で>>806(ID:ef59e0DS)に安価されてるからですよ んーなんなんかな(´д`) http://mevius.5ch.net/test/read.cgi/tech/1489511075/814
815: デフォルトの名無しさん [] 2019/04/23(火) 17:14:05.07 ID:yIB0exXp >>814 >>805のことだが。 お前宛じゃないのに絡んで来たのお前だろ。 記憶喪失ワロタw http://mevius.5ch.net/test/read.cgi/tech/1489511075/815
816: デフォルトの名無しさん [sage] 2019/04/23(火) 19:20:56.30 ID:GneiHx9I まーまー、ここはわしの顔を立てて双方おとなしくしてくれまいか。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/816
817: デフォルトの名無しさん [sage] 2019/04/23(火) 19:41:58.96 ID:ef59e0DS >>815 あーきみがいいたいのはそっちか 例題をこなす正規表現を提示している>>803,804宛と捉えたんだよね すでに>>803,804出てるのになにも提示してないでぐちぐち言ってるんで まあ気に障ったようなので安価張って絡んだ形になったのは謝るよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/817
818: デフォルトの名無しさん [] 2019/04/23(火) 19:46:57.33 ID:yIB0exXp >>817 >>805は>>801宛だと明示してるし >>803>>804なんてどこにも書かれていないのに勝手に勘違いされてもさあ。 どこをどう見たってお前が勝手に絡んで来てるのに 「絡んだ形」とかふざけた言い方すんなよ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/818
819: デフォルトの名無しさん [sage] 2019/04/24(水) 19:37:45.85 ID:kN2xWSes 質問者の例題は数に応じた置換の簡単なサンプルが欲しくて書いたものだと思う 再帰的に無理やり導くクソコードなんて書かれても迷惑なだけでしょ http://mevius.5ch.net/test/read.cgi/tech/1489511075/819
820: デフォルトの名無しさん [sage] 2019/04/24(水) 21:35:46.86 ID:SVxlletW 端からは大人と子供 ご愁傷様 http://mevius.5ch.net/test/read.cgi/tech/1489511075/820
821: デフォルトの名無しさん [] 2019/04/25(木) 02:00:13.99 ID:nkf4NYVZ pythonスレで似たテーマ観たからマルチ認定 http://mevius.5ch.net/test/read.cgi/tech/1489511075/821
822: デフォルトの名無しさん [sage] 2019/04/26(金) 22:15:29.45 ID:pXwlHtT3 sedとpythonじゃまるで違うから別件だろうな >>817 勘違いして迷惑かけた分際で「ぐちぐち」って言葉を使うか普通.. というかこの文体、昔セガBBSにいた南瓜さんという人にそっくりだな 別人だろうけど思い出してワロタ http://mevius.5ch.net/test/read.cgi/tech/1489511075/822
823: デフォルトの名無しさん [sage] 2019/04/26(金) 22:34:09.92 ID:7hEPz6dq しばらくぶりにノゾいたらワロタ ID:yIB0exXp http://hissi.org/read.php/tech/20190423/eUlCMGV4WHA.html 平日の朝から晩まで 内容がとっても抽象的 ネット弁慶クンってホントにいるんだな!w http://mevius.5ch.net/test/read.cgi/tech/1489511075/823
824: デフォルトの名無しさん [sage] 2019/04/26(金) 23:09:55.86 ID:DINb0EDe マ板恒例、湿度高めの展開になってきましたー http://mevius.5ch.net/test/read.cgi/tech/1489511075/824
825: デフォルトの名無しさん [sage] 2019/04/27(土) 13:12:59.58 ID:W9D3URJl オブジェクト指向最高さんは今回まったく落ち度が無い 迷惑かけといて素直に謝ることも出来ないくそコード製造機はもう来なくていい http://mevius.5ch.net/test/read.cgi/tech/1489511075/825
826: デフォルトの名無しさん [sage] 2019/04/27(土) 21:25:24.59 ID:CxhHumup 翌日以降もこんな感じですよ 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 こちらで引き取ってもらえませんか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/826
827: デフォルトの名無しさん [sage] 2019/05/04(土) 22:49:23.33 ID:Wy3P56AZ 引き取ってくれてありがとう〜(^。^) http://mevius.5ch.net/test/read.cgi/tech/1489511075/827
828: デフォルトの名無しさん [sage] 2019/05/29(水) 23:29:43.55 ID:NoMeOMsF よろしくお願い致します。 ●Regular Expressionの使用環境 Python 3.7 ●検索か置換か? 検索 ●説明 3つ目と4つ目のダブルクオートの間の文字列を探す ●対象データ "文字列1":[1000:"文字列2"] ●希望する結果 文字列2 http://mevius.5ch.net/test/read.cgi/tech/1489511075/828
829: デフォルトの名無しさん [sage] 2019/05/30(木) 07:22:28.54 ID:NTWA4E5y >>828 Javaの正規表現テストサイト(*1)でしか試してないけど… (?:[^"]*"){3}([^"]*)" *1 https://regex-testdrive.com/ja/ http://mevius.5ch.net/test/read.cgi/tech/1489511075/829
830: デフォルトの名無しさん [sage] 2019/05/30(木) 08:48:50.22 ID:ZbLZAkBS >>829 文字列1が空だと空振るのでいっそベタ書きするかな それと対象の規模によっては計算量も30%少なくて済む "[^"]*"[^"]*"([^"]*)" くどいーと思ってまとめてみても "(?:[^"]*"){2}([^"]*)" 若干悪化して15%offくらいに留まる http://mevius.5ch.net/test/read.cgi/tech/1489511075/830
831: デフォルトの名無しさん [sage] 2019/05/30(木) 09:14:01.64 ID:js+SNbQS やっぱり可変長の戻り読み使えないなら後方参照で抜き出すしかないよね というか正規表現以外で抜き出した方が処理軽いんじゃ http://mevius.5ch.net/test/read.cgi/tech/1489511075/831
832: デフォルトの名無しさん [sage] 2019/05/30(木) 10:41:49.43 ID:NTWA4E5y >>830 > 文字列1が空だと空振るのでいっそベタ書きするかな 空振るの意味がよくわからん 効率は考えてない http://mevius.5ch.net/test/read.cgi/tech/1489511075/832
833: デフォルトの名無しさん [sage] 2019/05/30(木) 16:00:31.98 ID:0UuZnvit >>832 皆様、ありがとうございます。 >>829にてご提案頂いたものに、Pythonのエスケープシーケンスを加えて採用しました。 ほか、ご提案頂いたものも大変勉強になりました。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/833
834: デフォルトの名無しさん [sage] 2019/06/12(水) 18:51:34.75 ID:8qMgnvIv 正規表現で全角記号だけ抜き出す事はできますか? ★ファイル名 みたいにして先頭に来るようにしてたんですが、全角記号はエラーおこすことがあるようです http://mevius.5ch.net/test/read.cgi/tech/1489511075/834
835: デフォルトの名無しさん [sage] 2019/06/12(水) 20:16:21.08 ID:ATCcrAWn なんの処理系か書けよな http://mevius.5ch.net/test/read.cgi/tech/1489511075/835
836: デフォルトの名無しさん [sage] 2019/06/12(水) 20:18:49.53 ID:0U8oWwW8 使用する文字コードも http://mevius.5ch.net/test/read.cgi/tech/1489511075/836
837: デフォルトの名無しさん [sage] 2019/06/17(月) 00:16:17.89 ID:ks+4WGLz 助けてください。おながいします ●Regular Expressionの使用環境 Sakura Editor (begonig.dll ver.3.06 with Onigmo 5.15.0) ●検索か置換か? 検索 ●説明 日本語の文章の中に、全角英字が混じっています。 「全角英字の単語直後の任意の1文字」をマッチさせたいです。 (?<=[a-zA-Z]+). でいけると思ったのですが、invalid pattern in look-behindでエラーになってしまいます。 どうもDLLの仕様で肯定後読みの式は固定文字長でなければならないらしく、代替
案がないかなーと…… ●対象データ ああいいいabcうABCえおかきくけ ●希望する結果 「う」、「え」の2か所 http://mevius.5ch.net/test/read.cgi/tech/1489511075/837
838: デフォルトの名無しさん [sage] 2019/06/17(月) 02:22:40.96 ID:FPrxRapn (?<=[a-zA-Z])[^a-zA-Z] http://mevius.5ch.net/test/read.cgi/tech/1489511075/838
839: デフォルトの名無しさん [sage] 2019/06/17(月) 06:40:06.13 ID:LXSfy5ij >>837 > 「全角英字の単語直後の任意の1文字」 > ああいいいabcうABCえおかきくけ bcうBCえ > 「う」、「え」の2か所 任意とは http://mevius.5ch.net/test/read.cgi/tech/1489511075/839
840: デフォルトの名無しさん [sage] 2019/06/17(月) 21:52:38.33 ID:ks+4WGLz >>838 天才!天才!解決しました。大量に感謝 発想が . に囚われていた……勉強になります >>839 単語というのが1文字じゃなくて英字で構成されたブロックの〜という意味でした。わかりにくくてスマソ http://mevius.5ch.net/test/read.cgi/tech/1489511075/840
841: デフォルトの名無しさん [sage] 2019/06/18(火) 22:51:14.09 ID:y1gFJJpS ちょっとした疑問 アラビア語のような右書き言葉だと正規表現をどう書くのだろう 文字列も正規表現も右書きだから、/xyz$/ は /$zyx/ ? (レス不要です) http://mevius.5ch.net/test/read.cgi/tech/1489511075/841
842: デフォルトの名無しさん [] 2019/06/19(水) 05:02:00.28 ID:tVNS+22r 【出資】松本卓朗 人工知能詐欺【注意】 https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/ http://mevius.5ch.net/test/read.cgi/tech/1489511075/842
843: デフォルトの名無しさん [] 2019/06/19(水) 14:27:57.27 ID:Yoy0IPRe いし正が左らか右は語本日 http://mevius.5ch.net/test/read.cgi/tech/1489511075/843
844: デフォルトの名無しさん [sage] 2019/06/23(日) 22:51:37.03 ID:WHM6Ibwm >>834 理論上は | で全部やればできる ちょうど単なる全角( 1文字が2つの幅をもつ ロシアの言語なども2幅 ) を捉えようとしていたので道具を紹介 https://i.imgur.com/9l39lUv.jpg 正規表現は (.) で1文字を習得し バイト数が1でないものを拾うロジック http://mevius.5ch.net/test/read.cgi/tech/1489511075/844
845: デフォルトの名無しさん [sage] 2019/06/24(月) 06:26:17.63 ID:F4CLQWNj ttps://so-zou.jp/software/tech/programming/tech/regular-expression/meta-character/variable-width-encoding.htm こういうので全角記号だけさっくり選ばせろって事なんだろうけど 全角半角はユニコードだとフォント依存なので曖昧 ascii 以外って意味で言ってるんだろうけど 恐らく"ファイル名"て事からSJisの範疇外の文字って事かなと http://mevius.5ch.net/test/read.cgi/tech/1489511075/845
846: デフォルトの名無しさん [sage] 2019/06/24(月) 21:23:57.79 ID:4+LiJo6+ 一文字決めうち かつ あらっぽいコレクション vim の :h digraphs には結構ある [??????????▲△??▼▽??◆◇?○◎●??????★☆?????♀♂?????♪?♭?♯??? 、。〃?々〆〇《》] http://mevius.5ch.net/test/read.cgi/tech/1489511075/846
847: デフォルトの名無しさん [sage] 2019/06/24(月) 21:24:32.12 ID:4+LiJo6+ [??????????▲△??▼▽??◇?○◎●??????★☆?????♀♂?????♪?♭?♯??? 、。〃?々〆〇《》] http://mevius.5ch.net/test/read.cgi/tech/1489511075/847
848: デフォルトの名無しさん [sage] 2019/06/24(月) 21:24:52.95 ID:4+LiJo6+ [??????????△??▼▽??◆◇?○◎●??????★☆?????♀♂?????♪?♭?♯??? 、。〃?々〆〇《》] http://mevius.5ch.net/test/read.cgi/tech/1489511075/848
849: デフォルトの名無しさん [sage] 2019/06/24(月) 21:28:31.79 ID:4+LiJo6+ おわった NG word 群が正規表現を妨げる 一文字限定なら [] の処理が早い vim の :h digraphs には 1300個ぐらいの 記号を含むデータリストがあるから それから組みたてやすい とおもう http://mevius.5ch.net/test/read.cgi/tech/1489511075/849
850: デフォルトの名無しさん [sage] 2019/06/24(月) 21:56:38.71 ID:meJBThiE NGワードと文字化けの区別ができない人は書き込んじゃダメ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/850
851: デフォルトの名無しさん [sage] 2019/06/24(月) 23:17:52.70 ID:4+LiJo6+ そういえばブラウザに NG word に指定したのは自分だった あらしが記号を使ってたことがあったので http://mevius.5ch.net/test/read.cgi/tech/1489511075/851
852: デフォルトの名無しさん [sage] 2019/06/25(火) 07:18:11.77 ID:0Do2GL77 荒らしが記号を使うことと書き込みを制限することに全く関連が無い http://mevius.5ch.net/test/read.cgi/tech/1489511075/852
853: デフォルトの名無しさん [sage] 2019/06/25(火) 08:36:20.64 ID:Y04/VZ6Y https://i.imgur.com/QA0OVK8.jpg こう見えていたんだ 左がわひどいね ごめんね http://mevius.5ch.net/test/read.cgi/tech/1489511075/853
854: デフォルトの名無しさん [sage] 2019/07/08(月) 00:38:09.05 ID:m6vFYfK4 ●Regular Expressionの使用環境 サクラエディタ(か秀丸エディタ) ●検索か置換か? 置換 ●説明 不定回数のパターンを置換したい。 ●対象データ [A=a,A=b,A=c,A=d,・・・・] ・・・・の部分はどこまで続くのかは決まってない。が、多くても20個くらい ●希望する結果 A=a,b,c,d・・・・ http://mevius.5ch.net/test/read.cgi/tech/1489511075/854
855: デフォルトの名無しさん [sage] 2019/07/08(月) 05:29:01.40 ID:9IE9wmRC (?<!^)A= http://mevius.5ch.net/test/read.cgi/tech/1489511075/855
856: 854 [sage] 2019/07/08(月) 23:27:17.45 ID:Rb/08H3f >>855 ありがとうございます。 否定戻り読みってこうやって使うのですね。 もうちょっと深掘りして以下の場合どのようになるでしょう。 ■対象データ [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の部分が難しくて混乱しています。。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/856
857: デフォルトの名無しさん [sage] 2019/07/10(水) 08:43:33.27 ID:WA2fRW/e \s++OR\s++.= , http://mevius.5ch.net/test/read.cgi/tech/1489511075/857
858: デフォルトの名無しさん [sage] 2019/07/10(水) 09:18:54.80 ID:StxWbt+s ここの住民の正規表現能力は超人的だ お節介させてくれ もし使用環境に 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 http://mevius.5ch.net/test/read.cgi/tech/1489511075/858
859: デフォルトの名無しさん [sage] 2019/07/10(水) 09:35:40.67 ID:StxWbt+s そして同じような形を処理するのに 必要な正規表現が大きく変わったりしない 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 http://mevius.5ch.net/test/read.cgi/tech/1489511075/859
860: 854 [sage] 2019/07/11(木) 01:01:12.77 ID:/KpWZOtx >>857 すごい。。 置換できましたありがとうございます。 が、情けない話ですがなぜこういう置換結果になるのかが理解できません。 良ければどなたか解説いただけないでしょうか >>858 ほんと、超人的ですね。。 Perlでのご教授ありがとうございます。 1度組んでしまえば汎用的に使えそうですね。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/860
861: デフォルトの名無しさん [sage] 2019/07/11(木) 21:00:44.92 ID:SCYCuKB+ >>860 https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja http://mevius.5ch.net/test/read.cgi/tech/1489511075/861
862: デフォルトの名無しさん [sage] 2019/07/13(土) 20:47:25.54 ID:57lWPs8z 動作についての質問です。よろしくお願いします。 ●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&
quot;, ";prop2:style2"] を得られていますが、 デバッグ中に上記に引っかかったので、分かりましたらよろしくお願いいたします。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/862
863: デフォルトの名無しさん [sage] 2019/07/13(土) 23:13:26.72 ID:57lWPs8z 正規表現の問題ではなくJavaScript固有の問題のようなので、質問を閉じ、 JavaScriptスレにて質問し直します。 興味のある方は以下をご覧ください。(これからすぐ投稿します) https://mevius.5ch.net/test/read.cgi/tech/1417749547/341- http://mevius.5ch.net/test/read.cgi/tech/1489511075/863
864: デフォルトの名無しさん [sage] 2019/07/13(土) 23:31:59.74 ID:57lWPs8z すいません自己解決しましたが一応。以下となりました。 https://mevius.5ch.net/test/read.cgi/tech/1417749547/341-342 http://mevius.5ch.net/test/read.cgi/tech/1489511075/864
865: デフォルトの名無しさん [sage] 2019/07/14(日) 04:59:50.53 ID:XILHsvHP この質問内容ならここで合ってます、jsスレよりもこのスレ向きです 正規表現には統一規格みたいなものは存在しないので環境によって動作が異なります このスレの住民なら2番目のマッチが t から始まる環境も想定します ["","time", ";prop1:style1", ";prop2:style2"] 詳しい仕様を知らなくても動作を確認するコードを作っていろいろ試すと どう動く環境なのかだいたい分かってしまうことが多いです http://mevius.5ch.net/t
est/read.cgi/tech/1489511075/865
866: デフォルトの名無しさん [sage] 2019/07/14(日) 08:17:29.28 ID:LdVrbIxu >>865 > 正規表現には統一規格みたいなものは存在しないので環境によって動作が異なります これは知ってますがBREの範囲だと当然間違いなく動くし、 ほぼPCREに向けて統一中、といったところなのでは? まあやたら複雑になってバックトラッキング等の問題が発生し、 結果的に速いライブラリに収束して行っているのはいいことだと思いますが。 > このスレの住民なら2番目のマッチが t から始まる環境も想定します > ["","time", &quo
t;;prop1:style1", ";prop2:style2"] これは一応アウトなのでは?正規表現自体はデリミタごと取り込もうとしており、それが出来ていません。 これを言うならJavaScriptもアウトですが。 個人的にはJavaScriptは面白いのですが仕様がイマイチなところが散見されるのが難点ですね。 それが初心者に無用な混乱を引き起こし、上達の妨げになっている。 今回私も数時間無駄にしましたが、これが初心者だと脱出出来なくて誤解したままになってしまう。 そして本人はそれを自覚出来ず、Web上に間違った情報を垂れ流し、馬鹿が再生産されると
いうループになっている。 この意味では正規表現の現在の状況も同じようなものですが、 正規表現は「実装の幅がものすごくある」と共有されているだけまだましです。 JavaScriptの連中はその間違った実装を「正しい」と思いこんでいたりするので、会話が成立しません。 といってもJavaScriptのString.matchの仕様バグを今更直すことも出来ず、未来永劫このままだと思いますが。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/866
867: デフォルトの名無しさん [] 2019/07/14(日) 10:58:08.46 ID:wR6d2dgQ PCREに向けて統一中なんてどんな根拠で喋ってんだ regex101で試してみれば分かるけどPCRE使ってるPHP以外のPython, ECMAScript, Goは全滅だぞ http://mevius.5ch.net/test/read.cgi/tech/1489511075/867
868: デフォルトの名無しさん [sage] 2019/07/14(日) 12:13:01.78 ID:LdVrbIxu >>867 ゴミという意味でだろ。 逆にお前はどう思ってるんだ? 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だろ。 お前は何が言いたいんだ? http://mevius.5ch.net/test/read.cgi/tech/1489511075/868
869: デフォルトの名無しさん [sage] 2019/07/14(日) 12:35:52.54 ID:QmWR+pGh ゼロ幅で永久にマッチし続けるのになんで@timeに進めると思うの? http://mevius.5ch.net/test/read.cgi/tech/1489511075/869
870: デフォルトの名無しさん [sage] 2019/07/14(日) 13:05:26.62 ID:LdVrbIxu >>869 お前は実装と仕様の違いを理解出来てないタイプだな。 String.matchは「マッチ全部を配列で返す」メソッドだ。 当然、無限ループなんてしてはいけない。 (ただし無限ループしない為に空文字マッチだと一文字進めるパッチだから仕様バグになってるが) RegExp.execは「gマッチを一つずつ実行し、ユーザーがそこで適宜処理を行う」為のメソッドだ。 当然、何もしなければ順に次のマッチをしていくのが正しく、今現在のように無限ループするようでは駄目だ。
結果、今はユーザーが本来不要なコードを毎回書く羽目になってる。 具体的に言えば、 if (match!=='') が毎回必要になる。これが無駄だ。 JavaScript界隈にはお前みたいな馬鹿が多い。 本来はどうあるべきか、或いは何故この無駄なコードが必要なのか分からず、 今の「実装」が正しいと思いこんでいるタイプだ。 動かさないと分からない、あるいは動いていればいい程度のコードしか書けないからだが。 とはいえ、今回のようなケースに遭遇するとそうなるのも分かる気はするが。 いずれにしても、これはJavaScript環境固有の問題で、ここでは割とど
うでもいいと思うが。 お前が正規表現として /(^|[@;])[^@;]*/g を書いたとき、全ての環境で無限ループするべきだ!と思っているのならそれでいいが、 実際はそうではないだろ?なら無駄にいちゃもんつけるなよ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/870
871: デフォルトの名無しさん [sage] 2019/07/14(日) 13:21:26.40 ID:XILHsvHP >>866 "t" からマッチは誤りでした、申し訳ない.. タグの外側だけ対象に置換する http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside この記事の動作のことを言いたかったんですがうろ覚えのまま 適当に書いてしまいました、ごめんなさい http://mevius.5ch.net/test/read.cgi/tech/1489511075/871
872: デフォルトの名無しさん [] 2019/07/14(日) 13:28:58.74 ID:wR6d2dgQ >>868 PCREに統一中だという主張の根拠を聞いたんだがそれへの回答はないわけだ PCREが素晴らしい実装で最初に触っとけばいいというのは同意するが, それが最良だなんてのはあり得ないし単なる妄想だよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/872
873: デフォルトの名無しさん [sage] 2019/07/14(日) 14:15:14.24 ID:LdVrbIxu >>871 ああなるほど、Perlも似たようなゴミ実装になってるな。 > そこで,Perl では空文字列に マッチするような場合には,初回は空文字列がマッチするがそれ以降は マッチせずに必ず 1文字分は進むようにマッチしようとする. これも実装ミスだな。 正しくは、このフラグを「空文字以外のマッチごとにセット」すればいいだけで、修正は1行で済むのだが、こちらも今更なのだろう。 「初回は」というのが間違いで、「空文字にマッチした直後は」が正しい。 つい
でにもっと具体的に言っておくと、「初回は」というのが正しければ、 今の実装は検索起動時にフラグをセットして空文字マッチ後にリセットしているはず。 このフラグを「空文字以外のマッチ後」に毎回セットし直すように1行入れる。これで直る。 君がPERL等のOSSか何かにcontributeする気があって修正案を出してくるのなら見てあげるけど。 (俺自身ではそこまでやる気はない) まあしかし、JavaScriptだけがゴミじゃない、ってのは分かった。 というかもしかしてJavaScriptの実装ってPERL実装互換に敢えてしてる? >>872 お前は何派なんだよ
? JavaScriptに関してはMDNでも前は「PCREで大体使えます」みたいな事書いてたぞ。 最近大幅リニューアルしてその記述はなくなったが。 (というより色々見にくくなってあまり確認してない) 鬼車派ならこの手の「実装ミス」をひたすら潰しておけばワンチャンあるかもしれんよ。 JavaScriptにしてもPerlにしてもこの辺のミスは確実に足枷になってる。 具体的に言うと遭遇した全プログラマが数時間ずつ無駄に検索その他をさせられる羽目になってる。 これは「新規プログラマ」からすると上達を妨げる障壁でしかない。 JavaScriptで言うと「IEデハー」
な件を全部暗記してて今もそれにすがっている奴のウザさみたいなもんだ。 仕様バグがない、というのはそれなりに武器になる。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/873
874: デフォルトの名無しさん [sage] 2019/07/14(日) 15:13:19.95 ID:LdVrbIxu >>867 今更regex101で確認してみたが、PCREだけは(これに関しては)正しく通るじゃねえかよ。 Perlの「初回は」というのはつまり g の時だけおかしくなるということであり、今回は当たらないからだが。 だからJavaScriptも仮にPerl実装互換にしようとしたとしてもしくってるな。 >>871 ちなみに > > と < は後読みと先読みにして外に出すことができるので の意味分かる? おそらくはバックトラックを小さくする為(つまり高速化)だと思うのだ
が、 実際 regex101で試す限り余計に遅くなる。 テストサンプルはそこの下の「XMLタグを加工する」の上側半分のxmlで、こちらだと (?:^|>)(.*?)(?:$|<) の場合は 29matches, 1277steps だが (?:^|(?<=>))(.*?)(?:$|(?=<)) の場合は 29matches, 1875stepsで、余計に遅くなってる。 格好良くはないが別に $1$2$3 で置換しても問題ないと思うのだが。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/874
875: デフォルトの名無しさん [sage] 2019/07/14(日) 15:29:05.53 ID:XILHsvHP >>874 > > と < は後読みと先読みにして外に出すことができるので これは文字を消費しないための措置 マッチさせたい部分以外の部分にまでマッチしてしまうと次回の 検索開始位置が意図しないところに進んでしまったりするので先読みを 使って消費しないようにします あとあなたが言ってることにはおおむね同意です 変な挙動は無くなるといいですね、perl6に期待したいところだけど perl6では出来る限り最長文字数のマッチを目指す挙動になると聞いたよ
うな.. 自分にとっては処理が重くなるのであまり嬉しくないですね.. http://mevius.5ch.net/test/read.cgi/tech/1489511075/875
876: デフォルトの名無しさん [sage] 2019/07/14(日) 16:03:14.68 ID:LdVrbIxu >>875 ああなるほど、\G使ってるからずれるのか、確かに。 BRE出身だから個人的には最初から />[^<]*</ が第一選択肢で、 筆者の発想が意味不明だったのだが、確かにそうだな。 ここら辺は正規表現だけで何とか出来る(Perl)思想と、 BREだけではどうにもならないからざっくり切り出して自前でプログラミングする(AWK)思想の違いだな。 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がない) XPA
TH等の文書検索側の人かな?だからって別に特に問題はないが。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/876
877: デフォルトの名無しさん [] 2019/07/15(月) 15:22:14.71 ID:y88H95dP Ruby で、 str = "@time;prop1:style1;prop2:style2" re = /((^|[@;])[^@;]*)/ p results = str.scan( re ) # [["", ""], [";prop1:style1", ";"], [";prop2:style2", ";"]] [ 0 ]がマッチした部分、[ 1 ]がキャプチャー部分 >>862 の、["", ";prop1:style1", ";prop2:style2"] と同じ結果 http://mevius.5ch.net/test/read.cgi/tech/1489511075/877
878: デフォルトの名無しさん [sage] 2019/07/15(月) 16:42:33.19 ID:xqOJLOC2 >>877 テストしてくれたって事か?なら一応まとめておく。 /(^|[@;])[^@;]*/g に対してテスト文字列 '@time;prop1:style1;prop2:style2' で PCRE: ["", "@time",";prop1:style1", ";prop2:style2"] JavaScript, Python, Go, Ruby, : ["",";prop1:style1", ";prop2:style2"] 結論、PCRE以外全部ゴミ 現時点でPCREが最良だ馬鹿タレ >>872 お前が何派か知らんが、PCREが最良でないと
言い張るのなら少なくとも通るライブラリを具体的に提示しろ ただまあこれにはちょっと情状酌量の余地有りで、 おそらく ^ が「先頭文字」ではなく「位置」にマッチすると再定義したのはPerlだ。 そもそもBREには | がない。従って (^| のような「先頭の空文字」マッチなんて書けない。 だからBREだと先頭の「位置」なのか「文字」なのかを厳密に区別する必要がない。 | が導入されたのはEREからだが、EREなんて大して使われてない。 結果、BRE育ちの連中が「位置」だと厳密に認識せずにコーディングすると間違える、というわけ。 そしてJavaScript
, Python, Go, Ruby は全滅だ。 JavaScriptに関してはPerlを模倣したわけでもなく、単なるミスだ。言語内不一致を生じているし。 他言語は知らん。 Rubyみたいに「実装が仕様だボケ」と言い張る糞言語ではこの手の仕様バグを永久に修正出来ない。 よって新人は毛嫌いして離れていく。当たり前の話だ。 JavaScriptはおそらくバグだと認識されているが、今更直せない。 Perl6はこの点、仕様と実装を分離したから、バージョンアップと共に確実に修正する。 従って最良は現時点でもPCREだし、今後ともPCREだ馬鹿タレ >>872 http://mevius.5ch.net
/test/read.cgi/tech/1489511075/878
879: デフォルトの名無しさん [sage] 2019/07/15(月) 23:23:32.64 ID:3MPTmFRg BREの正規表現と今の正規表現の使い方の違いの話は面白いなぁ しかしこの人こんなにすごいスキルとモチベがあるなら質問なんかせずに 自力でなんとか出来たのではw 質問してくれたおかげで面白い話をいろいろ聞けたからこちらは嬉しいけどネ おかしな挙動と言えばperl5とOnigmoでは\Gの挙動に違いが あってどちらかが違和感のある動作をしたはず \Gの概念自体が微妙に違ったはずだけどメモるの忘れた 興味のある人はぐぐってね http://mevius.5ch.net/test/read.cgi/
tech/1489511075/879
880: デフォルトの名無しさん [sage] 2019/07/16(火) 15:24:59.03 ID:wQsYVdH6 ネット弁慶がイキりたかっただけでしょ http://mevius.5ch.net/test/read.cgi/tech/1489511075/880
881: デフォルトの名無しさん [sage] 2019/07/16(火) 16:08:47.84 ID:cpfSTA9t >JavaScript, Python, Go, Ruby, : ["",";prop1:style1", ";prop2:style2"] 深くて理解できないことが多いが、これはやばい気がする http://mevius.5ch.net/test/read.cgi/tech/1489511075/881
882: デフォルトの名無しさん [sage] 2019/07/16(火) 17:23:30.54 ID:hAAouWtx 読んでるだけで何も考えてなかったけど /(^|[@;])[^@;]*/g この書き方以外の書き方で意図した動作になるように書けないのかな ここの人はこういうの得意だからもしかしたら・・? http://mevius.5ch.net/test/read.cgi/tech/1489511075/882
883: デフォルトの名無しさん [sage] 2019/07/16(火) 18:30:33.69 ID:AvaVqNzm 一所懸命挑発的に書いてるのに全然乗ってもらえなくてかわいそう http://mevius.5ch.net/test/read.cgi/tech/1489511075/883
884: デフォルトの名無しさん [sage] 2019/07/16(火) 19:27:45.24 ID:hAAouWtx 言ってることに説得力がありすぎて聞き入ってしまってたよ どんどん言いたいことを言って欲しい 昔のdanさんを思い出すなぁ http://mevius.5ch.net/test/read.cgi/tech/1489511075/884
885: デフォルトの名無しさん [sage] 2019/07/16(火) 20:41:55.62 ID:bFMew56o 入力フォーマットが正しいという前提で /@?[^@;]+/ の方が好み そもそも正規表現使うより ; でsplitした方が良くね?とおm http://mevius.5ch.net/test/read.cgi/tech/1489511075/885
886: デフォルトの名無しさん [sage] 2019/07/16(火) 21:03:17.33 ID:hMJFhr7R >>881 深くはない、単にバグってるだけ。 そしてそれはやばいどころではなく、全く話にならないレベルの物だ。使い物にならない。 例えば、図書館の蔵書をユーザーにも検索出来るようにしたとして、正規表現検索も選べるとしよう。 この場合、検索結果に現れないケースが発生することになり、使い物にならない。 プログラミング言語内の正規表現エンジンは「今までのプログラムが動かなくなる」危険があるからそうそう交換出来ないが、 図書館DBの検索フロントエ
ンド内のエンジンなんて即交換可能なんだから、問題があればすぐ乗り換えられる。 PCREが気に入らないのならこんなところで無駄吠えするのではなく、 PCREがバグっているケース(例のタグ外側マッチとか)でもばっちり動く検索エンジンを提供して、乗り換えを待てばいいだけ。 現状、PCRE以外全部バグっているのだから救いようがないが。 JavaScriptの場合はatomエディターなる物があって、htmlやプログラムソースコードを編集出来るが、 JavaScriptの場合はreplaceもバグっているので、命中すれば、全置換しても全置換出来てないケースが発生する。
リファクタ等で変数名を変えるとき、手でやるとバグるので、当然エディタ機能で全置換させるわけだが、この場合にもバグる訳だ。 そしてユーザーはこのときに置換漏れが発生するとは全く思わないので、かなり手間取ることになる。 (atomでは対策されていると信じたい) JavaScriptの場合はこのバグも「仕様」としてしまっているので、 逆に言えば仕様通りならバグに命中したときの挙動も確定してる。だから対策は出来るが、 Rubyみたいに「実装が仕様だ」と言い張る糞言語だとどういう挙動か確認してみなければ分からず、対策が出来ない。 ここらへん
もRubyの思想は数周遅れている。 いずれにしてもこんな基本的なところのバグはあっても迷惑でしかなく、さっさと直せ、でしかない。 「速い」以前に「ヒットしない」エンジンなんて使い物にならないだろ。 エンジン競争しているつもりの馬鹿共も、方向性を完全に間違ってる。 「間違いなく動作する」エンジンを提供すれば、文書検索側の人間はサクッと乗り換えてくれるだろうさ。 速い遅いはその後の話だ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/886
887: デフォルトの名無しさん [sage] 2019/07/16(火) 21:18:41.35 ID:hMJFhr7R >>879 BREの場合はやりきる前提ではないので、例えば例のタグ外側マッチだと、 元の文字列に > と < を足してしまって置換し、出力時に削る、みたいなことをする。 具体的には以下。 ('>' + str + '<').replace(/>[^<]*</,'>bar<').slice(1,-1) だからBREしか使えないAWKでも意外と何とかなったりする。 ただしこれはプログラミング出来る前提であって、 Webページに検索窓だけ提供されているような状態ではどうにもならないが。 &
gt;>885 それは正しい。実際俺もそれに近いことをしている。 デリミタが最初に出現もあり、最後に付加もあり、つまり ';prop:style1' や 'prop:style1;prop:style2;' もありなので、 結局 /(^|[@;])[^@;]*/g だと後のコードが綺麗に書けなかった。 /(^.|[@;])[^@;]*/g でも同じ。 意味的には @ もデリミタ扱いしているだけなので、実もフタもないが、@を ;@にしてsplitした。 具体的には以下。 str.replace(/@/g,';@').split(';').filter(v=>v) http://mevius.5ch.net/test/read.cgi/tech/1489511075/887
888: デフォルトの名無しさん [sage] 2019/07/16(火) 22:42:20.32 ID:P37s1FHo 一度言った内容は繰り返さなくていいです http://mevius.5ch.net/test/read.cgi/tech/1489511075/888
889: デフォルトの名無しさん [sage] 2019/07/17(水) 08:28:41.50 ID:2/Bgill9 >>873訂正 俺は俺のケースだけ考えていたが、これだと871内URLの筆者のケースと合致しない。 そこで一応、両方とも合致する実装を考えてみた。 (といってもバグってる実装について推測すること自体はあまり意味がないが) Perlはおそらく、^のフラグではなくて、空文字マッチ後のそのマッチ区間の*を+にしてる。 (というより筆者もそう言っているのだが俺が早とちりしてしまった) 871のケースだと、正規表現 (?:^|>)(.*?)(?:$|<) に対して、 1回目:(?:^|
>)(.*?)(?:$|<) 2回目:(?:^|>)(.+?)(?:$|<) というわけだ。結果、2回目は「先頭、<含んだ1文字、次の<まで、となり、 その筆者の説明通り先頭タグを含んで次タグ或いは文末まで伸びることになる。 俺のケースでは、正規表現 (^|[@;])[^@;]* に対して、 1回目:(^|[@;])[^@;]* 2回目:(^|[@;])[^@;]+ だから '@time;prop1:style1;prop2:style2' に対して @time のマッチも正しく取れることになる。 こういった場合、実装者は安全側に倒したくなる物だが、 現実は安全側に倒しすぎて余分なケースを含んでしまい、結果、バグってい
るというわけだ。 JavaScriptは最高に安全な実装、「空文字マッチは1文字進める」とした。(おそらくRubyその他もそう) これだと絶対に無限ループはしないが、俺のケースでバグる。 Perlの実装だと俺のケースは通るが、871内URLの筆者のケースでバグる。 その他バグケースも出してくれれば俺の推測で合っているかどうかは答える。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/889
890: デフォルトの名無しさん [sage] 2019/07/17(水) 08:28:59.00 ID:2/Bgill9 正しい実装は、「経路全体」(つまりツリーのリーフ)に対してフラグを持たないといけない。 Perlは「区間」(=経路の一部)に対してフラグをつけてしまったところが間違いだ。 871のケース、単純化する為に (A0|A1)B(C0|C1)として、 1回目:A0BC1 で空文字マッチ そして空文字マッチの場合はこれを記録し、これと同一の場合は次回以降はスキップする。 結果、2回目:最初に A0BC1 がマッチするがこれは捨てられ、次に A1BC0またはA1BC1となる。 そして非空文字マッチとな
ったので、この記録を全破棄して、同様にループを繰り返せばいい。 実装の修正は、探索関数そのものにだいぶ手を入れないといけないのでそれなりに大変だ。 まずは全部の最終段に「最終チェック」を入れて上記リストと照合、記載有ればマッチ失敗として探索継続、としなければならないが、 おそらくこれが1ヶ所では済まない。 ただしこれはリターンパスを辿ればいいので何らかのツールが有ればほぼ自動でいけるかもしれない。 次に上記リストを作成する為に全経路を出力させなければならない。 デバッグ用にこれが既にあればラッキーだが、なければ自
前で作らなければいけない。 といっても内容はツリーのノードを辿るだけなので、ツリーのフォーマットが分かればすぐだが、 ゴリゴリに高速化とかしていると割と意味不明なコードになっていることが多いので、 その状態で確認するのは結構辛いとは思う。 リストの管理は、空文字マッチなら追記、非空文字マッチならクリア、なので、これはやるだけだ。 リストの管理も探索関数にやらせて、探索関数は 今:マッチ場所とマッチ長さを返す 修正後:マッチ場所とマッチ長さを含んだ『配列』を返す、とし、 「空文字マッチの場合は自動で継続、非空文字マッ
チまたは終了まで探索、まとめて配列で結果を返す」とするのがいいだろう。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/890
891: デフォルトの名無しさん [sage] 2019/07/17(水) 08:29:16.56 ID:2/Bgill9 なおPerlの実装だと『上位関数のみ』で対策できるため、 「取り敢えず1時間で直せ」と言われたらこうなるのも分からなくはない。 しかしいまだにそのままだというのは怠慢でしかないが。 JavaScript等も同様、『上位関数のみ』で対策出来るところで留まっている点からも、これは言える。 しかし現時点で世界中のプログラマがどれだけ無駄な時間を消費することになっているのかを考えれば、 こんなのは手間であろうがさっさと直せ、でしかないが。 いずれにしても、俺が
修正してやる、修正案はこれだ!と具体的に出してくるのならレビューはする。 我こそは!という奴は頑張れ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/891
892: デフォルトの名無しさん [] 2019/07/17(水) 09:46:24.93 ID:u050lnGw 話を単純化すると、 1. ある文字、例えば@ から、次の@ の直前の文字まで 2. 先頭が、@ でなければ、先頭から、@ の直前の文字まで。 つまり、先頭が、@ でなければ、先頭文字を、@ とみなして処理する つまり、ルール1・2は、同時に適用させず、先にルール1を適用し、 ルール1に適用しないものだけを、ルール2に使う (^|[@;])[^@;]* だから、この正規表現がおかしい。 定義があいまいになる、解釈を含んでいる! OR の部分が、並列ではない。 ルール1を優先すべき! ht
tp://mevius.5ch.net/test/read.cgi/tech/1489511075/892
893: 892 [sage] 2019/07/17(水) 09:51:38.77 ID:u050lnGw (^|[@;])[^@;]* OR を使うと、両方に該当する場合に、どちらの処理がされるのか、あいまい! つまり、先頭文字が@; の場合に、両方に該当するので、処理があいまい! A|B A, B 両方に該当する場合に、A,B どちらの処理がされるのか、あいまい! http://mevius.5ch.net/test/read.cgi/tech/1489511075/893
894: デフォルトの名無しさん [sage] 2019/07/17(水) 09:53:34.46 ID:RL7WDafS 左側優先とかないのかこれ? http://mevius.5ch.net/test/read.cgi/tech/1489511075/894
895: 877 [sage] 2019/07/17(水) 10:06:18.04 ID:u050lnGw >>889 Ruby で、 str = "@time;prop1:style1;prop2:style2" re = /((^|[@;])[^@;]*)/ p results = str.scan( re ) # [["", ""], [";prop1:style1", ";"], [";prop2:style2", ";"]] [ 0 ]がマッチした部分、[ 1 ]がキャプチャー部分 >>862 の、["", ";prop1:style1", ";prop2:style2"] と同じ結果 # * を、+ に変えた。 re_2 = /((^|[@;])[^@;]+)/ p results_2 = s
tr.scan( re_2 ) # [["@time", "@"], [";prop1:style1", ";"], [";prop2:style2", ";"]] http://mevius.5ch.net/test/read.cgi/tech/1489511075/895
896: デフォルトの名無しさん [] 2019/07/17(水) 13:38:56.68 ID:FD/sfaX1 小飼って糖尿病で死んだんだっけ http://mevius.5ch.net/test/read.cgi/tech/1489511075/896
897: デフォルトの名無しさん [] 2019/07/17(水) 14:01:11.32 ID:fOq5lc1d 質問させてください。 PCRE や bregonig で大文字・小文字の区別なしで\x{017F}がsやSにマッチしてしまうのは仕様ですか? http://mevius.5ch.net/test/read.cgi/tech/1489511075/897
898: デフォルトの名無しさん [sage] 2019/07/17(水) 15:07:35.98 ID:Jmalh7Yl >>887 >('>' + str + '<').replace(/>[^<]*</,'>bar<').slice(1,-1) おぉ、perlの正規表現なら正規表現だけで大抵のことは出来るから 自分には前処理をするという発想がなかった、目からうろこでした 今回のケースもこの方法でデータの前後に ; を付ければ簡単になりましたね >>897 \w が あ にマッチするくらいなので仕様なのでは オプションでマッチしなくしたり出来るのでオプションのヘルプを見ましょう http://mevius.5
ch.net/test/read.cgi/tech/1489511075/898
899: デフォルトの名無しさん [sage] 2019/07/17(水) 20:30:56.60 ID:2/Bgill9 >>894 ないね。 聞いたこと無いし、JavaScriptで試した限り ([@;]|^)[^@;]* でも結果は同じだった。 ただ、確かに普通に考えたら左優先でいいし、上記入れ替えで @time をキャプチャ出来るようになるべきではある。 言われてみれば優先順位が決まってないことに驚きだ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/899
900: デフォルトの名無しさん [sage] 2019/07/17(水) 20:37:09.24 ID:RL7WDafS >>899 ちょっと知識が深まったよ サンクス http://mevius.5ch.net/test/read.cgi/tech/1489511075/900
901: デフォルトの名無しさん [sage] 2019/07/17(水) 20:40:11.08 ID:2/Bgill9 >>895 お前は毎回Rubyの話をどのスレにも持ち込んでいる荒らしだろ。 何か言いたいことがあるのなら必ず結論を書け。 何が言いたいのか分からないのでウザイ。だから荒らしなんだよ。 + に変えて空文字マッチをなくし、結果、希望の文字列を得る、という運用で回避するのはありだ。 ただ、その場合は、プログラマにそう分かるように、 「Rubyの正規表現エンジンは空文字マッチ周りにバグがあるので、注意してください。 空文字マッチがある正規表現を与えた場合
、予期せぬ動作になることがあります。」とアナウンスしないといけない。 事実上空文字マッチが使えないが、事実なんだからそうするしかないだろ。 Rubyはこういう事を全くしないからゴミなんだよ。Rubyは滅ぶべくして滅んで行ってるだけ。 JavaScriptは少なくとも仕様に明記はしてる。 ただそれだと弱いからMDNにも書け、というのが俺の主張であり、JavaScriptスレに勝手に依頼しておいた。 以前RegExp.testの件で同様に依頼したら追記されたから、そうなるのを願っている。 そういう、「落とし穴」は共同して塞いでいかないと駄目なんだよ。 完璧な
言語なんてない。だから多少バグがあるのは仕方ないとして、 それを未来永劫新規プログラマに押しつけて「キャハハー、お前も落ちたか!」なんてやっているようでは駄目なんだ。 Rubyはプログラマに対してリスペクトが全くない。だから廃れるし、俺もそうなることを願っている。 お前はRubyを吹聴しさえすれば布教出来ると勘違いしているようだが、そんなことはない。 当たり前だが新人にとってはこんなバグにつき合わされること自体大迷惑でしかないんだよ。 今回のでもPCREが一番ましだし、Rubyなんて選ばれる理由がないだろ。 ゴミだと分かっている
ものを広めるのは、単なる詐欺師でしかないぞ。 お前はお前の行為によってRubyへの反感を得ているだけなことを自覚した方がいい。 あちこちのスレでお前は相当ウザがられてる。 そういうのではなくて、バグを修正するとか、仕様書に明記するとか、 何でそういう建設的な方向に努力出来ないんだ? こういう地道な積み重ねを全くやってないからRubyの現状はあるわけでさ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/901
902: デフォルトの名無しさん [sage] 2019/07/18(木) 16:11:19.79 ID:Y8yxmCyC 今の複雑化した正規表現エンジンってエンジンを作った人ですらどう動くのか 予測が難しいところがあるのでは バグと言えばバグだけど総合的に考えてみてこの動作が最適だからこのままにしよう という部分もたくさんあると思う だから怠慢という言葉はちょっと違う気がするなぁ あとrubyの正規表現エンジンは空文字マッチが〜の件は つまりonigmoのことを言ってるんだけどonigmo自体は空文字マッチに 対応してると記憶してるからrubyモードの仕様なんじゃないかな
http://mevius.5ch.net/test/read.cgi/tech/1489511075/902
903: デフォルトの名無しさん [sage] 2019/07/18(木) 20:03:10.71 ID:PnG1z3PK >>902 Ruby周りにはお前みたいなクズしかいないから駄目なんだよ。 プログラミング出来ないのなら黙ってろ。 今のお前が為すべきは、お前が持っているonigmo環境で該当パターンを試し、結果を共有することだ。 Rubyの評判を気にすることではない。 Ruby+onigmoの組み合わせでばっちり動くのなら、 「他環境はゴミです!みなさんの悩みはRubyで解決出来ます!この機会に乗り換えてください!」と言えばいいだけだ。 動くんじゃないかな、みたいなお前の希望的観測
なんて何の役にも立たない。 或いは、onigmo単独では動くがRubyのバグ互換モードでは動かない、というのが事実なら、 「Rubyは次のメジャーアップデートでここが対策されます!みなさんご期待ください!」 と言えばいいだけだ。 実際、正規表現の方言/バグに参っている連中はいるんだから、それで乗り換えてくれるだろうさ。 実際、Rubyの奴らはこういう事を全くしない。 そしてRubyの評判だけを気にしているからRubyはゴミのままなんだよ。 871の件、Perl5.6だがPCREもか?と思って試したが、PCREもだ。 そしてPCREには > using the same synt
ax and semantics as Perl 5. と書いてある。つまりこれが本当ならPerl5のバグも含めて挙動は同一、ということになる。 しかしバグまで含めて同一とするにはPerlがこれを仕様化していないとほぼあり得ない。 そこでPerlを確認してみたが、どうやら以下がそれらしい。 > Repeated Patterns Matching a Zero-length Substring > https://perldoc.perl.org/perlre.html グダグダ説明はしてあるがPerlは読めんから詳細まで俺の読み通りかは分からんが。 いずれにしても、JavaScriptとPerlは仕様化してる。 Rubyが仕様化しておらず、これが大問題だと
認識出来ないのは、Ruby界隈にはまともなプログラマがいないからだよ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/903
904: デフォルトの名無しさん [sage] 2019/07/18(木) 20:22:20.04 ID:Y8yxmCyC BREという超シンプルな正規表現エンジンが持っていた明解な動作の分かりやすさを 現代の超複雑な正規表現エンジンに求めることには無理がある ちょっと挙動が変なところがあるけどこのほうが便利だよねってのが現代の考え方 なんじゃないかな、それに適応してるのが現代のプログラマということだろう ゼロ幅マッチで1歩進む件もそういう挙動にするメリットがあるから そうしてるんだろう、どんなメリットなのかは分からないが コスト的な問題やセキュリティ的な問題か
も知れない 時代遅れのプログラマが何を言おうが正直興味ないわ 現代の正規表現で見れば初心者だし 初心者が内部動作の仮説を立てたところで当たるわけがない しかもたった数例のコードの動作を見ただけでだ、あほらしい http://mevius.5ch.net/test/read.cgi/tech/1489511075/904
905: デフォルトの名無しさん [sage] 2019/07/18(木) 20:44:40.06 ID:PnG1z3PK >>902 お前みたいなゴミに回答する意味はないが、一応つけておいてやる。 > 今の複雑化した正規表現エンジンってエンジンを作った人ですらどう動くのか > 予測が難しいところがあるのでは そんなわけあるか馬鹿タレ。 今現在もスクリプタはプログラマからすると一段下に見られてて、 「スクリプタをプログラマと呼ぶな」という奴も一定数居るだろ。 その理由がこれだよ。 ガチのプログラマは数年前に他人が記述したコードでも必要あれば修正するしかない。
だからこの為に多大なる手間をかけてコードを整備してる。 スクリプタがやってる、今書いて今動いたら捨てておk、なんて甘い世界ではない。 まともなコードなら未来永劫整備可能だし、また、それを目指しているのがプログラマだ。 実際、Linuxなんて30年越しで整備され続けてるだろ。 数年前にお前が書いたコードすら読めないのは、お前の問題であって、それを全体のように言うな。 だからスクリプタは馬鹿にされるし、嫌われるんだよ。 正規表現エンジンなんてプログラミング全体からするとかなり簡単な部類だ。 動けばいいだけのエンジンなら再帰
しまくりで1000行程度だろう。 最悪全交換でいい規模だから、そこまでガチで整備されている事は期待出来ないが、 それにしてもこの程度の規模のプログラムを読めない、ってことはあり得ない。 高速化はプログラムに対して「複雑度」を増すものではない。 具体的に言うと、静的コールグラフを複雑化することはなく、 単に遅い関数を速い関数に入れ替える、というのが基本になる。 だから、正規表現エンジンを読めない、というのなら、書いた奴か読む奴が馬鹿なだけであって、 ちゃんとした奴が書いたエンジンをちゃんとした奴が読めば確実に読める。 h
ttp://mevius.5ch.net/test/read.cgi/tech/1489511075/905
906: デフォルトの名無しさん [sage] 2019/07/18(木) 20:46:26.35 ID:PnG1z3PK > バグと言えばバグだけど 単なるバグだ馬鹿タレ。 > 総合的に考えてみてこの動作が最適だからこのままにしようという部分もたくさんあると思う 非互換になるのでどこでアップデートして修正するかは言語側の選択となる。 だからその前段階、つまり今どこにバグがあってどれくらい問題なのか把握し、 それを広報して共有し、どのタイミングで修正するかを話し合わないといけない。 Rubyはこれが全く出来てない。だからゴミのままなんだよ。 > だから怠慢という
言葉はちょっと違う気がするなぁ バグだと認識した上で、それを仕様として広報するのが最低の義務。 JavaScriptとPerlはそれをやっている。 Rubyの現状はバグに気づいてないか、敢えて黙っているかで、どちらにしても糞でしかない。 > つまりonigmoのことを言ってるんだけどonigmo自体は空文字マッチに > 対応してると記憶してるから お前がどんだけ馬鹿なのか分からないが、「バグ」ってのは意図してない動作のことを言うんだぞ。 つまり、対応してるつもりが対応できてないから「バグ」なんだよ。 > rubyモードの仕様なんじゃないかな そ
う言うのはちゃんと調べてから言え。希望的観測ではミスリードを大量発生させる。 そしてこれをやりまくっているのがJavaScript界隈で、結果、JavaScripterは馬鹿が再生産されまくってる。 そういうのは止めろ。お互いに得る物がない。 >>904 まあ書いた後に読んだから投稿はしておいた。 話すつもりがないのならさようならでいい。 お前は、自身の問題を認識出来てないタイプだ。まあこのタイプもよくいるが。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/906
907: デフォルトの名無しさん [sage] 2019/07/18(木) 21:56:03.46 ID:xdHI+pcE 荒らしと会話するな! 荒らしと会話する者も、荒らしだぞ! プログラマーとは、コードで語る者だけ! 能書きはいらない! そいつらは荒らしだから、会話するな! http://mevius.5ch.net/test/read.cgi/tech/1489511075/907
908: デフォルトの名無しさん [sage] 2019/07/18(木) 22:31:51.56 ID:PnG1z3PK >>907 お前はコードだけで語りすぎだけどな。 結論を書くようにしろよ。 というかRuby界隈の問題は典型的にこれなんだよ。 Rubyの連中と話してても話が前に進まない。 俺が老害プログラマで荒らしだったとして、 それはRubyの為にも、またこのスレを読んでいる連中の知識になるものでもないだろ。 Rubyの連中は精神年齢がちっと低すぎる。 onigumoが該当パターンに対して正しい答えを出せるのなら喧伝すればいいし、 駄目なら今現在正しく返せるPCRE以下だとい
う現実を受け入れるしかない。 どっちでもないってのは、俺には頭おかしいとしか思えないけどな。 まあ確実に言えるのは、Rubyを今から学ぶのは止めとけ、ってことだ。 Rubyはコミュニティの腐り方がどうも他とは違う。 (JavaScriptも腐ってはいるが、あれは「若すぎる」のが原因だ。 かといって放置しても自然に改善するものでもないが) http://mevius.5ch.net/test/read.cgi/tech/1489511075/908
909: デフォルトの名無しさん [sage] 2019/07/19(金) 00:09:18.78 ID:KcCrOwH9 PCREに非包含オペレータが搭載されたら起こしてくれ http://mevius.5ch.net/test/read.cgi/tech/1489511075/909
910: デフォルトの名無しさん [sage] 2019/07/19(金) 00:50:19.02 ID:CNkXpMDT >>909 というかお前もそうだが、onigmo使ってるなら何で試して動作報告してくれないんだ? そういうところがRubyのコミュニティはおかしいんだよ。 「みんなで前に進む」という感覚がない。 ちなみに > 鬼車の中の人と Ruby の間の確執がなければとっくの昔に実装されていたのだろうかと思ったり思わなかったり。 > https://qiita.com/k-takata/items/4e45121081c83d3d5bfd これって何?知ってたら教えてくれれば助かる。 http://mevius.5ch.net/test/read
.cgi/tech/1489511075/910
911: デフォルトの名無しさん [sage] 2019/07/19(金) 02:29:00.41 ID:CNkXpMDT >>909 入る予定なんてないだろう。 > 8.2 Perl > Perl には最短一致の繰り返し、バックトラック > の抑制、否定先読みがある。これにより、非包含オ > ペレータに似た効果を得ることができる。しかし、 > 7.2 節で詳しく述べたようにこれらは形式言語理論 > からすると適切に扱えず、正規表現の組合せなどに > 問題が生じる。 > https://staff.aist.go.jp/tanaka-akira/pub/prosym49-akr-paper.pdf つまり理論畑の人には問題があるが、プ
ログラミング上問題はないんだろ。 そりゃ入れないだろ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/911
912: デフォルトの名無しさん [sage] 2019/07/19(金) 03:16:00.34 ID:CNkXpMDT >>910 自己レスだがだいたい分かった。 その他はリンク切れが多くて詳細までは追えないが、どうやら、勝手に使ったことに対して怒っているらしい。 https://kkos.hatenadiary.org/entries/2007/05/25#1180100250 が、ライセンス違反でなければ勝手に使え、というのがBSDだし、 告知しなかったことに関してはRuby側が悪いわけでもない気がするが。 ただこれなら鬼車にはRubyバグを作り込む必要がないから芽がある気はする。 そして文句を言ったところで鬼雲にフォ
ークしてマージしたのなら実質大して変わらない気もする。 よく分からん所で喧嘩してるなとは思う。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/912
913: デフォルトの名無しさん [sage] 2019/07/19(金) 11:33:59.54 ID:bgAzEf51 このスレでコミュニティうんぬんは脱線しすぎじゃないかい。スレタイとなんも関係ないやろ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/913
914: デフォルトの名無しさん [sage] 2019/07/20(土) 15:46:35.52 ID:KXtQuYxh 本当にプログラマなのかな http://mevius.5ch.net/test/read.cgi/tech/1489511075/914
915: デフォルトの名無しさん [sage] 2019/07/20(土) 17:29:27.69 ID:AFOF1ubv JSです 「はい」「はい」 「うん」「うん」 「■●」「■●」 「△◎」「△◎」 など、同じ文字列2回(あるいは2回以上)の繰り返しを探すにはどうすればよいでしょうか? /「(.+)+」/ とかだと、1回目と2回目が違ってもヒットしちゃいますよね…? http://mevius.5ch.net/test/read.cgi/tech/1489511075/915
916: 915 [sage] 2019/07/20(土) 17:31:58.05 ID:AFOF1ubv >>915 例を全部2文字にしちゃいましたが、 .+ と書いているとおり別に文字数は関係ありません http://mevius.5ch.net/test/read.cgi/tech/1489511075/916
917: 915 [sage] 2019/07/20(土) 17:37:46.94 ID:AFOF1ubv >>915 そして度々すみませんが /「(.+)+」/ じゃなくて /「(.+)」+/ でした とりあえずこれはダメな例ということで いい例が知りたいです http://mevius.5ch.net/test/read.cgi/tech/1489511075/917
918: デフォルトの名無しさん [sage] 2019/07/20(土) 17:45:51.81 ID:kkJ7q95a >>915-916 https://qiita.com/y-ken/items/7d5bf086be68d23e1318 http://mevius.5ch.net/test/read.cgi/tech/1489511075/918
919: デフォルトの名無しさん [sage] 2019/07/20(土) 20:12:32.11 ID:AFOF1ubv >>918 3つ目の # 重複文字列の抽出にも応用できます pry(main)> '東京都日野市日野市ほげほげ'.match(/(.+)(\1)/) => #<MatchData "日野市日野市" 1:"日野市" 2:"日野市"> ですね、ありがとうございます…! http://mevius.5ch.net/test/read.cgi/tech/1489511075/919
920: デフォルトの名無しさん [sage] 2019/07/21(日) 20:31:55.31 ID:Bdf0kkIf >>912 ttps://kkos.hatenadiary.org/entry/20070906/1189084566 松本氏はrb_enc_mbclen()のインターフェースが不適切であるという指摘に対して、何故、その原因を私に責任転嫁したのでしょうか? rb_enc_mbclen()のインターフェースが不適切になっている本当の理由は何でしょうか? まつもと 元の表現は「鬼車から継承した」と書いただけで、別に「鬼車に責任がある」というつもりはありませんでした(実際「責任」はないわけですし)。 現在のインタフェースに
なっている原因が「鬼車がそうなっていたから」であり、その理由は「まつもとがGB18030のようなエンコーディングへの対応に対する関心が薄かった」ということです。 「だったら、最初からそう書けよ」と言われそうですが、すいません、言葉が足りませんでした。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/920
921: デフォルトの名無しさん [sage] 2019/07/22(月) 01:27:11.95 ID:dN38X5eV >>920 おおサンクス。 ただ、それって 2007/05/25 より後だから、別件だね。 無駄に喧嘩してるなあ。 内容はkkos氏の方が正しい。 鬼車は最速を目指したライブラリなのだから、無駄なことは出来る限り省かなければならない。 そもそもスクリプト言語で不完全な文字列って、バイト列を直接与えるとかしないと出来ないはずだし、 その場合にはRuby側でチェックしておけ、というのはその通りで、極めて妥当な要求だ。 Rubyなんてmutable stringなのだから最初に必ず
コピーが必要で、普通はその時にやればいいだけ。 その方が今時の型安全にも合うし。 それを「実は僕も問題だと思ってたんだよね」みたいな受け方をするからそりゃ不信感が募る。 これは完全にMatzが糞で、実はC流のグダグダコードを書いていて、 どこで何をするべきか分かってないのだと思う。 そしてRuby界隈ではMatzは変に神格化されてて裸の王様化してる、ってとこだろう。 878の動作結果を見ても、誰も問題だとは指摘出来ないようだし。 これはkkos氏が言っているとおりがそのままで、普通は、というか本当は、 1. Rubyは rb_enc_mbclen(p,end,
enc) で記述していたが、 2. 鬼車が rb_enc_mbclen(p,enc) で記述されていることに気づき、 3. 何で end が無いのか確認して、 4. Ruby側にチェックをつける という流れになる。 1が無いのに、「し、知ってたし」みたいなことを言うから「嘘つくな」になる。 つってもこういうちょっとズルいというか卑怯というか、絶対俺のバグは認めないマンは残念ながら普通にいるから、 いちいち問いただしても始まらない。ただ、多分、kkos氏が切れたのはその後、 > それはそれとして、鬼車を呼ぶ前に「一文字を完成していない不完全なバイト列は含まない」こ
とをチェックするのはかなりコストが高いのですが、 これだとは思う。鬼車側でチェックしたらコストが安い訳でもないのに、これはない。 これはコイツとは一緒にはやれない、という結論を出すには十分だ。 本来Aでやるべき事をBでやる、みたいなことをすると、コードが一気に劣化していく。 長いこと保守するつもりなら絶対に飲めない。実際、鬼車は今も保守されているし、kkos氏の判断は妥当だ。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/921
922: デフォルトの名無しさん [sage] 2019/08/01(木) 15:57:12.21 ID:BVNOJ7mG >>789やってくれる人はいないか〜 2ch全盛期なら誰かしらやってくれた可能性高いけどすっかり寂れたな onigmoに興味があるならtakata氏の日記を読破してみてはどうかな 作りながら考えてたことが分かって面白かったよ http://mevius.5ch.net/test/read.cgi/tech/1489511075/922
923: デフォルトの名無しさん [sage] 2019/08/24(土) 12:41:17.80 ID:fR0bFJ1E perlで (?<=(aa|bb))c ならokだが (?<=(aa|bbb))c だとVariable length lookbehind not implementedになるの納得いかないなー 確かに戻り読み部分の長さに複数の可能性があるけど明らかに有限じゃん 秀丸のHmJre.dllだと通るようだ http://mevius.5ch.net/test/read.cgi/tech/1489511075/923
924: デフォルトの名無しさん [] 2019/08/24(土) 13:46:10.60 ID:6nD2xE5w (?<=(aa.*|bbb))c http://mevius.5ch.net/test/read.cgi/tech/1489511075/924
925: デフォルトの名無しさん [sage] 2019/08/25(日) 15:17:23.04 ID:GRZE+Rz9 (?<=aa|bbb)c http://mevius.5ch.net/test/read.cgi/tech/1489511075/925
926: デフォルトの名無しさん [sage] 2019/09/01(日) 12:33:19.59 ID:fodjUzDJ JS(ES2017)です 「貫樣」みたいな、中国語でしか使われないような怪しい漢字を弾きたい (日本語で使われる漢字のみ許可したい この場合は「貫」だけ残して「樣」は消したい) のですが CJKとか言って一緒くたになっている以上、Unicode範囲指定などで判別することはできないですかね…? http://mevius.5ch.net/test/read.cgi/tech/1489511075/926
927: 926 [sage] 2019/09/01(日) 12:38:35.03 ID:fodjUzDJ 「樣」は一応日本語でも使うみたいですね… とりあえず常用漢字じゃなければ弾くくらいでもいいのですが 常用漢字表を作って比較するくらいしかない…のかな? http://mevius.5ch.net/test/read.cgi/tech/1489511075/927
928: デフォルトの名無しさん [] 2019/09/01(日) 13:31:25.10 ID:kCJZVLuH http://www.shuiren.org/chuden/teach/code/main8.htm http://mevius.5ch.net/test/read.cgi/tech/1489511075/928
929: デフォルトの名無しさん [] 2019/09/01(日) 13:35:35.35 ID:kCJZVLuH ねむい http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/CJK/gb2312-80.gif http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/index-j.html http://mevius.5ch.net/test/read.cgi/tech/1489511075/929
930: デフォルトの名無しさん [sage] 2019/09/01(日) 18:46:39.31 ID:VXfAHt8z >>927 樣は様の旧字で現在でも許容字体扱いだから「常用漢字表」にも 出て来る。 https://ja.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7 >928-929みたいなのはあくまでコンピューター用のコードの まとまりの話だから常用漢字か否かは区別していない。 上のリンクのウィキの本表をエクセルにコピーして2列目の 通用字体だけを残して改行を消してやり、それと平仮名や 記号を除外規定にして残り全部消すとかなら正規表現だ
けでも さっさと終わるんじゃないかな。 JISの範囲内だけがほしいならシフトJISで保存したら他は 疑問符になるだろうからそれをまとめて削除したらおしまいだろうが 繁体字の樣は残る。簡体字の[木羊]は消える。 http://mevius.5ch.net/test/read.cgi/tech/1489511075/930
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 72 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.259s*