Regular Expression(正規表現) Part14at TECH
Regular Expression(正規表現) Part14 - 暇つぶし2ch101:デフォルトの名無しさん
17/05/04 10:29:51.92 P+e+GY0n.net
>>98
cat hoge.txt | sed -e 's/\].*\|.*\[//g'
これだと3行目が2つ目の [ ] のを拾ってしまった。
bbb
ddd
iii
kkk

>>99
cat hoge.txt | sed -E 's/[^\[]*(\[[^\[]*\]).*/\1/g'
[bbb]
[ddd]
[ggg]
kkk
狙い通りのが拾えました。[ ] が付いてくるけどそれは自分で外します。
どうもありがとうございました。

102:デフォルトの名無しさん
17/05/05 08:29:26.53 bm+deAdf.net
「Regular Expression」ってことは
RegularじゃないExpressionもあるのかな?

103:デフォルトの名無しさん
17/05/05 11:21:47.47 Ll1Ek2oh.net
>>101
URLリンク(www.google.co.jp)

104:デフォルトの名無しさん
17/05/05 13:41:26.64 Xc50Qjgk.net
>「irregular expression」に関連するキーワード

>保守速報
ワロタ

105:デフォルトの名無しさん
17/05/07 03:23:46.82 bf3ZF7DF.net
>>101
正規表現で表される集合の標本それぞれが正規でない表現じゃないの

106:デフォルトの名無しさん
17/05/07 07:31:07.21 fOF53fEF.net
そもそも誤訳だし

107:101
17/05/07 16:34:35.27 fwX9OlSY.net
>>104
なるほどおおおおぉぉぉ!!!
合点がいきまくりんぐです。ありがとうございます!

108:デフォルトの名無しさん
17/05/13 23:19:52.64 4xoUv3bU.net
書き込めない?

109:デフォルトの名無しさん
17/05/14 17:21:45.80 IUk17Lsy.net
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
検索
●説明
「ABC


110:」の英大文字と小文字を区別せずに検索したいのですが 書き方はあるのでしょうか? 今は『abc|Abc|ABC』という正規表現を使っていますが 書くのがめんどうだし、aBcやabCにもヒットさせたいので もっと簡潔な書き方があれば教えて下さい。



111:デフォルトの名無しさん
17/05/14 18:29:13.61 YzpdvDlp.net
>>108
(?i:ABC)
で行けるんではなかろうか

112:デフォルトの名無しさん
17/05/14 18:30:36.34 qjlEaygK.net
そのものズバリのチェックボックスがあるのに釣りかメクラか

113:デフォルトの名無しさん
17/05/14 20:19:12.83 IUk17Lsy.net
>>110
すみません、実はJaneStyleなど複数の環境で正規表現を使っていて、一番よく使うサクラエディタを例に出してしまいました。
確かにサクラエディタだと「英大文字と小文字を区別する」ってチェックがありますよね・・・
>>109
ありがとうございます!バッチリいけました。 ><

114:デフォルトの名無しさん
17/05/27 19:51:02.34 gdXMy//z.net
●Regular Expressionの使用環境
テキストエディタMeryでの強調文字列指定について質問です
URLリンク(www.haijin-boys.com)
Onigmo (Oniguruma-mod) (regular expression library) 5.15.0
URLリンク(github.com)
●検索か置換か?
検索?
●対象データ
"D:\PATH\HOGE",1,307,,0,"15/01/01 00:00:00","12/12/31 00:00:00",1,1,,,,"著者X",,,,,"タイトルA",,,2,,,,,1,1101,1101
"D:\PATH\FUGA",,,,,,"15/02/01 00:00:00",1,1,,,,,,,,,"名前B",4,,0
"E:\FOLDER\PIYO",20,197,91,0,"16/03/01 00:00:00","15/04/01 00:00:00",1,1,,,,"著者Y,Z","出版社",,,,"題名C"
●希望する結果
上のようなテキスト各行の最後に出現するダブルクォーテーション囲いの文字列
"タイトルA"
"名前B"
"題名C"
を取得して強調表示したいのですがどのような正規表現で記述すればよいのでしょうか?
あるいはダブルクォーテーションを含まない状態(タイトルA、名前B、題名C)でも差し支えありません
●説明?
・各行でカンマや "" 囲いの数はまちまちで、"" 囲いの中にカンマがある場合もあります
・"" 囲いの中のカンマを無視した場合、17番目のカンマの直後の "" 囲い部分です
・"タイトルA"、"名前B"、"題名C"のあとに続く文字列の長さ、形式は不定です
・対照データはマンガミーヤのブックリストです
よろしくお願いします

115:デフォルトの名無しさん
17/05/28 06:04:53.01 PkY5eGnw.net
"[^"]*"(?=[^"]*$)
(?<=")[^"]*(?="[^"]*$)

116:112
17/05/28 07:52:06.42 5aByZaI0.net
>>113
両方のパターンを教えていただきまして、ありがとうございます
"フォルダパス" の "[A-Z]:\\.+?" と "年/月/日 時:分:秒 "の "../.+?"
タイトルフィールドだけは全/半スペースで字下げして "[  ]+.+?" というパターンまでは作れましたが
字下げなしで強調表示できるようになり、一層見分けやすく、編集しやすくなりました
なぜこれらが最後の "タイトル" 部分にマッチするのか、まだ理解できてはいないのですが
読み解けるように頑張ってみます

