- 1 名前:デフォルトの名無しさん [2007/08/02(木) 13:53:20 ]
- 正規表現(Regular Expression)スレです。
質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
- 183 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:13:05 ]
- こういう珍獣ってリアルにはいないんだよなぁ。
- 184 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:21:48 ]
- >>178=180=182
五日経っても回答得られなかった現実をきちんと見据えて、 いい加減諦めて「もっと具体的に」書いた方が良いのでは?
- 185 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:57:50 ]
- ん・・・全く意味が分からんからね。
- 186 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 23:54:49 ]
- こういう質問には「できません」と答えるのが大人のマナー。
- 187 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 00:25:03 ]
- >>184
もっと具体的に
- 188 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 02:24:11 ]
- もっと愚怠的に
- 189 名前:デフォルトの名無しさん [2007/10/04(木) 08:37:31 ]
- hage
- 190 名前:デフォルトの名無しさん [2007/10/05(金) 00:59:38 ]
- 528 名前:名無し募集中。。。[] 投稿日:2007/10/05(金) 00:23:13.84 0
PHPの正規表現に詳しいやつがいたら教えてほしい preg_replaceで置換をしたいんだが たとえば /sample/test/14567.jpg というのを /sample/test/backup/14567.jpg というように最後の/を/backup/に置き換えるにはどうしたらいい? いろいろ試してみたが俺のレベルじゃどうにもならんかった
- 191 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:29:35 ]
- preg_replace('/¥/([^¥/]+)$/', "/backup/$1", "/sample/test/14567.jpg");
- 192 名前:デフォルトの名無しさん [2007/10/05(金) 16:25:45 ]
- 知ったかぶり
- 193 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 22:30:53 ]
- >>190
pathinfo使えば?
- 194 名前:デフォルトの名無しさん [2007/10/06(土) 10:35:59 ]
- 余計なお世話
- 195 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:47:06 ]
- 珍獣増えすぎwwwwwwwwwテラカオスwwwwwwww
- 196 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 23:56:30 ]
- [あはばば, ばばばば], あばばばば, あば, [あばばば, ば, ばばばばはば, ばば]
というような文字列があったとき、 [あはばば, ばばばば] あばばばば あば [あばばば, ば, ばばばばはば, ばば] と分割したいのですが、どのようにしたらいいでしょうか? (\\[?.*\\]?),とかやってみたのですが全然だめでした orz なかのあばば〜は変化します。
- 197 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 23:57:28 ]
- >>196
まずは >>1 を見てみて。
- 198 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:00:39 ]
- >>197
すいません、.NETのSystem.Text.RegularExpressionsのRegex.Split()で置換しています。
- 199 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:10:25 ]
- >>198
すいません、置換じゃなくて分割でした orz
- 200 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 01:56:00 ]
- >>196
まず、[あば,ばばば] を うんこっこー に痴漢する (うんこっこー に痴漢した文字列は堆肥しておく) うんこっこー, あばばばば, あば, うんこっこー となるので、これを分割する。そのあと、 うんこっこー を堆肥しておいた文字列に戻す。
- 201 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 04:37:56 ]
- 逆に、 "," をうんこっこーに置換しても良いかもね。
Perl ですまんけどこんな感じで。 $str =~ s/(\[[^]]+\]|[^,]+)(?:(,\s*)|$)/\1うんこっこー/g; $ary = split(/うんこっこー/, $str);
- 202 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 12:19:13 ]
- Perl 5.8.8を使っています。
文字列の先頭からある文字列(たとえばXYZ)の直前までを削除する、 ただしその文字列XYZがこない場合はすべてを削除する正規表現は どう記述したらよいでしょうか。 たとえば (1) abcXYdefXYZ123 なら abcXYdef のみを削除する (2) abcXYdef なら abcXYdef すべてを削除する ということです。 s/^.*(XYZ)?/$1/; とすると(1),(2)ともすべてが削除されてしまい、 s/^.*?(XYZ)?/$1/; とすると(1),(2)とも1文字も削除されません。 s/^.*?XYZ// || s/^.*//; とすれば(1),(2)ともうまくいきますが、 できれば1個の正規表現で実現させたいです。
- 203 名前:デフォルトの名無しさん [2007/10/07(日) 13:02:54 ]
- s/^abcXYdef//;
- 204 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 13:19:38 ]
- ちゃんと動くんなら、自分の能力で到達可能な範囲のプログラムで十分だと思うよw
s/^((?!XYZ).)*//
- 205 名前:デフォルトの名無しさん [2007/10/07(日) 13:27:33 ]
- s/(^.*?XYZ|^.*)//;
- 206 名前:デフォルトの名無しさん [2007/10/07(日) 13:30:59 ]
- s/^.*?XYZ|^.*//;
- 207 名前:デフォルトの名無しさん [2007/10/07(日) 13:32:25 ]
- > s/^.*?XYZ// || s/^.*//;
> とすれば(1),(2)ともうまくいきますが、 ウソつけ!
- 208 名前:202 mailto:sage [2007/10/07(日) 15:49:43 ]
- 短時間にたくさんのレスが!ありがとうございます。
>>204 (?!pattern) が使えるんじゃないかと思って 質問前にPerlのマニュアルを読んだんですがうまくいきませんでした。 なるほど、こうすればうまくいくんですね。 >>207 s/^.*?XYZ/XYZ/ || s/^.*//; の間違いでした。失礼しました。 >>205-206 ということで、元の質問が間違ってたので間違いです。 試行錯誤の末、 s/^(.*(?=XYZ)|.*)//; という別解を見つけました。
- 209 名前:デフォルトの名無しさん [2007/10/07(日) 20:10:50 ]
- PHP5のpreg_matchで、
涼子、愛、美姫以外の文字列が来た場合を検知したいんですが。 涼子、愛、美姫のどれかを検知する場合、 pattern = '/涼子|愛|美姫/'; ですが、涼子、愛、美姫以外を検知するにはどう書いたらいいですか?
- 210 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 20:13:06 ]
- そのパターンにマッチしないことを確認すればよい。
- 211 名前:209 [2007/10/07(日) 20:21:07 ]
- >>210
すみません。 涼子、愛、美姫以外を含む文字列です。 たとえば、涼子愛子美紀が来たばあい、 「子」が紛れ込んでることを検知したいのですが。
- 212 名前:209 [2007/10/07(日) 20:36:57 ]
- >>211
'/^涼子|^愛|^美姫/';
- 213 名前:209 [2007/10/07(日) 20:38:53 ]
- >>212
すみません。途中でした。 '/^涼子|^愛|^美姫/'; だと涼子、愛、美紀も全部ひっかかってしまいます。 それだけを含んで、それ以外の文字列を全然含まないようにしたいのですが。
- 214 名前:デフォルトの名無しさん [2007/10/07(日) 20:55:01 ]
- 同じくphp5のpreg_matchですが、
半角または全角の数字から始まるはどう書きますか?
- 215 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 21:39:55 ]
- >>213
/^(?:涼子|愛|美姫)*$/ とか?
- 216 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 21:40:46 ]
- >>214
/^(?:\d|1|2|3|4|5|6|7|8|9|0)/ とか?
- 217 名前:デフォルトの名無しさん [2007/10/08(月) 00:15:19 ]
- $string = '涼子愛子美紀';
$result = preg_replace( '/涼子|愛|美姫/', '', $string); echo 'おまんこ';
- 218 名前:デフォルトの名無しさん [2007/10/08(月) 13:51:27 ]
- >>215-216
ありがとうございました。 >>217 氏ね!
- 219 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:38:51 ]
- NFAを機械的にDFAに変換する方法を教えてください。
- 220 名前:デフォルトの名無しさん [2007/10/08(月) 20:14:07 ]
- そんなもん無い!
って答えでFA?
- 221 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/10/19(金) 03:35:03 ]
- Aho-Corasick改とかでいいと思うが。
- 222 名前:デフォルトの名無しさん [2007/10/25(木) 17:50:49 ]
- phpなんですが、*.example.*/にマッチさせたいと思ってます。
2つめの*の部分で、comやjp等にマッチさせたいのですが、 http:\/\/(.+\.)?example\..+/では、 www.example.hoge.com/なんかもマッチしてしまいます。 http:\/\/(+\.)?example\.(com|jp)/とかにすると、 新しいドメインがでてきたときに対応できません。 何かよい方法ありませんでしょうか?
- 223 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:33:14 ]
- >>222
「新しいドメイン」ってのはどんなところまでを想定してる?
- 224 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:49:54 ]
- 簡易なのでよければ \..+ じゃなくて \.[^/.]+ にするとか
- 225 名前:デフォルトの名無しさん [2007/10/25(木) 19:51:52 ]
- http:\/\/(+\.)?example\.[^.]+\/
- 226 名前:デフォルトの名無しさん [2007/10/27(土) 16:43:32 ]
- /\/\/\/\/\//\/\/\/\/\/\/\FUCKINTOSH?_*+*}+}`+`%$W`}!LT`LA<VR`AKVAREGERGA"#%IW$%U&'I<{)'(<O'T(*O>
最近、こうして何の作意もなく打ったものが正則表現に見えてどうしようもない
- 227 名前:デフォルトの名無しさん [2007/11/08(木) 00:14:41 ]
- 最初と最後は"/"であり、
その間に"/../"や"/./"が発生しない文字列を 正規表現では記述できますか? [×] /etc/../usr/./local/ /../ /./ [○] /etc/sysconfig/ /abc/.aaaa/
- 228 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 05:41:48 ]
- >>227
正規表現で一気に行うんじゃなくて、 "/" で分割して、各パーツがドットだけで構成されていたらハネる、とか (ディレクトリトラバーサル対策ならよく調べたほうがいいかも)
- 229 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 08:45:57 ]
- ありがとうございます。
xmlのxsd:patternで書きたかったのですが、だめそうです。考え直してみます。
- 230 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:40:57 ]
- >>227
これでどうかな。 ^/(([^/.][^/]*|\.[^/.][^/]*|\.\.[^/]+)/)*$ 汚染チェックに使うなら>>228の言うようにした方がいいな。
- 231 名前:デフォルトの名無しさん [2007/11/11(日) 17:33:05 ]
- webでの絵文字表示に苦戦しているのですが、
BAD+[SJISコード]を正規表現で表すにはどう書いたらいいですか?
- 232 名前:デフォルトの名無しさん [2007/11/11(日) 17:34:32 ]
- 書き忘れていました。言語はPHPで、バージョンは4.4.1です。
- 233 名前:デフォルトの名無しさん [2007/11/11(日) 23:06:58 ]
- ぐ・ぐ・れ
- 234 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:47:19 ]
- うん、ググれば全て解決するからこのスレ潰すべきだね。
- 235 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:52:31 ]
- aho
- 236 名前:デフォルトの名無しさん [2007/11/12(月) 00:15:22 ]
- ワロタwwwwwww
- 237 名前:デフォルトの名無しさん [2007/11/12(月) 01:18:32 ]
- いや、ググって該当するページを見たんですけど、正規表現の構成の仕方がわからなくて、
ここに書き込みました。 調べるだけ調べたんですけど、やはりだめでしょうか
- 238 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:42:05 ]
- だめです
- 239 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 04:32:21 ]
- なんだこいつら 本当はできないんじゃねーの?
- 240 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 09:32:04 ]
- >>239
お、やっと気づいたようだね。それじゃあバイバーイ!
- 241 名前:デフォルトの名無しさん [2007/11/12(月) 19:50:58 ]
- 質問です。正規表現でconsumeするというのは日本語でいうとどういうことですか?
- 242 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 19:59:53 ]
- 文字を消費するということ。
- 243 名前:241 [2007/11/12(月) 21:10:47 ]
- >>242
ありがとうございます。「文字を消費する」とはどういうことでしょうか? イメージが湧きません。
- 244 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:24:56 ]
- 正規表現 /..c/ を "abc" にマッチさせたときを考えると、
最初の /./ は "a" にマッチして消費する。 すると、なんと言うかテキストエディタのカーソルが一つ進むのをイメージしてくれたらよいか、 二個目の /./ が "b" にマッチできるようになる。
- 245 名前:デフォルトの名無しさん [2007/11/12(月) 22:30:07 ]
- テキストエディタの ed ってのが元になってるからね。
カーソルって例えはナイス!
- 246 名前:241 [2007/11/12(月) 23:16:33 ]
- >>244
なるほど、よくわかりました。ありがとうございます。
- 247 名前:デフォルトの名無しさん [2007/11/15(木) 07:57:08 ]
- おはようございます。このスレの過去ログってネットにありますか?
- 248 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 16:55:18 ]
- あります。
- 249 名前:デフォルトの名無しさん [2007/11/15(木) 20:14:33 ]
- アキュムレータの0ビット目って左端?それとも右端?
- 250 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:58:31 ]
- >>249
スレ違い。
- 251 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:29:30 ]
- >>249
左
- 252 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:06:19 ]
- perl互換のFlexible Renamerで置換したいのですが。
(hoge)hoge(hoge).txtを(hoge) hoge(hoge).txtとしたい場合はどう書けばいいのでしょうか。 )の直後にスペースを入れ、拡張子前の)の直後には入れたくないんです。
- 253 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:30:29 ]
- ")" -> ") "
" ." -> "."
- 254 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:34:08 ]
- >>253
なるほど。2回やるという手が・・・。ありがとうございました。
- 255 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 09:27:48 ]
- リネーマの仕様によるけど、Perl互換なら
"^(\([^)]*\))" -> "$1 " "^(\([^)]*\))(.*)" -> "$1 $2" とか。いずれにしても調整が必要
- 256 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:15:56 ]
- vb.netで
「// xxxxx EXEC 〜」で始まり、 「// xxxxx EXEC 〜」で始まる1行前までを 1グループで取得したいと考えています (?ims:(^\/\/+\s+EXEC+.+)) だとまるまる取得してしまうのはわかるのですが、 これを上記の様に取得するにはどう書けばよいのでしょうか? ご教授よろしくお願いいたします。
- 257 名前:デフォルトの名無しさん [2007/11/18(日) 20:18:03 ]
- split
- 258 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 02:39:09 ]
- >>256
なんでスラッシュをエスケープしてんだよw .NET の正規表現なら可変長の戻り読みが使えたと思うから、 その始まりのしるしと終端のしるしを戻り読みの部分と先読みの部分に置けば? .NETで可変長の戻り読みができなかったらすまんw
- 259 名前:デフォルトの名無しさん [2007/11/22(木) 22:35:09 ]
- 数値比較をしたいのですが、0x021a4 っていくつなのでしょうか?
- 260 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:13:20 ]
- 2 * 16^3 + 1 * 16^2 + 10 * 16^1 + 4 * 16^0
- 261 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:17:32 ]
- >>259
電卓開く ↓ 関数電卓モードにする ↓ 16進モードにする ↓ 21a4と打つ ↓ 10進モードにする 正規表現の話じゃねーし
- 262 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:54:14 ]
- ttp://www.google.co.jp/search?hl=ja&q=2*16%5E3%2B1*16%5E2%2B10*16%5E1%2B4*16%5E0&lr=
- 263 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:58:02 ]
- www.google.co.jp/search?q=0%2B0x021a4
これでおk
- 264 名前:デフォルトの名無しさん [2007/11/23(金) 02:44:38 ]
- 16進数知らないプログラマがいるのか・・・時代は変わったな。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 02:46:28 ]
- プログラマじゃないから
- 266 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 08:04:03 ]
- 具体的には秀丸エディタで置換を行いたいのですが、こうするには…
-------------- [12:34:56] 発言者1: 文章2 文章3 [12:34:56] 発言者2: 文章4 ↓ [12:34:56] 発言者1: 文章2 文章3 [12:34:56] 発言者2: 文章4 -------------- どうしたら良いのでしょうか?(文章の中に [ ] が含まれる可能性は無いものとして単純に) \n[ と記述すると、正規表現の括弧の対応が合ってないとか怒られてしまいます。 非常に初心者な質問ですいません。
- 267 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:26:00 ]
- エスケープ
- 268 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 11:43:08 ]
- regexre
FrameworkFrame などといったような「同じ文字列とそれに挟まれた別な文字列」を取り出したいのですが、 どういう文を書いたら実現できますか? PHPのpreg_replaceで使用します。 よろしくお願いします。
- 269 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 12:00:17 ]
- re(.*)re でいけると思うけど。
以下はJScriptだけどこれくらいなら読み取れるよね? var keyword = "re"; var pattern = keyword + "(.*)" + keyword; var objReg = new RegExp(pattern); "regexre".match(pattern); WScript.StdOut.WriteLine(RegExp.$1); "rere".match(pattern); WScript.StdOut.WriteLine(RegExp.$1); "regexregex".match(pattern); WScript.StdOut.WriteLine(RegExp.$1);
- 270 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 12:50:33 ]
- Ruby なら (.+)(.+)\1 で $2 を取ればいけるけど、
PHP でいけるかどうかは知らん
- 271 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 12:53:54 ]
- >>269
日本語読解力に大きく欠けますな
- 272 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 13:00:21 ]
- eregexreならrが取れるはずだからつかいものになるのか?
- 273 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 13:05:34 ]
- eregexre なら regexr が取れる。
最長一致だから。 これが目的の物かはともかくとして。
- 274 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 13:51:50 ]
- >>269
すみません、説明不足でした。 同じ文字列というのも未知なのです。 >>270. ありがとうございます。 Rubyならいける、というのは期待が持てました。 早速調べてみます。 >>272-273 ここも説明不足でした。 「同じ文字列とそれに挟まれた別な文字列」の全てを取得したいです。 つまりThisIsThePenという文字列からThisIsTh(とePe)を取得できるようにしたいのです。
- 275 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 13:56:24 ]
- sIs は要らないの?
- 276 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:00:51 ]
- sIs が必要ないならとりあえず Ruby ではこうなる。
PHP でいk(ry 'ThisIsThePen'.scan(/((.+).+\2)/) { puts($1) }
- 277 名前:デフォルトの名無しさん [2007/11/23(金) 19:31:22 ]
- 文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出すことができますが、 文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。
- 278 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 19:42:51 ]
- 日本語でおk
- 279 名前:デフォルトの名無しさん [2007/11/23(金) 19:46:56 ]
- \{([^\}]+)\}
- 280 名前:デフォルトの名無しさん [2007/11/24(土) 08:40:39 ]
- ありがとう。
すごいね 正規表現分かる人尊敬するわ
- 281 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:46:49 ]
- 別に大した事じゃない。
すげーとか思って思考停止してるから理解できないだけ。
- 282 名前:デフォルトの名無しさん [2007/11/24(土) 09:48:41 ]
- 分かりました。
私も頑張って勉強します
- 283 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:09:17 ]
- よし! その意気だ!
|

|