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

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 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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