117:112
17/05/28 11:31:39.10 5aByZaI0.net
先読みと後読みの使い方をなんとなく理解できるようになったかも?という感じで、自分で同じ表現をすぐに導き出せるかとなるとまだまだ難しそうです
調子にのって後読みで12番目のカンマの後ろの "著者" にマッチさせようとやってみましたが、繰り返し表現をふくむ後読みはダメだとか…
^".+?"([^,]*,){12}".+?" で「行頭から"著者"まで」はできても ^(?<=".+?"([^,]*,){12})".+?" では機能しないんですね
あれこれ弄り回して "タイトル" からカンマ5つ戻るかたちで先読みにして "[^"]*"(?=(,[^,]*){5}"[^"]*"(?=[^"]*$)) にしたら "著者" に
同様に {4} で "出版社" にマッチしました
おかげさまで色々と勉強になり、あらためてありがとうございました

118:デフォルトの名無しさん
17/05/28 12:13:46.77 IsUf2Pl+.net
こんな古代呪文みたいなの、実際に仕事とかで使ってないとなかなか覚えないし
覚えてもすぐ忘れてしまうよなw
全てのパターンを記憶して空で完全詠唱できる人なんているんだろうか?

119:デフォルトの名無しさん
17/05/28 13:15:52.74 QUomuFPF.net
暗唱できる必要性があるのか?
使うときにそういうのがあったなあって思う出すだけでいいだろ
あとは詳細を見て使えばいいだけ

120:デフォルトの名無しさん
17/05/28 13:26:02.06 35oU3ReV.net
仕事じゃなく趣味で覚えたけど
間違いなく覚えた方が便利
どっかに正規表現化してるだけでお金貰える仕事ないかな

121:デフォルトの名無しさん
17/05/28 15:27:00.29 dHcH/mRb.net
>>116
わたしレベルになると詠唱破棄すら可能w

122:デフォルトの名無しさん
17/05/28 16:06:45.06 MqtJ47ff.net
言語環境ごとに使える使えない、エスケープ必要不必要を間違えたりする
サポートしてない環境の多い先読みとかは他の手段使っちゃったりするからなかなか使いこなせない

123:デフォルトの名無しさん
17/05/28 16:10:29.49 W53JMrzP.net
$1 と \1 を間違えて泣きをみて以来、むしろ記憶しないようにしている……・

124:デフォルトの名無しさん
17/05/28 16:18:27.70 mQ0E20+1.net
perlから初めるとカタワになるな

125:デフォルトの名無しさん
17/05/29 08:14:03.69 XV2pt9yI.net
えっ!?

126:デフォルトの名無しさん
17/05/29 11:05:33.03 sPbSPx8D.net
コマンドプロンプトのfindstrコマンドで使えるやつより貧弱な正規表現環境なんてないよね?

127:デフォルトの名無しさん
17/05/29 11:21:53.73 sPbSPx8D.net
URLリンク(imgur.com)

128:デフォルトの名無しさん
17/05/29 11:24:10.17 sPbSPx8D.net
貼り間違えた
URLリンク(i.imgur.com)

129:デフォルトの名無しさん
17/05/29 21:58:39.79 YdL4iPz3.net
>>124
おれの彼女の胸

130:デフォルトの名無しさん
17/05/30 13:16:32.07 V9BCWx6K.net
>>118
とある地方の区画整理の際、住所表記が変わるので
住所を正規化するために正規表現と簡単なDB処理とを組み合わせた
単純な処理を行うだけの1日仕事で、
そこらのリーマンの3ヶ月分ぐらいお金になった事とかあったな
仕事柄色んな会社を訪問するけど
テキストの簡単な置換すらできない(まずテキスト置換という概念を知らない)人って
事務程度でしかパソコン使わない人にはめちゃくちゃ多いんだよね
そんなに人達に (.+)abcd\n みたいな初歩的な正規表現を教えると
物凄く驚かれる
見下すようだけど世の中そんなもん

131:デフォルトの名無しさん
17/05/30 17:50:42.66 bhgaCfDA.net
>>128
まぁハードル高いよね、低くないと言うべきか
知らなきゃ「正規表現」というチェックボックスがあっても、それが何をするものなのか
言葉から具体的イメージが全く湧かないし
ヘルプ見てはじめて何をするものなのかわかるという、といっても具体例が
無ければヘルプ見たところで「難しそう>便利そう」になりがち
一目で「難しそう<便利そう」になるならとっくに正規表現を使ってる層だろうし
ファイルの検索 や excel や word や メモ帳 、IE、Edge あたりに正規表現が
最初っからあれば話は違ってくるんだろうなと
Mac触った事ないからアレだけど、Macなら充実してるのかしら?

132:デフォルトの名無しさん
17/05/30 22:14:32.37 wMq9WrJJ.net
>>129
システム屋やってる人間からしても正規表現って見るからにとっつきにくそうだもんな。
システム会社なのに知らない人間の方が多いというw

133:デフォルトの名無しさん
17/05/30 22:28:36.41 RvF0nsOU.net
>>130
えー
プログラム組む人種なら例外なく好物だと思ってたんだが(^^;;

134:デフォルトの名無しさん
17/05/31 02:32:02.26 6BoaVWxP.net
システム屋とかシステム会社って何のシステム?

135:デフォルトの名無しさん
17/05/31 05:29:32.86 hSyYnyRA.net
使い捨てコードといったらPerlで書いてた世代は正規表現に抵抗無さそう

136:デフォルトの名無しさん
17/05/31 05:30:03.72 sJHTybMt.net
>>131
VBとかでポチポチやってる人は嫌いそう
GUIで書けるいいツールがあったら広まるかもね

137:デフォルトの名無しさん
17/05/31 08:06:38.95 rBoo2fCo.net
小さな会社だと他より少しPC関連に詳しいってだけでIT部長とか言われこき使われる
勿論そんな役職なんて無い
正規表現なんて言葉を発したらセクハラだの変態だの言われかねん

138:デフォルトの名無しさん
17/05/31 11:16:23.49 u9qpXxTe.net
>>135
正規表現で置換
とか知らない人が聞いたらアレだもんなw
>>133
正にその世代だけど
昔のperlは正規表現抜きでも変態記法満載だったから
だんだん昔のコードは読めない人が増えてきてる
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
10年ぐらい前のメモからのコピペだけど見ただけで目眩がするw

139:デフォルトの名無しさん
17/05/31 11:27:09.17 u9qpXxTe.net
>>132
一概にシステムといっても色々あるからね
機器制御系システムなんかだと正規表現を使う機会なんてまず無いだろうし
WEB系の事やってるなら何だかんだで正規表現を使う機会はそこそこあるだろうし

140:デフォルトの名無しさん
17/05/31 11:46:52.88 AV1cHHAT.net
CSV は、" などのエスケープについて、様々な方言があるから、正規表現では無理。
CSV の方言・規格を確定させてから、Ruby を使うべき
バグのほとんどが設計段階・仕様で生じる。
方言さえ確定していれば、バグらない

141:デフォルトの名無しさん
17/05/31 11:53:36.36 L1juUrGR.net
>>135
会社の忘年会では正規表現やりますって言ってパンツ脱ぐのか?

142:デフォルトの名無しさん
17/05/31 12:15:57.63 u9qpXxTe.net
>>138
仕事内容にもよるけどそんな事はない
なんせ世の中にはExcelのデータが糞ほどあるので
「Excelルールのcsvを正規表現で処理する+α」の仕事だけでも
たぶんそこらのリーマンよりは稼がせてもらってきたよ
日本の企業の大半は中小企業なわけだけど
ほんと信じられないほど無駄な事やってる会社がたくさんあるからね
こんな時間に2chなんてやってられるのも、そのお陰ですわ

143:デフォルトの名無しさん
17/05/31 12:35:12.54 MQUo5X9j.net
万能な処理って得てして使いにくいしな

144:デフォルトの名無しさん
17/05/31 12:44:32.50 gy6WrZsR.net
>>138
Rubyを使うべき、と言う唐突な結論以外は同意できる。
Ruby (のようなスクリプト)を使うべきなら完全に同意できたのに。

145:デフォルトの名無しさん
17/05/31 16:04:23.05 jFN45aLj.net
>>142
少し日本語は下手だが、
事前にCSV の方言・規格を確定すべし
という主張と読んだ。

146:デフォルトの名無しさん
17/05/31 17:04:05.88 MQUo5X9j.net
なぜrubyなのかよく分からん
多少正規表現エンジンの種類やバージョンの違いはあれど
正規表現はperlでもPHPでもJavaScriptでもPythonでも使えるし
rubyの正規表現なんて昔はコールバック処理するのがくそ面倒だった筈だが

147:デフォルトの名無しさん
17/05/31 17:10:42.06 BtqSGsFQ.net
正規表現を使わずにrubyでやれと言いたいのでは
まあ確かにrubyは標準で簡単強力なcsv処理ができるけど
ruby以外でのcsvの処理の仕方を知らない知識不足な人の戯言にしか見えない

148:デフォルトの名無しさん
17/05/31 17:29:50.80 nyiBm3r5.net
excelでも正規表現使えるけどな

149:デフォルトの名無しさん
17/05/31 17:55:47.82 b1E/NNUq.net
>>144
たぶんrubyのような言語と言いたかったのだと推察致しまする

150:デフォルトの名無しさん
17/06/01 04:08:09.64 +TrYOuL5.net
>>134
VB(今時は.NET)では入力チェックとかでよく使うからお前の偏見だよ。

151:デフォルトの名無しさん
17/06/01 04:08:53.15 +TrYOuL5.net
>>134
いい忘れたがサクラのマクロもよく使う。

152:デフォルトの名無しさん
17/06/01 05:13:28.59 gHUhkzd0.net
>>148
VBやってるやつが皆そうやってると思うか?
それこそ偏見だ

153:デフォルトの名無しさん
17/06/01 05:24:23.62 gHUhkzd0.net
>>149
お前個人の話かよ

154:デフォルトの名無しさん
17/06/01 05:39:57.85 pPoV2n06.net
そもそもテキスト処理じゃないと使わんよ
使う使う言う奴はプログラミングの分野が偏ってるんじゃないか?

155:デフォルトの名無しさん
17/06/01 06:10:29.36 htPbJpjE.net
エンドユーザーに近い分野で使うというより、開発者が使うものでしょ。SQLとかと同じ。

156:デフォルトの名無しさん
17/06/01 08:16:36.86 YbQp1MN1.net
>>153
そりゃプログラムから使うものだから開発者しか使わんよ
そう言う意味じゃなくて利用者が入力した値の妥当性確認とかに使うケースが多いんじゃね?
って話なんだろ

157:デフォルトの名無しさん
17/06/01 09:37:01.51 OU3iOJ/C.net
>>148
これが偏見な

158:デフォルトの名無しさん
17/06/01 10:35:10.56 Fkhc5exB.net
エマ中尉の盾になって死んだ人?

159:デフォルトの名無しさん
17/06/01 12:16:30.24 o/dQD8LP.net
>>154
特殊な例を一般化するのはよくない

160:デフォルトの名無しさん
17/06/01 12:52:26.55 YbQp1MN1.net
>>157
特殊?
そう言うなら他にもっと使われてる用途挙げてくれ

161:デフォルトの名無しさん
17/06/01 12:55:42.58 uSxzswpP.net
検索じゃろ
grep然りsed然りエディタの検索然り

162:デフォルトの名無しさん
17/06/01 20:45:19.78 YbQp1MN1.net
>>159
その辺りもエンドユーザー(多くは開発者だと思うけど)に近いところじゃね?

163:デフォルトの名無しさん
17/06/01 21:36:20.85 z/dTvzRJ.net
一般に正規表現自体をどこで使うかの話と違うんか?
プログラマがどこで使うかって文脈に限定してるのんか?

164:デフォルトの名無しさん
17/06/02 00:26:45.39 ixZw1vso.net
perlがそうであったようにログ読んだり整形したりするときにも良く使う。システム管理者。
プログラマによっては無理に正規表現使わないで正規表現を引数に取らないcontainとか複数行で書くって人もいるんじゃないか。入力チェックもそんな考えるような正規表現の出番少ないような。
perlくらい言語に組み込まれてるならともかく。

165:デフォルトの名無しさん
17/06/02 01:15:51.17 ZbzhojDH.net
>>156
ヘンケン艦長~!

166:デフォルトの名無しさん
17/06/02 14:02:59.19 s9L+1vWi.net
正規表現、難しいですね…全然わかりません
お知恵をおかし下さい
例えば
test = "//abc"; // コメント "です"

という一行があった場合、後半の
// コメント "です"
にだけマッチする正規表現はどのように書いたらいいんでしょうか?
最初は
/(?!.*(\"|\'))\/\/(.*)/
こんなカンジで否定的先読みを利用していたのですが、
コメント部にも、 シングル及びダブルクォーテーションが入る可能性が出てきたので、
この書き方では ?! で否定しているためなのかマッチ出来ません。
何か良い書き方はありますでしょうか?
やりたい事は、PHPなどで、javascriptのソースから単一行のコメントを削除したいです。
よろしくお願い致します。

167:デフォルトの名無しさん
17/06/02 14:24:22.46 zHTMhHhl.net
//((?!//).)*?$

168:デフォルトの名無しさん
17/06/02 20:31:58.40 KFrvDlYH.net
PHP は知らん
$perl -ne 'm%((?:\".*?\"|/(?!/)|[^/])*)(.*)% ; printf("<$1> <$2>\n");'
test = "//abc"; // コメント "です"
<test = "//abc"; > <// コメント "です">
// コメント "です"
<> <// コメント "です">
$

169:デフォルトの名無しさん
17/06/02 21:10:46.42 yyLeCvfJ.net
末尾方向から、// を探して、もしあれば、その行を選択する。
^.*\/\/(ここに、2連続以上の、/ が存在しない)$
/// 例えば、3連続でも、コメント扱いするよな?
test = "///abc"; /// コメント "です"
シングルクォーテーションは、どうするんだ?
test = '///abc'; /// コメント "です"

170:デフォルトの名無しさん
17/06/02 23:18:34.61 cODXM6Ca.net
javascriptだから、シングルダブルは同等機能
"'"とか'"'とか有だし
"\""とかのエスケープもある
"//abc"は文字列だし、"\""//abc"はコメント

171:デフォルトの名無しさん
17/06/03 00:22:48.22 02UJhjHA.net
みなさん、ありがとう御座います!
165さんの短いのでサクっと出来ました!
なるほど、末尾から検索をかけるとう考えなんですね。
本当に奥が深くて、使いこなすのは難しいです…
いろんなパターンを作りだし、自由にマッチ出来るよう精進します
>165-167さん、ありがとう御座いました!

172:デフォルトの名無しさん
17/06/03 00:23:37.51 02UJhjHA.net
>168さん抜けちゃいました(汗
ありがとう御座いました!

173:165
17/06/03 01:16:11.91 janVI+9u.net
>>169
ツッコミか逆ギレ待ちだったんだが…
165ではコメントが無くてコード中に//がある場合にそのコードの部分にマッチする
削除だとコードを削ってしまうよ
コード中に//が無い場合、またはコード中に//がある場合にその後ろにコメント行がある場合、限定
マトモなのは「JS コメント 正規表現」とかのワードでggr

174:デフォルトの名無しさん
17/06/03 01:49:01.34 VDeCcObx.net
s#((?:"(?:\\\\|\\"|[^"])*+"|'(?:\\\\|\\'|[^'])*+'|/(?!/)|[^/])*+)(.*)#<$1>\t<$2>#

175:デフォルトの名無しさん
17/06/03 02:57:17.44 02UJhjHA.net
>>171
え!?
限定的なテストで、思ったとおりの動きをしたので、おお!すげー!って思ってました…
実際のスクリプトには、まだ組み込んでないので気付きませんでした
他の方が書かれてた方法も試したり、ググってみますね

176:デフォルトの名無しさん
17/06/03 04:51:38.86 ZUxfcpWv.net
区切り記号 ; や閉じ括弧 } のあとにスペースかタブいくつかの後に来る // から行末をコメントと見なすのが簡単?

177:デフォルトの名無しさん
17/06/03 12:52:21.44 7vig672V.net
コメント化は、プログラムデバッグ中にも命令を無効にするために使うこともあるし、ことはそう簡単じゃないよ
//if(hoge=="URLリンク(hoge.net")) {//コメント

178:デフォルトの名無しさん
17/06/03 14:13:52.35 ep62Y9tf.net
これは、無限の組み合わせがあるから、正規表現じゃ無理
AST変換とか、LLVMでコンパイル後の命令木をもらって、
コメント部分を削除するとかしないと、自力じゃ無理なレベル

179:デフォルトの名無しさん
17/06/03 14:17:50.88 sCohk93m.net
うむ

180:デフォルトの名無しさん
17/06/03 14:32:23.81 7vig672V.net
こんな場合もあるからね
/* 一行コメントを外す
//*/hoge="abc";

181:デフォルトの名無しさん
17/06/03 14:42:13.81 mWYP1opd.net
文脈自由言語の領域か

182:デフォルトの名無しさん
17/06/03 16:26:56.85 kz1iKZuq.net
テキストから
06/03(
を抽出する場合、どんな表現になりますか?

183:デフォルトの名無しさん
17/06/03 16:32:48.16 7vig672V.net
何それ限定なの?
06\/03\(
(スラッシュにエスケープが要らない場合もあるけど付けといてダメなことはない)

184:デフォルトの名無しさん
17/06/03 20:14:19.78 4NkabvDw.net
>>181
sedのsなんかは(をエスケープすると特別な意味を持つんじゃ

185:デフォルトの名無しさん
17/06/03 22:49:00.44 yEDWU2+/.net
正規表現って本当に色々なパターンでテストしないと抜けがあったりするから怖いね

186:デフォルトの名無しさん
17/06/03 23:15:22.50 eiMrU4PF.net
>>183
それは仕様を理解していないから。
正規表現で表現してあるパターン以外にマッチする事はないんだから、
抜けがあるならパターンの意味を理解していないって事

187:デフォルトの名無しさん
17/06/04 00:01:51.87 caz8ZVsN.net
理解してないのに使う方が怖い

188:デフォルトの名無しさん
17/06/04 10:21:55.88 ty2rLUEJ.net
>>184
仕様を理解してたらバグがないって? w

189:デフォルトの名無しさん
17/06/05 17:11:30.09 oWlVC1QB.net
非欲張り、欲張り、強欲の違いが分からなかったんだけど
URLリンク(d.hatena.ne.jp)
これ読んでやっと分かった
こりゃエディタの検索で試してるだけじゃ理解出来なくて当然だね
誰か同じように例を交えて先読みと戻り読みのロジックを解説して欲しい
それか解説してるwebページがあるならリンク貼って下さい

190:デフォルトの名無しさん
17/06/09 23:50:59.51 fJoQB/gQ.net
●Regular Expressionの使用環境
秀丸 HMJRE.DLL V5.00
●検索か置換か?
置換
●説明
文章最後の文字からEOFまでの 空白(全角半角両方) タブ 改行 を消したい。
●対象データ
AAAAA
BBBBB
CCCCC
 
[EOF]
●希望する結果
AAAAA
BBBBB
CCCCC[EOF]

191:デフォルトの名無しさん
17/06/10 10:49:19.67 qGbgn0XY.net
URLリンク(htom.in.coocan.jp)

192:デフォルトの名無しさん
17/06/10 12:37:04.98 6tXlKKLu.net
[ \s]*(?!\n)$(?#maxlines:99999999)

193:デフォルトの名無しさん
17/06/12 04:37:37.47 40WtKqR9.net
>>187
Qiitaなのでコメントまで必ず読むこと
正規表現の先読み/後読みを「絞り込み」と理解してみる - Qiita
URLリンク(qiita.com)
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
URLリンク(qiita.com)
後者は日本語表現のネタモノなので理解にはあまり役に立ちませんが

194:デフォルトの名無しさん
17/06/12 04:43:04.94 3uouTe/z.net
>>191
ありがとう。読んでみます

195:デフォルトの名無しさん
17/06/15 14:44:28.61 p0Tdw73d.net
そもそも「正規表現」が誤訳だし
「先読み/後読み」がどうだって驚かない

196:デフォルトの名無しさん
17/06/15 17:11:52.26 vJds0eqB.net
名前なのに誤訳ってなんだよ

197:デフォルトの名無しさん
17/06/15 20:46:27.61 am9DsefU.net
「正規表現」が誤訳!!www

198:デフォルトの名無しさん
17/06/15 21:53:29.88 5Ry9SVFq.net
前厄,翻訳,後厄

199:デフォルトの名無しさん
17/06/15 23:55:29.06 kDv/IOKj.net
非正規労働者に謝れ

200:デフォルトの名無しさん
17/06/16 00:00:22.35 AvJwaQP1.net
>>193
そんな感じがする
でも�


201:闥�して何十年経過したからいまさら変更できない 直訳すると正則記法?



202:デフォルトの名無しさん
17/06/16 00:03:22.93 ugmLNmLC.net
まさのりって誰よ?

203:デフォルトの名無しさん
17/06/16 00:09:53.04 7387anCt.net
>>198
数学用語で考えると、「正則式」

204:デフォルトの名無しさん
17/06/16 00:28:35.35 CHM/yJyC.net
誤訳にしたくて必死過ぎw

205:デフォルトの名無しさん
17/06/16 00:34:50.74 PEuGYK32.net
確かに数学的にはregularは正則でnormalが正規だけども
正規表現が正則式だの正則表現になったからといって何が分かりやすくなるでもなし

206:デフォルトの名無しさん
17/06/16 01:26:14.32 1cZCMNBu.net
ID変わった時間に擁護

207:デフォルトの名無しさん
17/06/16 03:20:09.01 cmFh/xD2.net
英語圏の人たちにとってもRegular Expressionと言われて
[ \s]* みたいなことか~て思い浮かぶわけでもなかろ
単に「それを何と呼ぶか」つまり名前付けをどうするってだけのことだよ
ただ日本では(2chだけかもしれないけど)性器表現とか茶々入れる奴がいるのが面倒くさい

208:デフォルトの名無しさん
17/06/16 06:44:35.89 HukDnr5k.net
2chに限らずゲスな一般大衆の猿共は真っ先に性器と捉える
正規よりかは正則の方が良かっただろうけど
若い女の子へのセクハラに使えるから正規も捨て難い
まあ今時「せいき」の言葉にモジモジする女子なんて希少だが居なくは無い

209:デフォルトの名無しさん
17/06/16 12:48:55.14 dHQ1DtF8.net
くっさ

210:デフォルトの名無しさん
17/06/16 13:01:55.39 KyUpje1a.net
正規表現で置換

211:デフォルトの名無しさん
17/06/16 16:51:35.05 ugmLNmLC.net
>>207
通報した

212:デフォルトの名無しさん
17/06/16 17:21:44.35 HukDnr5k.net
痴漢の際に性器表現を用いた

213:デフォルトの名無しさん
17/06/16 18:35:19.21 1eQLQexT.net
成基学園ってまだあるんかね

214:デフォルトの名無しさん
17/06/16 22:02:33.78 fr6XvX0v3
緊急で知りたいのでお願いします

●Regular Expressionの使用環境
linux 4.1 カーネル

●検索か置換か?
置換

●説明
デジカメのファイル名を一括で変更したい

●対象データ DSC_で始まり4桁の数字.jpg
DSC_0414.jpg
DSC_0415.jpg
DSC_0416.jpg


●希望する結果 001.jpgから3桁で順番
001.jpg
002.jpg
003.jpg

215:デフォルトの名無しさん
17/06/19 22:55:10.17 HM1jnBNt.net
システム関係の仕事してるけど正規表現知ってるとホント仕事がはかどるわ
知らん奴いたら教えたくないレベルw

216:デフォルトの名無しさん
17/06/20 00:30:35.64 qgvPAN/M.net
システム関係の仕事って自宅警備員のこと?

217:デフォルトの名無しさん
17/06/20 08:43:02.71 bMt5HDL+.net
>>209
正規表現を用いて置換と挿入を行った
だろ

218:デフォルトの名無しさん
17/06/20 12:36:20.94 5s5M5H6z.net
痴漢と挿入

219:デフォルトの名無しさん
17/06/20 16:59:32.57 V+xxZfop.net
表現を抜いてれば完璧

220:デフォルトの名無しさん
17/06/22 00:33:36.51 WTVST2HN.net
痴漢って挿入する前にするものなのか?

221:デフォルトの名無しさん
17/06/25 14:01:32.44 cBKwT0iz.net
挿入したら痴漢じゃなくなるからそういうことだな

222:デフォルトの名無しさん
17/06/25 14:08:45.87 cBKwT0iz.net
質問です。
URLリンク(hayabusa3.2ch)・sc/test/read.cgi/news/1498009569/
↑ここに、「それは文科省にとってリスクか&#12441;あるわけて&#12441;すね。」っていう文章があります。
これをエディタで置換したいです。
秀丸エディタには半角化、全角化があるので、
「&#12441;」を「゛」に、「゛」とその前を半角に、「゙」とその前を全角にと言う手順で全角濁音化することができます。
しかし、段階的に置換すると、[ニダ]と言う文字が[ニダ]となります。
専ブラでなく普通のエディタでメール欄に限定せず「&#12441;」だけをちゃんと全角濁音化するにはどうしたらいいでしょうか。

223:デフォルトの名無しさん
17/06/25 14:14:01.85 cBKwT0iz.net
変換関数をネストして、全角から直接全角に置換すれば大丈夫っぽいです。
スレ汚し失礼しました。

224:デフォルトの名無しさん
17/06/25 14:17:59.69 lrjpj5rj.net
マクロ

225:デフォルトの名無しさん
17/06/25 14:24:13.60 cBKwT0iz.net
マクロを覚えるほど気力ないので。
せいぜいキーボードマクロまでですね。
メモ:
1回目「゙」→「゛」
2回目「[か-こさ-そた-と][゛]」→「\((0,ToHankaku),ToZenkakuHira)」

226:デフォルトの名無しさん
17/06/25 14:40:18.89 gOEYQ1GV.net
Unicode正規化

227:デフォルトの名無しさん
17/06/25 15:09:28.12 cBKwT0iz.net
ID:fr6XvX0v3
DOSコマンドでいけるよ
【.cmd】 バッチファイルスクリプト %12 【.bat】
スレリンク(tech板)

なんかscに書けなくなった。
認証が延々と出てくる。

228:デフォルトの名無しさん
17/06/25 15:19:25.37 cBKwT0iz.net
>>223
なるほど。
URLリンク(hide.maruo.co.jp)
> Unicode正規化を行ないます。
> パラメータとしてNFC、NFD、NFKC、NFKDが指定可能です。
Googlエ
> 合成形に正規化する方法を NFC(Normalization Form Composition)

229:デフォルトの名無しさん
17/06/29 16:59:45.11 02bfNUCV.net
質問します
●Meryで置換
●対象データ
wwwwwwwa,AAAAA,gawgagaw,fwaf awfaf
n,BBB,gawgagaw,fwaf awfa,fwaaw,fwaaw
rea,CCCC
ae,DD,gawgagaw,fwaf awfaf ,fwaaw
●希望する結果
カンマ2番目の
AAAAA
BBB
CCCC
DD

******
******
******
******
に置換

(?<=,).*?(?=[,\n])
までは考えましたがこれ以上力不足でわかりません よろしくお願いします

230:デフォルトの名無しさん
17/06/29 18:40:30.46 poRQnsAj.net
(^.*?,).*?(?=[,¥n])
rea,CCCCのパターンが行末だとできないんだよなー。

231:デフォルトの名無しさん
17/06/29 18:57:06.54 WmvxL1Sm.net
^([^,]*,)[^,\r\n]+

$1******
に置換
"a,b",defのようなものはダメだが

232:デフォルトの名無しさん
17/06/30 03:23:16.33 9+Qy2E7i.net
>>227-228
ありがとうございます 上手くいきました 
使わせていただきます&勉強材料にさせていただきます

233:デフォルトの名無しさん
17/07/06 20:38:45.39 zX6kiHLz.net
質問です。
●Regular Expressionの使用環境
Java Script
●検索か置換か?
置換
●対象データ
abc:ABCDEFG
def:123456789
ghi:くぁwせdr
●希望する結果
上記のような複数行の文字列があったとして、
"123456789"を取り出すにはどのようにしたら良いでしょうか?
条件としては、行頭の"def"をキーにして、
「defで始まる行の、def:の次の文字から行末まで」を取り出したいです。
よろしくお願い致します。

234:デフォルトの名無しさん
17/07/07 08:13:19.50 QFC9teR0.net
後読みが使えないJSなら/def:(.*?$)/m
使えるなら/(?<=def:).*?$/m

235:デフォルトの名無しさん
17/07/08 02:10:34.01 OqNCkVph.net
BBCの正規表現クイズ。たまにはこういうのも面白いね
URLリンク(www.bbc.co.uk)

236:デフォルトの名無しさん
17/07/08 06:16:34.80 b/20QJ7+.net
>>231
こういう場合、先読みの方法でやるメリットって有るんですか?
初心者なんで教えて下さい。

237:デフォルトの名無しさん
17/07/08 06:17:08.46 b/20QJ7+.net
訂正
後読みでした。

238:デフォルトの名無しさん
17/07/08 09:10:13.00 NOOXEVdu.net
>>233
後読みの部分にはマッチしない
つまり>>230で後読み使った場合には
123456789
にマッチするがそうでない場合は
def:123456789
にマッチする

239:デフォルトの名無しさん
17/07/08 19:51:13.74 utlt5XjQ.net
後読みの説明はそうなんだけど、>>231 について訊いてるんでしょ?
俺も>>231の意図はよくわからん。行単位の処理を希望してるのにm付けてるし

240:デフォルトの名無しさん
17/07/10 01:20:40.78 8zNQYoZi.net
>>232
日本語の記事
URLリンク(gigazine.net)

241:デフォルトの名無しさん
17/07/15 10:24:03.66 /mu01QmD.net
>>232
新しいなコレ!
面白いんでエクセルで入力できるフォーマットを作ってみた
URLリンク(www.dotup.org)
(拡張子でうちのエクセルが激古なのがバレる…)

242:デフォルトの名無しさん
17/07/15 12:03:12.72 6mzqXSAQ.net
少しやって時間の問題だなと思って途中で切り上げて答見たけど
数文字しか合ってなかった
最後までやらなくてよかった

243:デフォルトの名無しさん
17/07/25 08:57:23.04 QW1aVSBc.net
●Regular Expressionの使用環境
VBA7.1
●検索か置換か?
検索
●説明
期待する数値の桁数かどうか。拡張子はあっても無くても良い。
●対象データ
AA17-0001.xlsm
AA17-0002
●希望する結果
ifで合致しているかどうかを判定しています。
.Pattern = "^AA\d{2}-\d{4}(\.xlsm$)?"
○AA17-0001.xlsm
○AA17-0002
×AA17-00023
×AA17-00024.xlsm
最後の?を削れば、拡張仕込みであれば上手くいきますが良い方法は
ないでしょうか。

244:デフォルトの名無しさん
17/07/25 09:09:17.24 jjK7Ecmt.net
>>240
VBAの仕様は知らんけど、これでできない?
^AA¥d{2}¥-¥d{4}(¥.xlsm)?$

245:デフォルトの名無しさん
17/07/25 12:00:47.38 QW1aVSBc.net
>>241
有り難うございます!ばっちりです。
$マークを足すだけで良かったんですね。助かりました。

246:デフォルトの名無しさん
17/07/25 12:23:12.14 QW1aVSBc.net
差し支え無ければ、 ^AA\d{2}-\d{4}(\.xlsm)? だと
ND17-00001
ND17-00001.xlsm2
等々にもマッチしてしまう理由を教えていただけないでしょうか。

247:デフォルトの名無しさん
17/07/25 12:24:08.99 QW1aVSBc.net
ミス。AAでした。
AA17-00001
AA17-00001.xlsm2

248:デフォルトの名無しさん
17/07/25 12:38:31.42 0gI9u146.net
>>243,244
横からだけど
AA17-0000部分にマッチしちゃうんじゃない?

249:デフォルトの名無しさん
17/07/25 13:05:32.38 BGzbzmfB.net
^AA\d{2}-\d{4}(\.xlsm$)?

"^AA\d{2}-\d{4}" と "^AA\d{2}-\d{4}\.xlsm$" という意味
AA17-00001
AA17-00001.xlsm2
の "AA17-0000" の部分に前者がマッチする
"^AA\d{2}-\d{4}$" であればマッチしない

250:デフォルトの名無しさん
17/07/25 13:22:18.59 QW1aVSBc.net
なるほど。分かりやすく有り難うございます!
だから>>241で期待通りになるんですね。
頭固いと理解するのが大変です。。orz

251:デフォルトの名無しさん
17/07/25 13:29:36.02 oWvKCPb4.net
?は「直前のパターンが 0回または 1回登場する事」なので、そのパターン中に、$「行末」を含めてしまうと、(0回登場側で)効果が消えてしまう。
1人で書いてるとよくやるミスだと思う。

252:デフォルトの名無しさん
17/07/25 21:26:32.07 lTcbRvTI.net
^AA\d{2}-\d{4}
は実は
^AA\d{2}-\d{4}.*$
だと考えれば理解の助けになるかも。ならないかも。

253:デフォルトの名無しさん
17/07/26 01:05:33.15 3rtPYRQF.net
^AA\d{2}-\d{4}(\.xlsm$)?
$?
行末の後ろに、? か。
この式は、見た瞬間に、おかしいとわかる

254:デフォルトの名無しさん
17/07/26 11:10:37.56 Vp/yahqk.net
>>250
文法的にも間違いでは無いだろ

255:デフォルトの名無しさん
17/07/26 13:08:28.96 9H6h7u80.net
>>251
文法的には正しいけれど、式としておかしい「と感じる事ができる」と言いたいんだと思う。

256:デフォルトの名無しさん
17/07/26 14:48:10.36 Vp/yahqk.net
>>252
式としても正しい

257:デフォルトの名無しさん
17/07/26 14:55:46.30 aH2YwDtv.net
250,252みたいなのをアスペっていうんだろうな
論点は式や文法として正しいか正しくないかではないって事ぐらい一目見れば分かりそうなもんだが

258:デフォルトの名無しさん
17/07/26 16:41:49.04 NnPMbS6q.net
きちんと整理すると目的に合わない正規表現が直感的に分かるエスパー能力
としか言いようがないし>>250がその能力者だとしても特に羨ましくもない

259:デフォルトの名無しさん
17/07/26 17:37:15.75 UlpW8N7A.net
例えば、エディタの検索等で強調表示する際の式としてなら何も不思議は無いが
プログラム中での判定式ならば後者は必ず前者にマッチするので意味を成さない
つまり無駄に冗長であったり何かミスをしている可能性が高い。そういう事でしょ

260:デフォルトの名無しさん
17/07/26 17:37:56.28 Sop8S35W.net
>>254
プログラマに多いタイプではある

261:デフォルトの名無しさん
17/07/26 17:52:57.91 Bbl5PJto.net
問題は >>250 が何の役にも立ちそうにないということじゃないかな。
何を言いたいか想像できなくもないが、単に知らないだけという可能性もまた捨てきれない。
ここはそういう場所だ。
明確に「$ は末尾にだけ書くようにすれば間違いを防げると思うよ」とでも書けばよかったのに。

262:デフォルトの名無しさん
17/07/26 18:26:15.97 UlpW8N7A.net
まあ読点の打ち方とかみるにアホガキか底辺土方がドヤりたかっただけだろうから
そろそろそっとしておいておやり

263:デフォルトの名無しさん
17/07/26 19:38:32.33 VudXLbcK.net
臭う正規表現だと言えばいいのかな

264:デフォルトの名無しさん
17/07/26 21:03:00.43 JJ3vg08i.net
>>250は句読点の打ち方からも、おかしいとわかる
発端は正規表現は行を対象にマッチするものという偏見じゃないか

265:デフォルトの名無しさん
17/07/27 08:25:22.52 JB/MQIbV.net
>>254
もう本来の問題は解決して、間違いを防ぐという話をしているところに >>250 だ。
いかにも頭悪そうだけど何しに来たんだというのが論点じゃないのか?

266:デフォルトの名無しさん
17/07/27 09:03:12.08 32ZlcHw6.net
よくこんなネタでいつまでも盛り上がれるな

267:デフォルトの名無しさん
17/07/27 10:22:50.72 FeDFxsXm.net
うむ

268:デフォルトの名無しさん
17/07/27 11:04:39.19 w0VKyQmM.net
そこら辺も含めてプログラマに多いタイプって事だ
話の流れや空気を読むのが苦手なタイプ

269:デフォルトの名無しさん
17/07/27 15:20:17.23 DvNlZLuV.net
>>265
辛辣ワロタ

270:デフォルトの名無しさん
17/07/27 18:27:44.41 t8Fq16Nl.net
2ch的にはまだ甘い方

271:デフォルトの名無しさん
17/07/27 19:38:46.83 /VCkXAgy.net
プログラマって話の流れが読めないやつ確かに多い気がするけど、何でなんだろう。
プログラムとかって、流れを理解する事が重要じゃん?

272:デフォルトの名無しさん
17/07/27 21:11:31.82 oiygPPLB.net
プログラマーとひと口に言ってもピンキリ
使えないキリの方のコミュ障ボッチオタク系IT土方をバカにするネタでそういったのが多いから
そんなイメージが付いてるだけでしょ
業種に依らず底辺のゴミ共に通じるネタだったものが独り歩きしたんじゃない?
まあでも「流れや空気を読む」てのはファジーな判断能力でコミュニケーションの中で培われるから
人間関係よりも数学の方が楽って人には難しく、そういった傾向はあるのかも知れない

273:デフォルトの名無しさん
17/07/27 22:58:53.54 SUaLVh4Q.net
>>268
君、249か253じゃあないのかよ?

274:デフォルトの名無しさん
17/07/28 06:08:45.61 Xfxcd5ys.net
やっとスレチ終わった?

275:デフォルトの名無しさん
17/07/28 11:26:50.45 qIgprOUf.net
sageも知らずに書いてる人って同一人物なんだろうけど
自分が遠回しにディスられてる事にも気付いてなくて可愛い
ある意味幸せか

276:デフォルトの名無しさん
17/08/12 17:55:36.45 cYclCetd.net
●Regular Expressionの使用環境
Java1.8
●検索か置換か?
検索
●説明
下記の部分を抽出したい
AV0bc-t3.jpg
B32bc4f.jpg
●対象データ(一部)
風景-20170503-AV0bc-t3.jpg
b5-two-mountain-B32bc4f.jpg

最初は-を区切りとして抽出できるかと思ったが
抽出対象の文字列にも-が登場することが判明して為万事休す状態です。
どうかご指導お願い致します。

277:272
17/08/12 18:05:09.95 cYclCetd.net
>>273です
すいません。これどう考えても不可能ですね。
-ファイルについては手動でやってその他は正規表現で対応します。
失礼しました。

278:デフォルトの名無しさん
17/08/12 20:46:08.10 oUGtyFlO.net
不可能

279:デフォルトの名無しさん
17/08/12 21:05:50.58 wIgCsZkA.net
>>273
誤爆前提
(?<=\-)([A-Za-z\d]+\-?[A-Za-z\d]{0,3}\.jpg)(?=(?:\n|$))
[A-Za-z\d]{0,3}部の構成次第か?
まあ全部手でやるよりかはマシになるような気がする

280:272
17/08/12 22:50:49.75 cYclCetd.net
>>276
ありがとうございます!!
まじで神です!相談して良かったです。
こういう人がお金をもらえる世の中になってほしいです。
本当に感謝します。あなたは誰よりも優しいです。
無償で人の為にがんばる人は本当に尊敬します!!
ありがとうございました!!

281:デフォルトの名無しさん
17/08/12 23:11:24.65 U/tP6VJk.net
該当文字列長の幅が決まっているなら{6,8}の数字を調整すればこれでいけるはず
(?<=-)[-A-Za-z\d]{6,8}\.jpg

282:デフォルトの名無しさん
17/08/13 03:23:49.05 SYaWjJhn.net
ファイル名には、半角英数字の他、「- _ .」と半角空白も、考慮しろ
こういうファイル名もある
a.txt.zip

283:デフォルトの名無しさん
17/08/13 04:21:48.64 dm/KZ1el.net
.tar.gzとかで良かったのでは

284:デフォルトの名無しさん
17/08/13 19:47:39.02 BX+CBZkv.net
2chのNGで、「URLが含まれる文章を除いた行が5つ以上あるレスをNG」という表記を作ることは可能ですか?

285:デフォルトの名無しさん
17/08/13 21:08:22.43 lg+GT5+n.net
>>281
日本語を(´・ω・`)

286:デフォルトの名無しさん
17/08/13 23:08:53.31 47VquCRx.net
gopher:とかmailto:とかか

287:デフォルトの名無しさん
17/08/14 03:10:00.43 FrfucSX4.net
>>282
前提
①正規表現を使い、2chのNG設定を行いたい
②専門板での長文荒らしをNGしたい
③URLが貼られたレスは長文であってもNGにしたくない
以上から、「URLが含まれる文章を除いた行が5つ以上あるレスをNG」をしたいです
この表記を作ることは可能ですか?

288:デフォルトの名無しさん
17/08/14 03:17:09.39 FrfucSX4.net
URLの定義を以下のようにしました
://([a-zA-Z0-9_/:;%#\$&\?\(\)~\.=\+\-])*
(://の後に英数字とURLに使われる記号が続く文字列)
これを[^]で括って否定にした後、任意の行数以上含まれるレスのNGをするという方向性で考えています

289:デフォルトの名無しさん
17/08/14 16:30:05.91 yxoqAlkZ.net
^が否定と 先頭の2つの意味を持っていて
$ が 末尾と $1 $2 などのインデックスの意味を持っているとか
メタ文字の効果が重複しているのが混乱します。



290:どうすればいいですか?



291:デフォルトの名無しさん
17/08/14 16:37:59.81 IeoGyZA4.net
>>286
たぶん[^]で括って否定には出来ないと思うよ。

292:デフォルトの名無しさん
17/08/14 18:31:02.14 89kehc6V.net
Jane StyleでIDなしのレスだけ抽出するにはどうしたらよろしいでしょうか?
IDなしをNGにする方法はいくらでも出てくるのですが・・・

293:デフォルトの名無しさん
17/08/14 19:13:15.73 j2odgQ2N.net
>>288
IDの有無が混在しているスレ教えて

294:デフォルトの名無しさん
17/08/14 20:33:03.02 89kehc6V.net
>>289
浪人あればID消せるんじゃなかったっけ?
ID表示スレでも?
たまに見かけるんだけど、
じゃあ、どのスレ?と聞かれてもなかなか見つからない。
すいません、見つかるまでお待ち下さい・・・

295:デフォルトの名無しさん
17/08/14 20:34:12.87 89kehc6V.net
半角文字列板でたまに見かけたような気が・・・

296:デフォルトの名無しさん
17/08/14 20:39:37.25 j2odgQ2N.net
もしくは
IDなしをNGにして、あぼーんのみ表示するとか

297:デフォルトの名無しさん
17/08/14 20:59:49.60 89kehc6V.net
>>292
すみません。今のところ該当スレが見つかりません。
目的としては、
優良エロ画像スレでたまにIDなしでグロ画像を貼る輩がいて、
IDなしのレスがほぼグロ画像ならIDなしをNGにするし、
IDなしでも優良エロ画像を貼ってくれてるならIDなしでもNGしないし・・・
という恥ずかしい理由なんです

298:デフォルトの名無しさん
17/08/14 21:00:54.22 89kehc6V.net
>>292
>IDなしをNGにして、あぼーんのみ表示するとか
これってどうやればいいんでしょうか?

299:デフォルトの名無しさん
17/08/14 21:04:32.71 j2odgQ2N.net
>>293-294
ここ正規表現スレだからJane質問スレに来て

300:デフォルトの名無しさん
17/08/21 19:05:01.74 ToOu4wDd.net
よろしければアドバイスください
●Regular Expressionの使用環境
正規表現で検索できるテキストエディタ
●検索か置換か?
検索
●説明
アンド検索で一つ目にマッチした文字列からn行以内にある二つ目の文字列までを抽出したい
●対象データ
林檎みかんバナナ
みかん林檎バナナ
林檎キウイみかん
バナナ林檎みかん
メロン林檎バナナ
メロンみかん林檎
みかんバナナ林檎
林檎みかんキウイ
林檎バナナみかん
●希望する結果
みかんバナナ
みかん林檎バナナ
林檎キウイ

301:295
17/08/21 19:05:58.56 ToOu4wDd.net
>>296の質問のつづきです
●自分で試したこと
今回は三行以内に「みかん」と「キウイ」の二つの文字列を含む部分 だけ を抽出したい
記述は以下のように書いてみたが、四行以上にまたがってマッチした部分まで抽出されてしまった
みかん([¥s¥S]*?)キウイ
●自分で試した検索ワード
「正規表現 複数行 文字列 検索 -秀丸」の組み合わせをいくつか試した
検索結果からプログラマーの質問回答サイトに飛んで似たように検索するも欲しい回答は見つからず

302:デフォルトの名無しさん
17/08/21 21:48:45.68 EQVEvxNp.net
n行なら可能だけどn行以内ってのは無理だと思う
つまり
1行の式|2行の式|…|n行の式
と書くしかないんじゃないかな

303:295
17/08/21 22:44:09.38 ToOu4wDd.net
そうですか
やはり ([¥s¥S]*?) を使うのが間違ってますよね?
レスありがとうございます

304:デフォルトの名無しさん
17/08/21 23:09:35.41 7hohe37q.net
/みかん¥S*?¥n??¥S*?¥n??¥S*?キウイ/g
とか
/みかん(?:¥S*¥n?){0,2}¥S*キウイ/g
とかかな
1~3行目と6~8行目のみかん~キウイがマッチする

305:デフォルトの名無しさん
17/08/23 21:18:57.34 a8dh4txw.net
>>297
秀丸の正規表現はしらないので一般的な正規表現で考えてみた。
試していないので間違っているかもしれないが。
みかん(.*¥n){1,3}?.*キウイ

306:デフォルトの名無しさん
17/08/23 23:01:36.58 bHZ6/xkT.net
>>301
試すといいよ
URLリンク(regex101.com)

307:デフォルトの名無しさん
17/08/23 23:56:43.55 v21fsY6g.net
できないね
秀丸はマイナス検索では?

308:デフォルトの名無しさん
17/08/24 22:00:31.43 vZuGMV9A.net
できたよ
コピペしたときバックスラッシュが別の文字に変わっていたので、



309:そこだけ入力し直したけど



310:デフォルトの名無しさん
17/10/02 15:17:50.91 uet6lO9o.net
二文字以上連続していない場合のみヒットする正規表現はどう書けばいいですか?
aを探すとして
"abc"のaはヒットする
"aabc"のaaは連続しているのでヒットしない
ということをしたいです

311:デフォルトの名無しさん
17/10/02 15:33:07.99 MBLNVziv.net
(?<!a)a(?!a)

312:デフォルトの名無しさん
17/10/02 15:50:22.85 oE42sBRL.net
aで固定って訳じゃなくて
bだけとかcだけとかも探したいのでは?

313:デフォルトの名無しさん
17/10/02 16:29:10.05 rrE28i3s.net
冷静なつっこみに受けた

314:デフォルトの名無しさん
17/10/02 17:40:05.25 G/SyJC6m.net
単に見つけるだけなら
/(.)(?!\1)(.)(?!\2)/
で出来なくもない。
しかし、見つかったときは2文字マッチするパターンなので
全部見つけたい場合はそこを考慮する必要がある。
先頭の文字は見つけられないから別途
/^(.)(?!\1)/
のようにする必要があるだろう。
言語によってはもっとうまくできるかもしれない。
でも、for 文とかで探す方がいいと思うよ。

315:デフォルトの名無しさん
17/10/02 18:33:11.59 G/SyJC6m.net
/(.)(\1)*/
でマッチした長さが 1 だったらという考え方も出来るけど、どう?

316:デフォルトの名無しさん
17/10/03 03:04:28.76 FFksRFs1.net
/^(?!.*(.)\1).*/

317:デフォルトの名無しさん
17/10/11 15:02:29.43 PTqhQudL.net
ユニコード文字プロパティから
特定の文字のみを除外した文字の集合を
簡単に書く方法はあるでしょうか?
例えば \p{C} からタブ(\t)と改行コード(\n|\r)のみ除外したもの

318:デフォルトの名無しさん
17/10/12 22:03:36.05 iUceZ3nS.net
>>312
(?![\n\r])\p{C}

319:デフォルトの名無しさん
17/10/14 07:42:21.07 sv7zl76d.net
「"」以外の文字にマッチするが「\"」ならそれにもマッチする
ってどう書けばいいですか?

320:デフォルトの名無しさん
17/10/14 08:04:06.86 Wo1S3xrN.net
>>314
([^"]|(?<=\\)")

321:デフォルトの名無しさん
17/10/14 08:38:00.26 sv7zl76d.net
ありがとうございます
知らない記号があるので勉強します

322:デフォルトの名無しさん
17/10/14 12:04:18.44 SVCVJk+z.net
正規表現を再利用したくて調べたんだができないんだな
itemcode:=/(S|T|U)\d{3}-\d{4}/
/^\s*\{itemcode}\s*$/
こういう仕様あっても全然いいと思うんだが仕様策定団体がサボったのか

323:デフォルトの名無しさん
17/10/14 12:19:47.01 2Glba8SI.net
言語やエディタの機能で補完すれば?
変数に正規表現リテラルを格納して後で使えるようにするのは正規表現の枠をこえてる

324:デフォルトの名無しさん
17/10/14 13:45:15.89 m/q/3Rhj.net
>>317
そもそも正規表現の規格の枠外やん
Perlなら
my $itemcode = q/(S|T|U)\d{3}-\d{4}/;
my $regex = qq/^\s*{$itemcode}\s*$/;
$target =~ /$regex/;
とか出来たと思うが, $itemcodeも$regexも単に文字列だしな

325:デフォルトの名無しさん
17/10/14 20:25:03.69 nyEdEfPd.net
>>317
環境によるが、pcreを使っているプログラムなら、
(?(DEFINE)(?<name>pattern)...)で定義して(?&name)で使える。つまり、
/(?(DEFINE)(?<itemcode>(S|T|U)\d{3}-\d{4}))^\s*(?&itemcode)\s*$/

326:デフォルトの名無しさん
17/10/15 12:04:10.87 xFgouCR2.net
正規表現技術入門って本買ったら初心者の入門書じゃなかった…

327:デフォルトの名無しさん
17/10/15 23:07:27.13 /4ZFGRZX.net
後方参照っどこが後方やねん、後方で参照してるってことか?
と思っていたのですが、
左から右へと文字列を舐めていくカーソルの立場から見て後ろ、
という意味ですね?

328:デフォルトの名無しさん
17/10/16 07:55:53.10 hhyAWP


329:uR.net



330:デフォルトの名無しさん
17/10/16 10:07:29.75 ZoMoe7Af.net
上から下

331:デフォルトの名無しさん
17/10/16 16:17:56.84 BvwEZWNg.net
PCRE_EXTENDEDの説明に
この修飾子を設定すると、エスケープするか 文字クラスの内部を除き、
パターンの空白文字は完全に無視されます。
とありますが、
これはどういう時に使うのでしょうか?
空白文字を無視したいなら
最初からパターンに含めなければいいだけのような気がするのですが・・

332:デフォルトの名無しさん
17/10/16 17:17:54.69 VwEzpL/B.net
>>325
改行したりして可読性を高めたい時とか

333:デフォルトの名無しさん
17/10/16 17:31:22.40 BvwEZWNg.net
>>326
可読性を上げるためのオプションですね
ありがとうございます

334:デフォルトの名無しさん
17/10/18 00:44:52.51 HJHK1SNa.net
[$]
こういう文字クラスがあった場合、これは終端と解釈されますか?
それとも文字列の$と解釈されますか?
また、[\$] だった場合は挙動が変化しますか?

335:デフォルトの名無しさん
17/10/18 01:19:34.59 GswCLlj6.net
試せば?
URLリンク(regex101.com)

336:デフォルトの名無しさん
17/10/18 01:39:24.99 HJHK1SNa.net
ありがとうございます
やはり文字列なんですね

337:デフォルトの名無しさん
17/10/20 00:50:10.62 hFePCOoH.net
過去にAutohotkeyスレで正規表現自体の質問は正規表現スレに行けとあったのでこちらで質問させて下さい(巻き添えアク禁でソフトウェア板に書き込めません)。宜しくお願いします。
●Regular Expressionの使用環境
wikiより引用
>AutoHotkeyで用意されている正規表現は、Perl 5に搭載されているものと概ね互換のPCRE(Perl Compatible Regular Expressions)である
●検索か置換か?
検索
●説明
順不同の単語群のすべてを含む文字列の最長を検索し取り出したいです
●対象データ
var := "クリスマス任意の文字列お盆任意の文字列正月任意の文字列"
pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)", $)
MsgBox, pos=%pos% $=%$%
s)の意味はシングルラインモード
posはマッチした位置
$にはマッチした全体が入ります
これですと先頭の"位置"にマッチ(pos=1になります)するのでマッチした全体$は空になってしまいます
●希望する結果
$=クリスマス任意の文字列お盆任意の文字列正月
実際は長文の一部で単語群がもっと多いです
どの文字が先頭でどの文字が最後か不明のとき、これらの単語群がすべて含まれる文字列全体を取り出すにはどのように書いたら良いでしょうか
(クリスマス|お盆|正月).+(?1)
これですと正月という単語が含まれなくてもマッチしてしまいます

338:デフォルトの名無しさん
17/10/20 02:08:00.45 yLtxI7rs.net
>>331
>これらの単語群がすべて含まれる文字列全体を取り出すには
これらの単語群って、クリスマス・お盆・正月の3単語を指してるのかな?
それならダサいけど(クリスマス|お盆|正月)を3回繰り返せば?
URLリンク(regex101.com)

339:デフォルトの名無しさん
17/10/20 02:42:11.40 GaFTw98F.net
>>331
その2を組み合わせればいいじゃん
/(?=.*クリスマス)(?=.*お?盆)(?=.*正月)(?:クリスマス|お?盆|正月).*(?:クリスマス|お?盆|正月)/

340:デフォルトの名無しさん
17/10/20 19:27:41.06 P/1hvwmS.net
2ch → 5chになったタイミングでアク禁って全解除されたと思うけど、また規制され始めたのかな?

341:デフォルトの名無しさん
17/10/20 19:58:25.65 S6VTZkXa.net
は?

342:デフォルトの名無しさん
17/10/20 20:01:26.36 GaFTw98F.net
アク禁は知らんけど、おπ規制だけは5chでは2chのを引き継いでないってことは言われてた

343:330
17/10/20 20:06:35.04 JiGfFRv1.net
>>332
すみませんでした
(クリスマス|お盆|正月)の3つの単語を全て含む文字列の最長マッチと書くべきでした
(クリスマス|お盆|正月).*?(クリスマス|お盆|正月).*?(クリスマス|お盆|正月)
では最長3単語まででお盆という単語を含まなくてもマッチしてしまいます
>>333
>その2
というのが何をさす


344:のかすみません分かりませんでした var := "クリスマス任意の文字列お盆任意の文字列正月任意の文字列お盆任意の文字列正月任意の文字列クリスマスzzzz盆zzzzz盆zzzzzzz盆zzzzzzzzzzzお盆" pos := RegExMatch(var, "s)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $) MsgBox,,, pos%pos% %$%, ;マッチ $=var全体 pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $) MsgBox,,, pos%pos% %$%, ;行頭^記号ありでもマッチしました $=var全体 これでお盆が含まなければマッチせず、全ての単語が含まれるとき期待通りになりました。有難うございました ただ、対象文字列の1文字目が(クリスマス|お盆|正月)以外で始まるケースではマッチしませんでした 最初に書いたこれなら1文字目を問わずマッチするのですがやはり全体が拾えず……。 pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)", $) var := RegExReplace(var, "^.*?(?=クリスマス|お?盆|正月)", "") のように1文字目が必ず指定した単語のどれかになるように修正してから使わせていただきます お世話になりました。



345:デフォルトの名無しさん
17/10/20 20:21:51.48 GaFTw98F.net
先頭に^を付けたらダメだろ
^は文頭の位置を表す記号なんだから

346:デフォルトの名無しさん
17/10/20 20:23:53.34 JiGfFRv1.net
pos := RegExMatch(var, "s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))", $)
MsgBox, %$1%
すみませんこれで1文字目不問で取り出せました
長文失礼しました

347:デフォルトの名無しさん
17/10/20 20:27:40.74 GaFTw98F.net
何がしたいの?
>>333で要求する最長文字列を取れるはずだけど?
マッチ全体がそうなるようにしてるんだから
それとも部分キャプチャで取りたかったんなら全体を()で括るだけでいいよ

348:デフォルトの名無しさん
17/10/20 20:41:25.29 JiGfFRv1.net
説明下手ですみません
var := "zzあzzzいzzzうzzzうzzあzzいzz"
最初に見つかる(あ|い|う)のどれかから
最後に見つかる(あ|い|う)のどれかまで
かつ(あ|い|う)すべての語が含まれる文字列を取り出したかった
アク禁じゃなくスマホ回線だからかも知れません

349:デフォルトの名無しさん
17/10/20 22:48:55.52 yLtxI7rs.net
>>337
おおそういう事だったか
ちょっと難しいね
URLリンク(regex101.com)

350:デフォルトの名無しさん
17/10/21 00:17:18.52 jXM7J8Fl.net
こういうのはどうかな
(?=.*クリスマス)(?=.*お盆)(?=.*正月)(?:クリスマス|お盆|正月).*(?:クリスマス|お盆|正月)

351:デフォルトの名無しさん
17/10/21 00:21:45.84 jXM7J8Fl.net
と思ったら>>333と全く同じやんけ・・・・
これでちゃんと途中からでも欲しい部分全部拾えるでしょ?
URLリンク(regex101.com)

352:デフォルトの名無しさん
17/10/21 00:33:00.59 ZBz0JWdz.net
**クリスマス**クリスマス**正月**お盆**お盆**
だったら最初と最後の**を抜かして
クリスマス**クリスマス**正月**お盆**お盆
にマッチさせたいって話なの?

あとシングルラインモード使ってるから
複数行にわたってマッチさせたいんだよね?
↓こういうの
**クリスマス**
**クリスマス**正月**
**正月**お盆**

353:デフォルトの名無しさん
17/10/21 00:33:20.08 ZBz0JWdz.net
アスタリスク見にくいな

354:338
17/10/21 02:32:45.68 o7hEIA7f.net
>>343,344
AutoHotkey v1.1.26.01(最新) Unicode版ですがやはり先頭が別の文字列だとマッチしません
var := "zzzクリスマス任意の文字列お盆任意の文字列正月任意の文字列お盆任意の文字列正月任意の文字列クリスマスzzzz盆zzzzz盆zzzzzzz盆zzzzzzzzzzzお盆"
pos := RegExMatch(var, "s)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $)
MsgBox,,, pos%pos% %$%, ;pos=0 マッチしません
>>339の正規表現ならpos=1で最初に見つかるクリスマスから最後の盆まで取り出せました
>>345
その通りです>>341より分かりやすい説明が思いつきません

355:デフォルトの名無しさん
17/10/21 12:04:21.32 Awu3DWjD.net
"s)(?=((お?+盆)|(クリスマス)|(正月)))(?=.*(?2))(?=.*(?3))(?=.*(?4)).*(?1)"
>>347
気持ち悪いから試してみた
"s)(?=盆)盆"→マッチする
"s)(?=.*?盆)盆"→マッチしない←?!?!
"s).(?=.*?盆)盆"→する
"s)(?=.)(?=.*?盆)盆"→する
"s)(?:)(?=.*?盆)盆"→する
s)と(?=.*の間に何かを挿めば何故か回避できそう?
"s)(?:)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)"

356:338
17/10/21 17:14:22.52 o7hEIA7f.net
>>348
すごい!>>347のvar文字列に対しpos=4で最も理想的な形でとれました!
pos := RegExMatch(var, "s)(?=((お?+盆)|(クリスマス)|(正月)))(?=.*(?2))(?=.*(?3))(?=.*(?4)).*(?1)", $)
MsgBox,,, pos%pos% %$%, ;pos=4 $=最初のクリスマスから最後の盆
s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)
この正規表現の出所はスマホアプリ板2chmate質問スレのテンプレにあるNGワードで
2chmateのシングルラインモードは(?s:ここに正規表現)と書くようです
その辺のやりとりが過去スレ
URLリンク(itest.5ch.net)


357:9/893-n にありました >893 >複数のワードを全て含む書き込みをNG >(?s:^(?=.*ワード1)(?=.*ワード2)(?=.*ワード3)) >これがどうしても分からん(なぜワードの順番を入れ換えてもマッチするのか) > >895 >ワード1を先読みしてそれを含む^にマッチ >ワード2を先読みしてそれを含む^(?=.*ワード1)にマッチ >ワード3を先読みしてそれを含む^(?=.*ワード1)(?=.*ワード2)にマッチ > >896 >例えば「(先頭)あいうえお」という文字列に^(?=.*うえお)でサーチかける場合 >^(?=.*うえお)は「.*うえお」が続く^のみにマッチするから「うえお」を含む「(先頭)」にマッチ >つまりこれを何度やっても^に戻ってくる >で、先読みがどこかで失敗したらそこで成立しなくなるというカラクリ



358:338
17/10/21 17:15:24.33 o7hEIA7f.net
s).*?((?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月))
AutoHotkeyシングルラインモードでは正規表現の先頭に「^」が有っても無くても先頭からマッチするので
.*?(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月) ;<----ここで先頭にマッチ(1)
(?:お?盆|クリスマス|正月) ;<----先頭に続く最初に見つかる(?:お?盆|クリスマス|正月)のどれかにマッチ(2)
.*(?:お?盆|クリスマス|正月) ;<----(2)に続く最後に見つかる(?:お?盆|クリスマス|正月)のどれかにマッチ(3)となるようです
s)と(?=.*?の間に最短0文字表現を入れないとマッチしないのはもしかしてバグなんでしょうかね

359:デフォルトの名無しさん
17/10/24 15:16:03.89 5n0ye5v7.net
すみません。
自分で書いた正規表現が期待通り動いたのですが理由が分かりません。
どなたか解説お願いします。
Notepad++の置換で、こんなデータに対して
<abcde> <hijk>
<abc> <XYZ>
<dfg>
検索文字列 (?:\s*<([^<>]*)>)?\s*<([^<>]*)>
置換文字列 [$1]\t[$2]\r\n
で置換して、結果がこうなりました。
[abcde] [hijk]
[abc] [XYZ]
[] [dfg]
この三行目の動作なんですが、一行に一個しかデータが無い場合には、二番目のデータとしてキャプチャしたかったので
この動きで良いのですが、なぜこれが出来たのが分かりません。
検索文字列の一つ目の丸カッコの (?:・・・)? <== この量指定子?がそう言う動作になるのでしょうか?
そうだとしたら、なぜそうなるのでしょうか?
あるいはもっと簡潔なパターンはありますか?
宜しくお願い致します。

360:デフォルトの名無しさん
17/10/24 15:43:41.40 JVoqQJo1.net
$1と$2が存在するという前提で置換しておきながら$1は?で消えるかもと指定してるから
$1が無いパターンにマッチしたと判断された(適当)

361:デフォルトの名無しさん
17/12/01 00:01:15.16 J9gYbH6z.net
Spam Mail Killerの正規表現についてすみませんがご教示ください。
メールアドレスに同じドメインのアドレスを複数(たとえば3個以上)含む、という場合
例えばですが
abc@uvw-xyz.com, defg123@uvw-xyz.com, hi456@uvw-xyz.com
このようなアドレスをひとくくりに探し出すにはどのようにすればいいでしょうか?
##/(?=.*@uvy-xyz\.com){3,}/km
とやってみましたがうまく動きませんでした。
正規表現って難しい・・・

362:デフォルトの名無しさん
17/12/01 00:27:29.48 lY+8fymW.net
(.+?@uvw-xyz.com){3,}

363:デフォルトの名無しさん
17/12/01 00:37:36.11 J9gYbH6z.net
>>354
ありがとうございます。
対象アドレスが2つでも反応してしまいました(´・ω・`;)何故だー

364:デフォルトの名無しさん
17/12/01 01:38:11.93 4kQewCo+.net
([\w\d._-]+?@uvw-xyz\.com, ){2,}[\w\d._-]+?@uvw-xyz\.com
冗長だけど、とりあえずこれならどのアプリでも動くはず

365:352
17/12/01 03:23:10.36 J9gYbH6z.net
>>356
ありがとうござます。ばっちりでした。
ひとまずはこれで運用してみようと思います。

366:デフォルトの名無しさん
17/12/01 14:56:42.38 GNYmtVXo.net
([\w\d._-]+?@uvw-xyz\.com(,\s?)?){3,}
メールアドレスに注目するなら、これでもいいかな

367:デフォルトの名無しさん
17/12/01 15:03:45.52 GNYmtVXo.net
スペースのパターンも考慮すると、こちらのほうがいいかも
([\w\d._-]+?@uvw-xyz\.com(,\s*)?){3,}

368:デフォルトの名無しさん
17/12/01 19:07:13.56 lDYRmGG1.net
拘り始めるときりがない
複数の記述方法があるしそれで制限も変わる
URLリンク(ja.m.wikipedia.org)
軽く「正規表現 メールアドレス」でググればメールアドレスを糞まじめに正規表現で頑張る意味がないのが頭の5個も読めば理解できるでしょ
依頼者がとりあえず解決したと言ってるんだからこれ以上は現状不要だよ

369:352
17/12/01 23:13:24.55 J9gYbH6z.net
みなさんありがとうございました。
書き方も拘りだしたらきりが無いというのはよくわかりました。
記述がすっきりしていて動作も問題なかったので >>359 の方法でいってみます。

370:デフォルトの名無しさん
17/12/02 07:41:29.80 dQK/O/Fy.net
>>360
最初に与えられた条件の中で、単に冗長な表現をシンプルにすることは、
限界事例を前提するような拘りというのとは違うと思うけどな。

371:デフォルトの名無しさん
17/12/02 09:41:49.64 mi+Z/zsa.net
>>361
横槍だけど358は最初に与えられた条件(3回出現)と違って3回“連続”出現だから留意してね
そして\wは\d_を含んでいるからまだ冗長だ、ついでに+?の?も{3,}の,もシンプルじゃないね
最初の質問の=を:にするだけでよかったと思うよ
^(?>.*?@uvy-xyz\.com){3}

372:デフォルトの名無しさん
17/12/02 10:25:05.48 hDsQS9Tu.net
依頼者が充足宣言してるのにね

373:デフォルトの名無しさん
17/12/02 10:49:44.12 SQFbqxvb.net
正規表現の難しいところは引き際。いろんな意味で。

374:デフォルトの名無しさん
17/12/02 20:04:53.17 aLfswfyL.net
質問がメインのスレじゃないんだから、
探究することは悪いことじゃないよ。

375:デフォルトの名無しさん
17/12/02 20:22:17.17 P9eUjlcX.net
なにいってんだこいつ?
1
> 質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
2 質問テンプレ

376:デフォルトの名無しさん
17/12/02 20:32:56.34 +fOAFawt.net
> 質問する場合は
  ̄ ̄ ̄ ̄ ̄ ̄

377:デフォルトの名無しさん
17/12/02 22:11:28.09 oKFwf0E4.net
ほとんど質問がルートのレスツリーばかり
テンプレも質問がらみばかり
引き際誤るとここまで人はみっともなくなれるのか

378:デフォルトの名無しさん
17/12/02 22:44:47.63 1qjImk2p.net
自己紹介乙

379:デフォルトの名無しさん
17/12/02 23:58:10.96 NhirO4Ud.net
引き際重要

380:デフォルトの名無しさん
17/12/10 08:22:53.66 DxswVEqC.net
Google Apps Scriptで、下記の時系列データを配列で取得したいのだけど、どうしたら良いですか?
URLリンク(www.morningstar.co.jp)

381:デフォルトの名無しさん
17/12/10 17:27:12.44 UOQUQi73.net
どこまでやりましたか

382:デフォルトの名無しさん
17/12/10 18:40:59.63 DxswVEqC.net
あとは正規表現のとこだけです。
<tr>
<td class="center">12/08</td>
<td class="center">169</td>
<td class="center">17</td>
<td class="center"> </td>
<td class="center">26</td>
</tr>

383:デフォルトの名無しさん
17/12/11 00:06:26.95 4q7JrCp0.net
jQuery のセレクターを使え
$('td.center').text()

384:デフォルトの名無しさん
17/12/11 01:01:11.97 06if4WxO.net
>>374
正規表現よりHTMLパーサ使えってのは>>374に同意するがjQueryは外部HTMLをパース/操作するものではない
URLリンク(sites.google.com)
この辺参考にするのがいいんじゃない

385:デフォルトの名無しさん
17/12/11 07:53:34.73 HLwn5MaC.net
急にHTMLパーサなんて言われてもチンプンカンプンやわ

386:デフォルトの名無しさん
17/12/11 09:34:01.52 78kXJ+6a.net
すぐできるだろうと思って泥沼にハマることが多いわ、こりだすとキリがないわで、あきらめどころが難しいのが正規表現。
自分の中で制限時間(10分など。忙しさによる)を設けて、
それ以上時間がかかる場合は正規表現による解決するのをあきらめるってのが、運用上は合理的だろうね。
正規表現そのものの学習・調査をしたい場合は、もちろん違うが。
このスレの客層はどっちなのってことなのかな。

387:デフォルトの名無しさん
17/12/11 14:24:59.19 HLwn5MaC.net
jQueryやらHTMLパーサやら能書きばっかり
正規表現で出来たから、もうええわ

388:デフォルトの名無しさん
17/12/12 00:30:19.52 u8BojTW8.net
>>376
>jQueryは外部HTMLをパース/操作するものではない
なんでよ?

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

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

391:デフォルトの名無しさん
17/12/16 03:31:44.42 ArLhqftT.net
正規表現は構文解析器(parser)じゃないから、
XML, HTML のように、文書に構造があるものは解析できない。バグる
例えば、コメント部に、
<td
と書かれていても、正規表現では該当してしまう
それに要素間に、祖先・子孫などの関係があって、入れ子構造になるから、
開始・終了タグが一致しない

392:デフォルトの名無しさん
17/12/18 22:01:18.38 fLY/8wUq.net
バックスラッシュt、でいいやろ

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

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

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

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

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

397:デフォルトの名無しさん
17/12/25 22:40:21.08 8yZmKHLj.net
ユニコードなので特に何かに限定されない
ZWSPやZWJなどの方が地獄
URLリンク(anti.rosx.net)

398:デフォルトの名無しさん
18/01/02 13:30:58.99 bFwGimBi.net
新年おめでとうございます
スマホアプリで正規表現を使いたくて調べたレベルで恐縮です
'\s'は空白文字だそうですが半角スペースのみを表現できないでしょうか?
また'/'を用いて半角スペースを表す方法はありませんでしょうか?
宜しくお願い致します

399:デフォルトの名無しさん
18/01/02 19:00:49.45 I9szCE3x.net
何故その程度ググらない?
半角スペースはそのまま半角スペースだ

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

401:デフォルトの名無しさん
18/01/06 20:03:46.61 eEPcZWZ


402:O.net



403:デフォルトの名無しさん
18/01/06 20:08:09.69 eEPcZWZO.net
●対象データ
△△hostname:△hogehoge.com改行
△△△△hostname:△mogemoge.com改行
△hostname:△192.168.1.1改行
のようにスペースが入っています。
Janeでカキコするとスペースが消えたので補足します。

404:デフォルトの名無しさん
18/01/06 21:13:44.07 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:デフォルトの名無しさん
18/01/06 22:13:51.90 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:デフォルトの名無しさん
18/01/06 22:25:41.73 RuMnMvof.net
> がIPアドレス除外ですね
違う
\Sは空白文字以外だから[^\S\x0A\x0D]は空白文字以外とCR, LFの「何れでもない」場合, つまり空白文字からCRとLFを除外したもの
そもそも(先頭が英字でなければならない)ドメイン名でマッチングしてるんだから先頭が数字で始まるIPアドレスを後から除外する必要はない
再利用性に関しても, 後読み出来るエンジンかそうでないかで既に失われてるんじゃないかね
キャプチャの取得方法なんぞ言語ごとに大分違うしな
仕事で使うなら尚更メンテし辛い上に遅い正規表現を使わにゃならん積極的理由は無い
splitでループ回せば入力のサイズに対して線型時間で終わることが保証される上に保守性も高い

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

408:デフォルトの名無しさん
18/01/10 23:41:51.90 qa5Jh8Cf.net
>>398
現仕様だとまさにIP除外なんだけど、123.comとかが入ってくるので、あとで除外しているという。。
>>397
今日、やっと開発場所で試しました。
ドメインは見事マッチしました!が、
△△domain:△hogehoge.com改行
の行までマッチしてしまうので、
^\s*
(?:[A-Za-z]~
のところを
^\shostname:*
(?:[A-Za-z]~
にしてみましたが、今度はすべてマッチしなくなりました。
スペース連続shostname:*を除外したつもりなんですが…


409:教えてくだされ。



410:デフォルトの名無しさん
18/01/11 10:30:10.40 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:デフォルトの名無しさん
18/01/11 12:30:44.58 /99JjIqr.net
>>399
要件は満たしたつもりだが, その行がマッチしちゃならん理由は?
それともキャプチャの意味が分かってないのか?

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

413:デフォルトの名無しさん
18/01/11 17:51:18.77 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:デフォルトの名無しさん
18/01/16 12:15:21.97 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:デフォルトの名無しさん
18/01/16 13:31:33.72 y9BMfGeo.net
URLリンク(social.technet.microsoft.com)
コレか?
URLエンコード文字だけなら簡単だがASCIIが入るとなると容易ではない(どこまでがファイル名か判別出来ない)
クライアント側のアップデートを待つ方が賢明な気がする

416:デフォルトの名無しさん
18/01/16 13:45:59.33 y9BMfGeo.net
あと忘れてたけどWebDAVならクライアントにWinSCP使うとか

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

418:デフォルトの名無しさん
18/01/16 17:00:43.44 1yOH1J8J.net
pattern = /^(.*)(?!%)/
p pattern.match('abc%123')
Ruby で否定先読みを使ったら、「abc」だけ取れない。
すべての文字列にマッチしてしまう
なんでやねんw

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

420:デフォルトの名無しさん
18/01/16 18:31:44.93 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
18/01/16 19:25:09.57 1yOH1J8J.net
正規表現でも、できた。
Ruby では、先頭から、% 以外の文字を探す
pattern = /^[^%]+/
str = '/dir/desktop.inib%01%EE%81'
puts pattern.match str
結果
/dir/desktop.inib

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

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

424:403
18/01/17 15:18:31.78 BVJUZk9+.net
皆さんありがとうございます。
>>413
それ以外にも幾つか変な文字の時もあり、
問題なく何も付かない時もあります。
決まったパターンは無いと思った方が良いですね。
すべてが1byte文字の時は

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

426:デフォルトの名無しさん
18/02/07 23:42:01.50 3vNjEx0B.net
●Regular Expressionの使用環境
桜エディタ(テキストエディタ)
●検索か置換か?
置き換え
●説明
文字数、文字種はいろいろです。ただしすべて半角(1バイト文字)です。
結果として、<>内の文字だけにできればどんな方法でも構いません
必要な情報かわかりませんが、<>の外には、<>があることはありません。
asqa>w3e<a>s98<as897kja> ←こんな感じの行はありません。
行末は必ず、>で終わり、必要な文字は必ず<>でくくられたものの中にあります。
いらない文字<必要な文字>ここに改行が入る という書式は絶対です。
●対象データ
R&^&*(!TYUIKM<slihfd>
BA%(*&%ASAS<asdlikh>
TF^(VB(*&N<a09sfyighkljn>
●希望する結果
slihfd
asdlikh
a09sfyighkljn

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

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

428:デフォルトの名無しさん
18/02/08 23:06:15.86 VxK8nSc/.net
[^<>^] サンクス

429:デフォルトの名無しさん
18/02/08 23:24:13.78 Zisu4Ynz.net
>>417
ありがとうございます。うまく抽出できました。

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

431:デフォルトの名無しさん
18/02/14 13:35:37.03 2LP2x+pK.net
C#なんですが
[ああ]おおおおお
[いいい]こここここ
[うう][ええ]そそそそそ
ととととと[たた]

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

432:デフォルトの名無しさん
18/02/14 17:41:06.84 ZzaOqvDP0
^\[.*\]

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

434:デフォルトの名無しさん
18/02/16 14:10:38.80 ga78Zu+3.net
マルチラインモード
^(?:\[([^\[\]])\1*\])+
マッチ部分を除去

435:420
18/02/16 14:11:39.72 CWd36B/o.net
1行目でバッチリ
感動しました!!!

436:デフォルトの名無しさん
18/02/16 14:15:41.25 CPKH/1dQ.net
それ文末以外消えるけどええのん

437:421
18/02/16 15:30:22.93 mPXTHkFg.net
>>426
文中は消えていいんじゃない?
>>421
> [うう][ええ]そそそそそ
> そそそそそ
ってあるし
あ、
> ※先頭じゃない文中の[はは]は残したい
この[はは]はマッチしたらダメなのか
これ例の中においてくんないかなー
というか定義がよくわからんちん
^\[.*\](?!$)
ところによっては(?<=(?:^|\n))\[.*\](?!(?:\n|$))
マッチ
[ああ]おおおおお
[いいい]こここここ
[うう][ええ]そそそそそ
[たた]ななはは[まま]やや
→[たた]ななはは[まま]
[たた]ななははまま[やや]
→[たた]
アンマッチ
ととととと[たた]
ちち[はは]ぱぱまま

438:421
18/02/16 15:30:54.45 mPXTHkFg.net
>>427
[たた]ななはは[まま]やや
の[まま]を含めずマッチしたい([たた])ならかなり複雑になりそうでちょっといますぐは思いつかないや
それってつまり
 行頭[
 行頭から括弧が繋がり、且つ、行末]を含めない範囲
なら


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



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

441:デフォルトの名無しさん
18/02/16 15:57:06.09 CWd36B/o.net
orz...
試したら確かに
>>424 だと先頭が残りますネ

442:デフォルトの名無しさん
18/02/16 16:00:32.77 CWd36B/o.net
すみません
[ああ]おおおおお    → おおおおお
[あああ]おおおおお   → おおおおお
[ああ][いい]おおおおお → おおおおお
あああああ[いい]     → あああああ[いい]
あああ[いい]うう      → あああ[いい]うう
です。
先頭付近の [] は消したいけど、それ以外は残したい、って風です。

443:421
18/02/16 16:24:42.64 rLsYeXBU.net
>>431
[たた]ななはは[まま]やや
は?
[たた][なな][はは][まま][やや]
はどーなんの?
[あいう[かきく]たちつ]
[あいう[かきく]]たちつ
とか括弧内包の場合どーなんのとかも
あと行末も係わるんだから、例の同じ行に余計な文字列入れないで(たぶんこの件では大過ないと思うけど)

444:421
18/02/16 16:25:23.31 rLsYeXBU.net
>>432
内包無視するとしたら
(?<=^)(?:\[[^\[]*?\])+(?!$)
ところによって(?<=(?:^|\n))(?:\[[^\[]*?\])+(?!(?:\n|$))
かね
>>431を満たし、
[たた]ななはは[まま]やや
→[たた]
[たた][なな][はは][まま][やや]
→[たた][なな][はは][まま]
となるし
たぶん
 行頭[ および 行頭[に対応する]までマッチ
 行頭[ および 行頭[に対応する]から括弧が繋がり、且つ、行末] および 行末]に対応する[までを含めない範囲
あたりなんだろうなー
ぱっと思いつくのはちょめちょめしたダウンロードファイルのリネームをしたいようなかんじかね

445:デフォルトの名無しさん
18/02/16 16:26:09.97 dBpGhFbZ.net
仕様に不備があると作る方は大変だな

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

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

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

449:デフォルトの名無しさん
18/02/16 17:23:34.33 GgVv8IsN.net
>>437
全然ダメ
入力が
[abc]def[ghi]
なら全文がマッチする(量化指定子*はgreedyだから末尾手前まで全部食う)

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

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

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

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


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



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

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

457:デフォルトの名無しさん
18/02/17 11:13:15.50 sN1lrGX4.net
>>443
none-greedyじゃ先頭しかマッチしない
[abc][def]ghi
の[abc]しか除去出来ない
反復適用すればいいというならその通りではあるが

458:デフォルトの名無しさん
18/02/17 11:27:08.57 IU1gsQgu.net
[ab][cd][ef]ああ
これは、繰り返しが入っている。
N回削除する必要がある
[ab][cd][ef]ああ
[cd][ef]ああ
[ef]ああ
ああ
[~] でグループ化すべき

459:デフォルトの名無しさん
18/02/17 12:22:01.47 IU1gsQgu.net
/^\[[^\]]*\]/ =~ "[ab][cd]ああ"
$& #=> [ab]
Ruby で書いた。
行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある

460:デフォルトの名無しさん
18/02/17 12:32:03.69 IU1gsQgu.net
/^\[[^\]]*\]/ =~ "[ab][cd]ああ"
$& #=> [ab]
$' #=> [cd]ああ
/^\[[^\]]*\]/ =~ $'
$& #=> [cd]
$' #=> ああ
/^\[[^\]]*\]/ =~ $'
#=> nil
Ruby で書いた。
行頭が\[ で、\[ 以外の文字が、0以上続いて、\] がある
$& はマッチした部分で、$' はマッチした部分の後ろを表すから、
マッチを繰り返していけば、出来るけど

461:デフォルトの名無しさん
18/02/17 12:42:57.33 IU1gsQgu.net
/^(\[[^\]]*\])+/ =~ "[ab][cd]ああ[ef]"
$& #=> [ab][cd]
やったー。Ruby で出来た
\[ があり、\[ 以外の文字が、0以上続いて、\] がある。
これをグループ化して、1回以上繰り返す
ただし、グループ外に、先頭からを指定する

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

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

464:デフォルトの名無しさん
18/02/23 22:29:48.73 vtIXFjR6.net
(?s:^(?=.*ス)(?=.*プ))
CHmateで使う正規表現らしいんだけど最初の
(?s:"
の意味が検索してもわからないのですが教えていただけないでしょうか

465:デフォルトの名無しさん
18/02/23 22:45:42.10 0zsudQHR.net
>>452
シングルラインモード
>>349

466:デフォルトの名無しさん
18/02/24 00:35:55.07 bvxyjlLF.net
>>453
ありがとございます
確認してなんとなく分かりました
ところでこの正規表現の場合(?s:)って名前には改行はないので不要じゃないかと思ってしまうのですがどういう目的で使われているのでしょうか

467:デフォルトの名無しさん
18/02/24 01:37:05.64 d6NztqhC.net
書いたヤツの趣味じゃ?
しかもかなりてきとう
ワッチョイ名前ならおそらくドコモ判別?でもプだけではないスレリンク(mango板:312番)
先読みなんてコストかけなくてもKOROKORO AAはSd固定
改行を無理矢理入れ込んでというシチュエーションでスとプでねらい打ちも違和感
本文で^(?=.*A)の類を使うとレス数後半のコストはかなりのもの
これは名前だから大したことにはならないけど
深謀遠慮があるのかも知れんがそれこそ書いた本人へ

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

469:デフォルトの名無しさん
18/02/27 16:08:59.77 u9k8VAiO.net
>>456
理由はここ読んで
URLリンク(www.regular-expressions.info)
短い説明は↓ここでも出てくる
URLリンク(regex101.com)

470:デフォルトの名無しさん
18/02/27 17:03:18.46 VEiALCIH.net
どれどれ…
javascript
'こんにちは。'.replace(/(.)+/, '$1');
=> "。"
ほんまや!知らんかった

471:デフォルトの名無しさん
18/02/27 19:34:07.35 LuvO3mbW.net
>>457
配列に入れてくれればいいのに
って思ったことあるわ

472:デフォルトの名無しさん
18/02/27 21:09:42.50 PLAOSS1/.net
Ruby でも、
'こんにちは。'.gsub(/(.)+/, $1)
#=> "。"

473:デフォルトの名無しさん
18/02/27 22:02:02.32 u9k8VAiO.net
>>459
.NETはCaptureCollectionってのに入れてくれるみたいよ
ただフルマッチとキャプチャリンググループと両方1度に必要なければ
/(.){1}/みたいに正規表現変えれば配列に入れられるよね

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

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

476:デフォルトの名無しさん
18/03/01 00:07:23.55 UkKloD3U.net
>>462
キャプチャグループに量指定子がついてるとそのキャプチャグループの箇所に複数回マッチする可能性があるよね。
んで複数回マッチした場合は最後にマッチしたやつがそのキャプチャグループに入ってるってこと
"こんにちは。”に対して、/(.)+/でマッチをかけると
最初にピリオドが“こ”にマッチしてそれをグループ1に入れて
次に+を見てまたマッチするか繰り返す
今度はピリオドに”ん”がマッチするからそれをグループ1に入れて、、、
あとは繰り返し
“こんにちは。”が/(.)+/にフルマッチした時点でグループ1に入ってるのは”。”

477:デフォルトの名無しさん
18/03/01 00:17:03.42 ikcjc59H.net
/(.+)/ =~ 'こんにちは。'
$1 は、'こんにちは。'
/(.)+/ =~ 'こんにちは。'
$1 は、'。'
上は、1回しかマッチしていない、最長マッチ。
下は、1文字のマッチで、6回マッチして、最後のマッチが、'。'

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

479:デフォルトの名無しさん
18/03/01 02:58:48.22 ksBcbegD.net
>>464
なるほど。

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

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

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

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


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




次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch