- 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以降
- 960 名前:デフォルトの名無しさん [2019/09/01(日) 13:35:35.35 ID:kCJZVLuH.net]
- ねむい
kanji.zinbun.kyoto-u.ac.jp/~yasuoka/CJK/gb2312-80.gif kanji.zinbun.kyoto-u.ac.jp/~yasuoka/index-j.html
- 961 名前:デフォルトの名無しさん mailto:sage [2019/09/01(日) 18:46:39.31 ID:VXfAHt8z.net]
- >>929
樣は様の旧字で現在でも許容字体扱いだから「常用漢字表」にも 出て来る。 https://ja.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7 >930-931みたいなのはあくまでコンピューター用のコードの まとまりの話だから常用漢字か否かは区別していない。 上のリンクのウィキの本表をエクセルにコピーして2列目の 通用字体だけを残して改行を消してやり、それと平仮名や 記号を除外規定にして残り全部消すとかなら正規表現だけでも さっさと終わるんじゃないかな。 JISの範囲内だけがほしいならシフトJISで保存したら他は 疑問符になるだろうからそれをまとめて削除したらおしまいだろうが 繁体字の樣は残る。簡体字の[木羊]
- 962 名前:は消える。 []
- [ここ壊れてます]
- 963 名前:デフォルトの名無しさん [2019/09/01(日) 21:04:09.80 ID:fO6VcsLE.net]
- Google謹製の正規表現ライブリ「re2」でググったら「バイオハザード2 RE:2」が検索上位に来るのどうにかならない?
- 964 名前:デフォルトの名無しさん mailto:sage [2019/09/01(日) 22:01:25.54 ID:Zrnas7uJ.net]
- >>933
s/^(.+)でググったら「バイオハザード2 RE:2」が検索上位に来るのどうにかならない?$/$1/
- 965 名前:デフォルトの名無しさん mailto:sage [2019/09/01(日) 22:50:02.12 ID:8GDP8quV.net]
- RE2 regex とか RE2 正規表現 とかでググれば
- 966 名前:デフォルトの名無しさん mailto:sage [2019/09/10(火) 22:48:57.92 ID:CokwQGf+.net]
- 直前の文字が1回以上出現することが確実なケースで、仮に0回の出現として考慮しても問題がないという場合に、
+ではなく*で正規表現を記述する理由はありますか? 例えば、慣例として*のほうを使うとか、*とするとマッチしない場合のみ+を使うとかそういう
- 967 名前:デフォルトの名無しさん mailto:sage [2019/09/10(火) 23:21:08.02 ID:1dbF51qB.net]
- 0回も許容するなら+ではなく*にする理由は0回も許容するからとしか
- 968 名前:デフォルトの名無しさん mailto:sage [2019/09/10(火) 23:26:41.78 ID:L5QX1JAH.net]
- 具体例で示してくれんとなんか曖昧でよくわからんね
- 969 名前:デフォルトの名無しさん [2019/09/11(水) 12:05:55.89 ID:zFEVPQj4.net]
- >1回以上出現することが確実なケース
>仮に0回の出現として考慮しても問題がない 矛盾してるな
- 970 名前:デフォルトの名無しさん mailto:sage [2019/09/11(水) 15:12:05.49 ID:wb8QVF41.net]
- >>936
出現が確実ではあるが、もしなかった場合にも対応したい そういう要求があり、動作にも差し支えない場合なら * をつかう ということに尽きるでは?
- 971 名前:デフォルトの名無しさん mailto:sage [2019/09/11(水) 16:12:55.15 ID:h8Pfy2ne.net]
- >>764
- 972 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 02:26:26.53 ID:xpiKRNxb.net]
- やっぱ質問して放置か、教える側も学習すべきだな
まともな質問じゃないと思ったらスルーでいい
- 973 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 04:33:29.68 ID:+6m2JHnd.net]
- 別におかしな質問じゃないだろ
- 974 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 06:58:37.97 ID:1ik9S0iw.net]
- いや普通におかしいだろ
なんか無理矢理の条件考えて論争させようとしてるような気がする
- 975 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 08:21:20.40 ID:xpiKRNxb.net]
- 自分なら人にこういう質問レスを書くかなって考えてみて絶対書かないと
思うものにはレス付けないのがいいかもね 説明不足で意味不明なものとかも
- 976 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 09:22:01.93 ID:TOasMGF3.net]
- ●Regular Expressionの使用環境
Mery ●検索か置換か? 置換 ●説明 属性内のアルファベット小文字を削除 ●対象データ id="105I42b 104I41b" id="99E65e 95B43d 92B87d" id="97B22d 95D18a 93B22c 93E23b" ●希望する結果 id="105I42 104I41" id="99E65 95B43 92B87" id="97B22 95D18 93B22 93E23" id="((\d+[A-Z]\d+)[a-z] ?){2,}"で検索は出来たのですが置換が思い浮かびません
- 977 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 10:00:21.41 ID:bJPykHLq.net]
- わかりやすいように、できるだけそのまま書くならこうかな
●検索文字列 (id="|\G )((\d+[A-Z]\d+))[a-z] ●置換文字列 \1\2
- 978 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 10:04:35.65 ID:bJPykHLq.net]
- 置換に問題は無いけど()が二重になってたミス修正
(id="|\G )(\d+[A-Z]\d+)[a-z]
- 979 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 10:30:50.86 ID:TOasMGF3.net]
- >948
出来ました! ありがとうございます。 田中哲スペシャルっていうやり方なのでしょうか
- 980 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 11:08:37.62 ID:bJPykHLq.net]
- \Gは照合開始位置と呼ばれる物で、マッチした箇所の後の境界にマッチしてくれるので
さっきのように(特定の文字列or前回置換しところ)の後に置換したい文字列があるときとかに便利で定番 田中哲スペシャルは\gで同じ表現をもう一回使うって奴だから違うかな
- 981 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 11:58:31.87 ID:TOasMGF3.net]
- >950
勉強になります。 ちなみに最初の値にはアルファベットがついてないケースだと拾えなかったので
- 982 名前:すが
id="97B22 95D18a 93B22c 93E23b" 対応策ありますでしょうか? [] - [ここ壊れてます]
- 983 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 12:04:38.94 ID:xpiKRNxb.net]
- 自分ならこの時点でスルー
\Gは文頭にもマッチするから誤爆対策を忘れずに
- 984 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 15:04:33.55 ID:bJPykHLq.net]
- >>951
自分でも書けない訳じゃないみたいだし、魚を与えるより釣り方を教えよの精神でヒント 変更のない置換後でも\Gは引っかかるので、小文字がないidも全部マッチするようにすれば こういうのを後出しされるとお互い二度手間だから 質問するときはパターンを網羅的に書いといた方が良いよ あと>>952が指摘してくれたように誤爆が懸念されるので、\Gを\G(?<=.)にした方が良いかもしれない ●対象データが正確で、実際の対象もidのみが載ったリスト形式みたいなものなら要らないけど
- 985 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 18:04:49.29 ID:TOasMGF3.net]
- >953
ヒントありがとうございます。 残りは自分でがんばってみます。
- 986 名前:デフォルトの名無しさん [2019/09/12(木) 18:08:37.95 ID:EfYu2rO4.net]
- 文字列 "プログラマー" を "プロクライマー" に書き換える正規表現を教えて下さい
- 987 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 21:50:17.55 ID:Jdu1U3XN.net]
- そこにソースがあるから登るんだ。
- 988 名前:デフォルトの名無しさん [2019/09/12(木) 22:19:07.70 ID:cqw0/uFd.net]
- 正規表現の使い方じゃなく作り方、バックトラックなど理論から解説している書籍やそれに準ずるサイトなど知っていたらご教示ください。
こうやればこうなるよ、こういうときはこうすればいいんだよ的な学習では身に付かなくて…
- 989 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 22:56:30.12 ID:Yy9Clfy1.net]
- 自分が参考にしたのはここだったかな
fussy.web.fc2.com/algo/search5_regex.htm 実装の仕方がある程度分かれば鬼車の作者さんのブログ(rubyの一件以前の記事)も参考になると思う
- 990 名前:デフォルトの名無しさん [2019/09/12(木) 23:14:33.93 ID:Uy9QyXie.net]
- ありがとうございます!
rubyの一件って何ですか?(何て検索したらいいですか?)
- 991 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 23:43:24.49 ID:Yy9Clfy1.net]
- Rubyの作者さんと何かあったようで嫌気が差したのかそれ以後ブログで正規表現のことを
取り上げる頻度がめっきり減っちゃったんですよ
- 992 名前:デフォルトの名無しさん [2019/09/13(金) 08:32:54.25 ID:sQZEDK+j.net]
- >>960
ありがとうございます! なるほど、残念ですね…
- 993 名前:デフォルトの名無しさん [2019/09/13(金) 10:47:34.78 ID:wKEqF87n.net]
- 955
https://codezine.jp/article/detail/3158 https://tociyuki.hatenablog.jp/entry/20070222/1172158021 hellocode.jugem.jp/?eid=748
- 994 名前:デフォルトの名無しさん mailto:sage [2019/09/13(金) 11:54:40.09 ID:X5DxpBbM.net]
- 正規表現はどの言語でも共通で使えますか?それともちょっと違ったりしますか?
- 995 名前:デフォルトの名無しさん mailto:sage [2019/09/13(金) 12:02:22.73 ID:KuW4wLhZ.net]
- ちょっと違ったりします
- 996 名前:デフォルトの名無しさん mailto:sage [2019/09/13(金) 13:25:46.31 ID:8XwQqyT8.net]
- Ruby で作った。
一旦、パターンで一致させてから、一致した行だけを変換した。 ただし、同じ行に、id="〜" が複数あると、バグる! src = <<'EOT' id="aAxy Xz" あ id="" id="9" id="9y" EOT # id=" で始まって、" 以外の文字が続いて、" で終わる re = /id\=\"([^\"]+)\"/ # ( ) 内は、$1 dest = src.gsub( re ) do |line| 'id="' + $1.delete( "a-z" ) + '"' end print dest 出力 id="A X" あ id="" id="9" id="9"
- 997 名前:963 mailto:sage [2019/09/13(金) 13:43:10.59 ID:8XwQqyT8.net]
- >>965
修正 >ただし、同じ行に、id="〜" が複数あると、バグる! 大丈夫だった。正常に動く
- 998 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 02:45:59.31 ID:dK4dr8mE.net]
- JSで
- 999 名前:
101 dogs 7 little goats 30 8 year old humans ↑をそれぞれ ["101", "dogs"] ["7", "little goats"] ["30", "8 year old humans"] と切り分けるにはどんな正規表現を使えばよいでしょうか? ["7", " ", "little goats"]のような形でもかまいません .match(/^\d+\s|.+$/) だと ["7 ", "little goats"] になってしまい、数字のあとの余計な半角スペースをあとで取り除かなければならなくなるのがなんか嫌で… [] - [ここ壊れてます]
- 1000 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 02:59:29.74 ID:/xGIA7r1.net]
- 正規表現を使えないなら文字列操作でやればいいだけ
正規表現を使いこなせてない人が使うとバグの温床になるからお勧めしない
- 1001 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 07:18:26.85 ID:m2l8x1P1.net]
- >>967
.split(' ', 2)
- 1002 名前:デフォルトの名無しさん [2019/09/16(月) 12:07:55.69 ID:oN5KVYJd.net]
- Ruby では、
chomp で、末尾の改行を削除する。 split の2 は、分割の最大数 text = <<'TEXT' 101 dogs 30 8 year old humans TEXT p ary = text.lines( chomp: true ).map { |line| line.split( " ", 2 ) } 出力 [["101", "dogs"], ["30", "8 year old humans"]]
- 1003 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 15:25:40.41 ID:YU5GpdCi.net]
- JSでは、
["30", "8 year old humans"] ではなく ["30","8"] となる limitは、分割結果の制限であり、見つかった要素の数をそこまでで打ち切る
- 1004 名前:968 mailto:sage [2019/09/16(月) 15:36:25.96 ID:oN5KVYJd.net]
- >971
えー!!
- 1005 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 15:52:31.08 ID:YU5GpdCi.net]
- >>972
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split#Returning_a_limited_number_of_splits
- 1006 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 16:04:28.98 ID:2suJbq8i.net]
- matchじゃなくてsplitで
str.split(/(?<=^\d+) /) か array = str.split(" "); array[0] + array.slice(1).join(" ") とかじゃない?
- 1007 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 16:06:13.84 ID:2suJbq8i.net]
- 間違えた
下の最後こうか [array[0], array.slice(1).join(" ")]
- 1008 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 16:24:50.88 ID:VWND3fAL.net]
- 素直に
"30 8 years old".match(/^(\d+) (.*)$/).slice(1) じゃいかんの?
- 1009 名前:デフォルトの名無しさん [2019/09/16(月) 16:28:11.45 ID:53ZoYsUm.net]
- 正規表現逆引きcgiとかないの?
雑に日本語で書き込んだらAIが判断して正規表現を返してくれる そんなの
- 1010 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 17:07:19.10 ID:YU5GpdCi.net]
- >>976
マッチしない場合でもエラーにならないよう保険かけとく方がよいのでは? (str.match(/〜/)||[]).slice(1)
- 1011 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 17:20:26.44 ID:oN5KVYJd.net]
- var ary = new Array( 2 )
var str = "30 8 year old humans" var pos = str.indexOf( " " ); console.log( pos ) // 2 if( pos === -1 ) { // 見つからない // 何かの処理 } else { ary[ 0 ] = str.substring( 0, pos ) ary[ 1 ] = str.substring( pos + 1 ) } console.log( ary ) // [ '30', '8 year old humans' ]
- 1012 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 17:34:55.93 ID:hRvCpxCQ.net]
- >>978
そう言うのは質問者に適宜やってもらえば良い 絶対マッチするという前提かもしれないし
- 1013 名前:デフォルトの名無しさん [2019/09/16(月) 17:40:28.59 ID:enU8we0d.net]
- >>971
知らなかった
- 1014 名前:デフォルトの名無しさん [2019/09/16(月) 18:09:34.33 ID:enU8we0d.net]
- const str = '30 8 year old humans'
(([first, ...rest]) => [first, rest.join(' ')])(str.split(' ')) //=> ["30", "8 year old humans"] あ、正規表現がねぇw
- 1015 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 20:46:14.05 ID:RGmahsTZ.net]
- .split(/ (.*)/,2)
- 1016 名前:デフォルトの名無しさん [2019/09/16(月) 22:28:40.71 ID:enU8we0d.net]
- 次スレ立てたんだけど、
Regular Expression(正規表現) Part15 https://mevius.5ch.net/test/read.cgi/tech/1568640311/ テンプレ貼ってたら>>3 がNGワードとやらで貼れません。 というわけであとよろしく。
- 1017 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 10:37:10.53 ID:aFTX7+W5.net]
- >>984
>>3 のテンプレにある 【 初心者 】 正規表現 【 入門 】 ←閉鎖 http://funcchan.blog16.fc2.com/ 5ch では、fc2 は、宣伝禁止かも! これは、半角で書き込めないので、全角に変換した このURL を削除すれば? MANGO 板で、NG ワードを調べられる
- 1018 名前:977 mailto:sage [2019/09/17(火) 12:02:24.99 ID:aFTX7+W5.net]
- >>979
を修正した const str = `101 dogs 30 8 year old humans` const lines = str.split( "\n" ); // 配列 const results = lines.map( line => { var ary = new Array( 2 ) const pos = line.indexOf( " " ); if( pos === -1 ) { // 見つからない // 何かの処理 } else { ary[ 0 ] = line.substring( 0, pos ) ary[ 1 ] = line.substring( pos + 1 ) } return ary } ); console.log( results ); // [ [ '101', 'dogs' ], [ '30', '8 year old humans' ] ]
- 1019 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 16:12:25.16 ID:sjKTVv5w.net]
- amazonもダメみたいだね、本の紹介しようとしたら弾かれた
- 1020 名前:983 mailto:sage [2019/09/17(火) 17:07:52.35 ID:aFTX7+W5.net]
- Amazon も、半角で書けないだろ
一番恐ろしいのは、はてなブログ! 書き込み禁止画面が出ずに、いきなり吸い込まれて、アクセス禁止にされる! 同様に、twitter の長いURL も、吸い込まれるものがあるらしい! 5ch で、しつこく宣伝する香具師をはめるために、いきなりのアク禁! MANGO 板に書き込んで、何がNG ワードが、地道に判定していくしかない
- 1021 名前:デフォルトの名無しさん [2019/09/17(火) 17:46:48.25 ID:+bGUkqkJ.net]
- test
https://www.ama%7Aon.co.jp/dp/4938939703
- 1022 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 17:53:38.97 ID:Xou3E6HC.net]
- はてブのURL、5ちゃんに書けないのか。気づいてなかったわ。
- 1023 名前:デフォルトの名無しさん [2019/09/17(火) 17:56:58.73 ID:+bGUkqkJ.net]
- test
d.h%61tena.ne.jp/keyword/%A5%E2%A5%CE%A5%B7%A5%EA%A5%C3%A5%AF%A5%AB%A1%BC%A5%CD%A5%EB
- 1024 名前:デフォルトの名無しさん [2019/10/02(水) 17:34:34.60 ID:dOlpIXop.net]
- U . M . E
- 1025 名前:デフォルトの名無しさん [2019/10/12(土) 20:41:17.72 ID:VAjNOt6S.net]
- 以下を正規表現で行うにはどうしたらよいでしょうか。
-----元データ------------------ <aaa bbb ccc ddd> <eee> ffff ggg <hhh iiii> ----------------------------- -----欲しいデータ---------------- aaa bbb ccc ddd eee ffff ggg hhh iiii ------------------------------
- 1026 名前: mailto:sage [2019/10/12(Sat) 20:46:20 ID:osgjxuFW.net]
- 改行無視のオプション+<>の間を取得して改行を空白に変更でどう?
- 1027 名前:デフォルトの名無しさん mailto:sage [2019/10/12(土) 22:51:54.37 ID:7TGqmTiW.net]
- >>993
Ruby $ cat input.txt | ruby -e 'puts ARGF.read.gsub(/<(.*?)>/m) { |m| $1.gsub("\n", "") }' Node $ cat input.txt | node -e 'process.stdout.write(fs.readFileSync(0).toString().replace(/<([\s\S]*?)>/mg, ($0,$1)=>$1.replace(/\n/g, "")))' sed $ echo $(cat input.txt) | sed -E 's/<([^>]*)>/\n\1\n/g' | sed -e '/^ *$/d' | sed -e 's/^ *//' sedのは一旦改行削除して、<..>の前後に改行追加して、空行削除して、行頭の空白を削除してる
- 1028 名前:デフォルトの名無しさん mailto:sage [2019/10/13(日) 01:09:33.88 ID:Gu1oNPJo.net]
- 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", " " ) } >>995 >$1.gsub("\n", "") "" は、" "(半角空白)の間違いだろ
- 1029 名前: mailto:sage [2019/10/13(Sun) 01:37:59 ID:5y3mzviq.net]
- >>996
コピペしたら元データに行末スペースが入ってたからそうしたんだけどこれは5chの仕様なのかな? 行末スペースがないなら空文字じゃなく半角スペースに置換だね
- 1030 名前: mailto:sage [2019/10/13(Sun) 03:33:31 ID:Gu1oNPJo.net]
- 5ch からコピーすると、行末に半角空白が入るから、
漏れは、Ruby で削除してる # クリップボード内の複数行文字列の、各行の先頭・末尾から、 # 連続する空白類を除去して、クリップボードに入れる str = `powershell Get-Clipboard` str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換 ary = str.each_line.map( &:strip ) # 連続する空白類を除去する IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す clip.print( ary.join "\n" ) end
- 1031 名前:デフォルトの名無しさん [2019/10/13(日) 07:48:23.30 ID:0NSyRtEU.net]
- >>994-996
皆さんありがとうございました。 後方参照をさらに置換すれば良かったんですね。そんな方法があったとは!! 助かりました。
- 1032 名前: mailto:sage [2019/10/13(Sun) 22:01:19 ID:5y3mzviq.net]
- >>998
エディタのコマンドで対応できることだから わざわざスクリプト書くのはちょっとオーバーキルかな
- 1033 名前: mailto:sage [2019/10/13(Sun) 22:05:59 ID:w1EMiXuT.net]
- VScodeの正規表現検索、置換はjavascriptだろうか?
- 1034 名前: mailto:sage [2019/10/13(Sun) 22:42:48 ID:5y3mzviq.net]
- >>1001
ripgrep
- 1035 名前:1001 [Over 1000 Thread .net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 942日 20時間 38分 13秒
- 1036 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|