正規表現 Part7

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

【 前スレ 】 正規表現 Part6
http://pc12.2ch.net/test/read.cgi/tech/1241537764/
2デフォルトの名無しさん:2010/03/19(金) 15:18:08
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
【 初心者 】 正規表現 【 入門 】
http://funcchan.blog16.fc2.com/
3デフォルトの名無しさん:2010/03/19(金) 15:19:04
4デフォルトの名無しさん:2010/03/19(金) 15:25:47
スルーされにくい質問のテンプレと例

●正規表現の使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
5デフォルトの名無しさん:2010/03/19(金) 21:49:45
>>1
6デフォルトの名無しさん:2010/03/20(土) 01:07:35
>>1
7デフォルトの名無しさん:2010/03/20(土) 11:52:09
>>1
8デフォルトの名無しさん:2010/03/20(土) 13:34:45
>>1
カツカレー
9デフォルトの名無しさん:2010/03/21(日) 22:59:00
googleのRE2ってどうなの?
10デフォルトの名無しさん:2010/03/22(月) 09:31:52
速いと思うけど、大きい正規表現に長い文字列を食わせるときじゃないとあまり違い分からないかも
11デフォルトの名無しさん:2010/03/22(月) 10:36:03
/   //   /   //    ______     /   //   /
 / //   /|   r'7\ ,.ヘ‐'"´iヾ、/\ニ''ー- 、.,   /    /
  /   / |  |::|ァ'⌒',ヽ:::ヽrヘ_,,.!-‐-'、二7-ァ'´|、__
`'ー-‐''"   ヽ、_'´  `| |:::::|'"       二.,_> ,.へ_
         /  //__// / / /      `ヽ7::/
 か っ も  |  / // メ,/_,,. /./ /|   i   Y   //
 ァ  て う.  |'´/ ∠. -‐'ァ'"´'`iヽ.// メ、,_ハ  ,  |〉
  |  約 ク  ヽ! O .|/。〈ハ、 rリ '´   ,ァ=;、`| ,ハ |、  /
  |  束 ソ   >  o  ゜,,´ ̄   .  ト i 〉.レ'i iヽ|ヽ、.,____
  |  し  ス  /   ハ | u   ,.--- 、  `' ゜o O/、.,___,,..-‐'"´
  |  た  レ  |  /  ハ,   /    〉 "从  ヽ!  /
  |  じ  は  |,.イ,.!-‐'-'、,ヘ. !、_   _,/ ,.イヘ. `  ヽ.
 ッ .ゃ .立   |/     ヽ!7>rァ''7´| / ',  〉`ヽ〉
 ! ! な  て   .',      `Y_,/、レ'ヘ/レ'  レ'
   い  .な    ヽ、_     !:::::ハiヽ.   //   /
   で   い   ./‐r'、.,_,.イ\/_」ヽ ',       /  /
   す      /    `/:::::::/ /,」:::iン、 /    /
          〈  ,,..-‐''"´ ̄ ̄77ー--、_\.,__  /
      ,.:'⌒ヽ ´         | |  , i |ノ   `ヾr-、
12デフォルトの名無しさん:2010/03/22(月) 23:24:39
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━-┓
┃ ┌────────────────────────ーーー┐ ┃
┃ │            / ̄ ̄\                      │ ┃
┃ │          /  ヽ_  .\                    │ ┃
┃ │          ( ●)( ●)  |     ____            │ ┃
┃ │          (__人__)      |     /      \          .| ┃
┃ │          l` ⌒´    |  / ─    ─   \       │ ┃
┃ │         . {         |/  (●)  ( ●)  \      .| ┃
┃ │           {       / |      (__人__)      |     │ ┃
┃ │      ,-、   ヽ     ノ、\    ` ⌒´     ,/__      .| ┃
┃ │     / ノ/ ̄/ ` ー ─ '/><  ` ー─ ' ┌、 ヽ  ヽ、   │ ┃
┃ │    /  L_         ̄  /           _l__( { r-、 .ト、 . │ ┃
┃ │       _,,二)     /            〔― ‐} Ll  | l) ).│ ┃
┃ │       >_,フ      /               }二 コ\  Li‐' .| ┃
┃ │    __,,,i‐ノ     l              └―イ   ヽ |   . | ┃
┃ │                l                   i   ヽl   . | ┃
┃ └ーーー────────────────────────┘ ┃
┗-━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
            平成22年3月22日 クソスレにて
13デフォルトの名無しさん:2010/03/23(火) 00:04:21
>>12

        / /      '" /    / ,,-、 /、ヽ\  ゙i;,-''"   / ./  /─''''" ̄ ,,/
        /  ./ /   ,,,-‐'"-/   / ./ ゙" "\  ゙i;,  | 、// /   "    ,,,/
       / ,-''/ /    ,,-''"_ /   //       ヽ  l /  レ'/~       /‐/
      / /  | l|  ,,-'"/゙/,」|    /    ..::;;;,,,  }  /   |~ ,,-‐,,,-'''  //~
     / /-'''''| | /l /‐'''/'' .人   i'    .:: :;'" / / l  ノ゙i// ,,-‐'"──==
     //'"   ゙i;: | /‐' ./,, ,,ノ ゙i;,.  |     _,,-ヾ.// ノ ,-''" l |  ‐'"   ,,,-‐二
     レ'     ヽl:i' ./  )'、‐,\゙i;: | ,,,-‐二-┬ナ" /‐'"‐ 〉 ,i'───'''" ̄~-''"
         ,-‐',ヽ|'"  ./゙ヽ-ゝ='\゙i,'''ヽ -゙=‐'   '" ,‐'ノ,, /‐''" ,,-‐'''"~
        / / ;;:.  ──ヽ, ゙i;'''''' , ゙ "-‐'''''"""    〔_,/ ゙ヽ'-'"~
       / /   / ,; ,,_}_  ゙、 ./__,,  _,,       /      \    
      ,;'  / ,;;;:;:/;: ,,   ~ ヽ ヽ.  ヽニ‐'、     / /       ゙i,_ おめぇ、ここ大丈夫か?
    ./        ''  ,l,,,,,,/ 〉  ゙ヽ、 ''''    ,,-''" /        ゙i.\
    /          / ヽ /     ゙ヽ、--イ~;;:'" //   ::;:;:;:   | \
   i          /  ̄ ゙̄"          |;:" //            ヽ-‐'''"~l|
  ./    ゙''''ヽ、,,-‐''"              .i /,;'"   _,,,,,,,,,_,,,-‐'''-''"~     |
 (" ̄"'''''‐--、,,_i'                 // '",,-─'''"  ,,,-‐'",-‐'"  ,,,,-‐ .___|
 i' ゙'':::::::::::::::::::::::}


14デフォルトの名無しさん:2010/03/24(水) 10:40:44
WzやMIFESの置換で、行頭から何文字かを削除する正規表現を教えてください。
15デフォルトの名無しさん:2010/03/24(水) 12:06:37
>>14
WzやMIFESが正規表現を使えるかどうか知らんが、削除したい文字数が判っているなら"^..."などでできるだろ。
1614:2010/03/24(水) 19:29:29
できました。...が字数なんですね。ありがとうございます。
無知な私にはネットで調べても不明でした。
17デフォルトの名無しさん:2010/03/24(水) 22:58:06
全然わかってないんだなw
わからんなら正規表現なんて使わなきゃいいのに
18デフォルトの名無しさん:2010/03/25(木) 00:14:41
俺も最初はこんなもんだったが?
19デフォルトの名無しさん:2010/03/25(木) 00:22:06
>>17
ご自分は"えきすぱあと"なおつもりでいらっしゃるようにお見受けしますが、
全員えきすぱあと な訳がないし、
別にいいじゃねぇか、そういうスレなんだし。

20デフォルトの名無しさん:2010/03/25(木) 00:23:41
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
21デフォルトの名無しさん:2010/03/25(木) 00:31:06
>>17は生後すぐに言葉を発し「我は神なり」と言って自分で産湯に浸かったそうだ。
産湯でサッパリした彼はおもむろにビールを飲み干しPCに向かい正規表現を操っていた。

そんな夢のような夢を見たのだろうw
22デフォルトの名無しさん:2010/03/25(木) 00:38:08
でも小学生のころの俺でもなんとなく使いこなしてたんだから、ぐぐって理解できないってのはなんかおかしいだろう
23デフォルトの名無しさん:2010/03/25(木) 00:59:21
>>22
>でも小学生のころの俺でもなんとなく使いこなしてたんだから
性器表現の話はスレ違い
24デフォルトの名無しさん:2010/03/25(木) 01:13:03
それ面白い?
25デフォルトの名無しさん:2010/03/25(木) 01:17:14
うん
26デフォルトの名無しさん:2010/03/25(木) 01:21:00
>>24
お前のツッコミがつまらなさすぎる件
NSCで修行してこい
27デフォルトの名無しさん:2010/03/25(木) 01:29:46
それ面白い?
28デフォルトの名無しさん:2010/03/25(木) 01:33:28
うん
29デフォルトの名無しさん:2010/03/25(木) 01:42:45
不満しか口から出ない子は視野が極端に狭いんだよ。
こういう>>17のような子は

友達が出来ない > 社会生活が送れない > ゲームに耽る > 更に孤立する > 常に不満を抱える

家族すら見放しているので誰も注意しない、本人にも自覚が無いから抜け出せない。
唯一の捌け口が2chで暴言を吐くこと。
3017:2010/03/25(木) 02:04:40
ファビョっちゃったかwww
本当に調べて、調べた上で全く判らなかったっていうなら、
正規表現に手を出すには時期尚早じゃね?って親切心だったんだけどな。
31デフォルトの名無しさん:2010/03/25(木) 02:07:33
絶望的ですね
32デフォルトの名無しさん:2010/03/25(木) 02:41:07
>>30
恐ろしい程の馬鹿だなお前w
33デフォルトの名無しさん:2010/03/25(木) 16:52:35
              い   フ
          鮮  い   ァ
         人  じ   ビ
      に . だ.  ゃ   っ
      だ . も  な   て
      を . の  い . も
      圖     か

          .∧_∧
         ∩#`Д´>'')
         ヽ    ノ
34デフォルトの名無しさん:2010/03/25(木) 16:57:42
正規表現を高速に調べたいデス。こつをおしえてください
35デフォルトの名無しさん:2010/03/25(木) 17:10:59
36デフォルトの名無しさん:2010/03/25(木) 17:30:02

     _ _, ,_
  (  ´)`Д) )) < ハァハァ こんな所でダメェ
  /  つ つ  < 大丈夫だって,こんな糞スレ誰も来ねえよ
(( (_(_  ノ ノ
  し∪ ∪
     _, ,_  _, ,_
 Σ( ゚д゚ )゚д゚)
  /  つ つ
  (_(_  ノ ノ
  し∪ ∪
    _, ,_  _, ,_
  ( ゚д゚ )゚д゚)
  /  つ つ
(( (_(_  ノ ノ
  し∪ ∪
37デフォルトの名無しさん:2010/03/26(金) 12:08:13
つかここム板なんだし基本的な調査能力は大前提でないかえ?

テンプレの初心者用正規表現サイトで演算子一覧見てたら質問するまでもない
自分で理解する気ゼロでそのままズバリの解答だけ欲しいってのが丸見え
「行頭から何文字かを削除する正規表現」で検索してもそりゃ出てこないだろうよ
38デフォルトの名無しさん:2010/03/26(金) 12:10:59
まだやってるのか>17
39デフォルトの名無しさん:2010/03/26(金) 16:24:11
>>37
    /: : /:: : : / : : : !:: : : : !: : !: : : ヽ:: : : : : ',
   /: : /: : : 斗--、 :|: : : : :|: : | ,ィT: ',: : :ヽ : !
   |: : |: : : : : |: /  \: : /|:.ィ: :ヽ: : :.|.: : : ト、:|
   |: : |: : : : /!/ ⌒ヽ| :/ |:./⌒ヽV: |.: : : | V
  < : _: : : / 〈  {} |/  レ  {} }|:./ヽ: : |
  <:: |. 小{   _,,.. -    、-.,_  レ{: :.|ヽ:|    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   厶ヘ ハ         、     {ハ/ V   | いい加減にしてくれよっ!
      \_!      _ '     !         | 正直言って気持ち悪い!!
        ヽ    /   `t   /      <
      ___,r| \  {    / /         \____________
    /:/::::| \  ヽ `_⌒ ィ ´            (⌒)
  /::::::/::::::|  \   ´ ∧>、         ノ ~.レ-r┐、
/:::::::::::/::::::::|    \  /  !\::`ー- 、  ノ__  | .| | |


40デフォルトの名無しさん:2010/03/26(金) 16:36:51
    ,.-'"   `'''-、
  /          ヽ
  /             l
  | ヽ         / |
 rl  〉 __    ___ 〈 /-,
 |゙i| <.(・)` i '´(・)>  .!/il
 ヽl     ..:|     |_ノ
   l   /ヽ___ハ    l
   ヽ ヽ ー==‐ ' / /
  _/| ヾ、     /|ヽ、
 ::::::l   ` --- '  l:::::::::ヽ、__

クソスレア・ゲルナー[xoslair Gellner]
(1914〜1989 イギリス)
41デフォルトの名無しさん:2010/03/26(金) 17:28:35
.netのregexです(prel5互換?)

Controlという文字をReplaceしたいのですがControlsを除外したい場合どのように書けばいいのでしょうか?
42デフォルトの名無しさん:2010/03/26(金) 17:34:42
>>37
気に入らないor答えられないならスルーしておけ。
おれみたいにな。
43デフォルトの名無しさん:2010/03/26(金) 17:44:52
/Control(?!s)/
.netはずいぶん使ってないから間違ってるかも

でもそのレベルなら
・"Control"の出現位置を調べて次の文字が"s"以外なら部分上書きする
・/Control(s)?/でマッチをかけてコールバック内で$1を元に条件分岐
みたいな地道で理解しやすいアプローチをお勧めする
44デフォルトの名無しさん:2010/03/26(金) 20:28:56
>>43
ありがとうございます。
できました。
45デフォルトの名無しさん:2010/03/26(金) 20:30:33
リテラルでいいんですかね?
""で囲まれた文字などをヒットさせたいんですが

(")([.\/a-zA-Z0-9]+)(")

とかやってみたのですがかかってくれません

あとコメントやリテラルの中に日本語があった場合はどうかければいいんでしょうか?
46デフォルトの名無しさん:2010/03/26(金) 20:36:31
"[^"]*"
47デフォルトの名無しさん:2010/03/26(金) 20:39:09
>>46
ありがとうございます
48デフォルトの名無しさん:2010/03/26(金) 20:46:20
ちょっと待て。
言語が何か知らんけど、ダブルクォートがエスケープされて入ってるとかは考えなくて良いのか?
49デフォルトの名無しさん:2010/03/26(金) 20:55:44
も、申し訳ございませんでした ><

"(?:[^"\\]|\\.)*"
50デフォルトの名無しさん:2010/03/26(金) 20:58:32
>>48
基本的な書き方できればそこからなんとか^^
51デフォルトの名無しさん:2010/03/26(金) 21:45:26
ソースをネットに公開するのにIDE上の色分けするのって面倒ですね・・・
52デフォルトの名無しさん:2010/03/26(金) 22:03:33
>>51
codepadとかvcviewとかgoogle codeとか
53デフォルトの名無しさん:2010/03/26(金) 22:06:41
vcviewじゃなくてviewvcだった
CVS and Subviersion viewer
54デフォルトの名無しさん:2010/03/26(金) 22:10:30
Ideone.com | Online IDE & Debugging Tool
ttp://ideone.com/

5551:2010/03/26(金) 23:18:47
結構いろいろあるんですね

google codeはじめ方がわからんw

codepad、Ideone.comは似たようなサービスですよね
C#のコードなので色分けが対応してないのが残念

viewvcはSubviersionの系統ですか

簡単なツール作ったけど結局正規表現のパターンに左右されてしまう・・・
56デフォルトの名無しさん:2010/03/27(土) 02:38:13
コードハイライトなんて腐るほどライブラリあるからそれつかえよ
57デフォルトの名無しさん:2010/03/27(土) 03:11:11
>>56
コードハイライトっていうのか
http://code.google.com/p/syntaxhighlighter/
いいのがあった
助かりました
58デフォルトの名無しさん:2010/03/27(土) 13:01:36
59デフォルトの名無しさん:2010/03/29(月) 20:37:33
葡萄
バナナ
apple
これらのどれかが含まれる場合にのみマッチするようにする記述を教えてください
60デフォルトの名無しさん:2010/03/29(月) 20:40:20
(葡萄|バナナ|apple)
61デフォルトの名無しさん:2010/03/29(月) 21:25:25
>>60がbest answerだな。後は文字コードに注意するだけ。
一応言ってみるけど、果物に分類されるものにマッチすることを望んでいるなら、正規表現以前の問題
62デフォルトの名無しさん:2010/03/30(火) 08:49:45
(果物)
63デフォルトの名無しさん:2010/03/30(火) 11:26:32
if condition

という行にはマッチするけど、

if condition end
if condition endif

などの行にはマッチしない正規表現を教えてください。
condition のところには任意の文字列がくるとします。

とりあえず、処理系は Perl5.8 で。

if.+(?!end)$

などとしてみたけど、"if condition end" にマッチしてしまう。
64デフォルトの名無しさん:2010/03/30(火) 11:44:36
うーむww

これはダサいww

(if )(condition)([ ])([^e][^n][^d])
65デフォルトの名無しさん:2010/03/30(火) 12:05:58
いやconditionは任意の文字列らしいよ
end, endifが行末か
66デフォルトの名無しさん:2010/03/30(火) 12:12:58
任意がどういう文字がくるかわからんのでとりあえず

(if )([a-zA-Z0-9]+)( )([^e][^n][^d])
67デフォルトの名無しさん:2010/03/30(火) 12:33:52
それだと、例えば
if hoge add
がマッチしない
68デフォルトの名無しさん:2010/03/30(火) 12:37:18
そういうパターンもあるなら先に言えよ
69デフォルトの名無しさん:2010/03/30(火) 12:40:51
>>68
???
マッチしたいものにマッチする、マッチさせたくないものにはマッチしない

が基本だろ。
70デフォルトの名無しさん:2010/03/30(火) 12:41:22
(if )([a-zA-Z0-9 ]+)( )([^e][^n][^d])
71デフォルトの名無しさん:2010/03/30(火) 12:41:26
>任意の文字列
72デフォルトの名無しさん:2010/03/30(火) 12:42:08
73デフォルトの名無しさん:2010/03/30(火) 12:45:50
74デフォルトの名無しさん:2010/03/30(火) 12:48:07
>>72
スペース入ったの見てる?
2chの文字だけで判断するなよ
75デフォルトの名無しさん:2010/03/30(火) 13:00:33
>>63
if.+(?!end)$
これって何でテストしてみたの?
perl5互換の.netの正規表現だとif hoge addしかかからないぞ
76デフォルトの名無しさん:2010/03/30(火) 13:23:14
/.+/が末尾までマッチするから無理だろ
perl5.8って戻り読み使えないんだっけ?

あと、「任意の文字列」には空文字列、end、endifも含まれるんだが

○ if endend
○ if hoge end fuga
× if end

でいいんだよな?
77デフォルトの名無しさん:2010/03/30(火) 14:02:18
正規表現単独って結構厳しくないか?

(if)(.+)(endif|end)

だときっちりターゲット絞れるからと思って

(if)(.+)(?!end)

こうすると見事に駄目になるしな

プログラム的に

(if)(.+)(endif|end)
これの否定を検索みたいなことができなければ一度でやるのは無理じゃね?

一度抽出して結果を交えてどうにかするならいけそうだが
78デフォルトの名無しさん:2010/03/30(火) 14:26:24
>>62
正規表現にポリモフィズムが導入されれば可能になるだろうな
79デフォルトの名無しさん:2010/03/30(火) 15:42:19
英数字の単語をマッチさせたいが、すべて大文字のものは除く

○ abc
○ Bbc

× ABC

みたいな正規表現はどうなりますか?
80デフォルトの名無しさん:2010/03/30(火) 21:15:08
>>63

^if.+(?<!\send)(?<!\sendif)$

>>79

(?=.*[a-z])[A-Za-z]+
81デフォルトの名無しさん:2010/03/30(火) 21:57:29
>>63
^if .*(?<! end(if)?)$

>>80 1つ目
それだと、ifhoge とかもマッチしちゃう
82デフォルトの名無しさん:2010/03/30(火) 22:00:21
まだやってんのかw
完璧な正解求めて時間浪費しすぎだろ

end endif含めたパターン抽出して結果からend endif含むところだけリプレースか何かで
潰しちゃえばすむことなのに
83デフォルトの名無しさん:2010/03/30(火) 23:22:21
>>80
回答する側はずいぶんいい加減でもいいんですねw
84デフォルトの名無しさん:2010/03/30(火) 23:37:59
質問する側も条件がいい加減なんだからどっちもどっち。
85デフォルトの名無しさん:2010/03/31(水) 00:22:23
>>81

それ、Perlじゃ通らん。

Variable length lookbehind not implemented in regex m/^if .*(?<! end(if)?)$/
86デフォルトの名無しさん:2010/03/31(水) 00:37:27
^if .*(?<! end)(?<! endif)$
87デフォルトの名無しさん:2010/03/31(水) 17:00:25
<h1>hoge</h1>
<div><a:hhh /></div>
<div><b:iii e="foo"/></div>
<h2>bar</h2>
<p><c:jjj>yahoo</c:jjj></p>


これで
<a:hhh />
<b:iii e="foo"/>
<c:jjj>yahoo</c:jjj>

この部分を取得したいのですがよろしくお願いします。
共通事項としては、<A:B>の形式で、タグ形式で終了します。
8887:2010/03/31(水) 17:01:33
Perl互換でお願いします。
89デフォルトの名無しさん:2010/03/31(水) 17:37:57
>>87
<b:iii e="</b:iii></b:iii></b:iii>"/>
<c:jjj>yah<c:jjj>oo</c:jjj></c:jjj>
というのもアリ?
9087:2010/03/31(水) 17:42:29
>>89
レスありがとうございます。
ネストは全く考えていませんでした。
ネストするとかなりややこしくなってしまいますね。
とりあえずなしでお願いします。
91デフォルトの名無しさん:2010/03/31(水) 18:43:30
正規表現クックブック
http://www.oreilly.co.jp/books/9784873114507/

出るらしい
92デフォルトの名無しさん:2010/04/05(月) 06:31:50
xxyxxyxxy
で'y'を','などのリテラルに置換するのは簡単ですが、
xx,xx,xx,
制御コードに置換するにはどうするのでしょうか。
xx
xx
xx
ソースコード整形でよく使うのでとくにy -> \nとy -> \r\n の置換をお願いします。
当方javaですが他のでも一応理解できます。
93デフォルトの名無しさん:2010/04/05(月) 06:59:29
"\n"
94デフォルトの名無しさん:2010/04/05(月) 14:31:34
それだと
xxnxxnxxn
になります。replaceでも言語やソフトが制御コードの出力をサポートしていればいいのですが、
ただの"\n"や
\n
\\n
などは'\' 'n' に置き換えられるので他の方法はないでしょうか。
95デフォルトの名無しさん:2010/04/05(月) 14:43:26
意味がわからん
96デフォルトの名無しさん:2010/04/05(月) 15:26:20
>>94
そんなはずがねえだろかす
97デフォルトの名無しさん:2010/04/05(月) 22:41:17
>>94
コードを示んだ。どこか間違えているから。
98デフォルトの名無しさん:2010/04/06(火) 02:58:27
xxyxxyxxy なら
replac "xxy", "xx\n" で普通ならマッチの類推で改行するように思いますがnetbeansのエディタだと
xxnxxnxxn なんです。
マッチのときと違い、置換のときの \ はエスケープ機能固定で、'\n'のとき'n'と解釈のようです。
replac "xxy", "xx\\n" なら \ n になり
xx\nxx\nxx\n で一行のままです。そういうアプリ(モジュール)のようです。
他のエディタならエスケープで無く制御コード出力の解釈で改行になるようですけど。
つまり質問のように置換のとき制御コード(0x0Aなど)を出すにはどうすればよいでしょうか。
99デフォルトの名無しさん:2010/04/06(火) 08:21:49
Javaの話かと思ったらエディタの置換機能かよ!
100デフォルトの名無しさん:2010/04/06(火) 08:57:48
テキストファイルもバイナリエディタでみると16進数の集まりなので
そっちで置換するのもいいかもねw

エスケープシーケンスなんて使わなくても制御コードそのまんまで置換できるし
101デフォルトの名無しさん:2010/04/06(火) 09:00:56
というかJava使えるならバイト読みして自分で置換すればいいんじゃないの?
102デフォルトの名無しさん:2010/04/06(火) 10:33:04
とすると、置換の場合はアプリの方が制御コード出力をサポートしてないと改行やタブに置換する方法ないのでしょうか?
103デフォルトの名無しさん:2010/04/06(火) 16:22:45
当り前だろ
104デフォルトの名無しさん:2010/04/08(木) 11:47:36
つ[man tr]
105デフォルトの名無しさん:2010/04/09(金) 03:51:09
>>63
戻り読み無しなら
/^if +(?!end)(?!endif)(\w{0,4}|\w{1,2}(?! end)\w{4}|\w+(?! endif)\w\w(?! end)\w{4}) *$/

戻り読みありなら
/^if +\w+(?<! endif)(?<! end) *$/

自分では、なにか抜けがありそうで怖くて使わないだろうけど

エディタで使うとかじゃない限りは
一度にマッチさせようとせず、別条件で除外するのが普通ですよね
106デフォルトの名無しさん:2010/04/09(金) 15:44:13
107デフォルトの名無しさん:2010/04/11(日) 22:14:56
先読みの (?!123)\d\d\d と後読みの \d\d\d(?<!123) ってこの場合に限り
意味は同じですよね。
108デフォルトの名無しさん:2010/04/12(月) 22:20:16
使用エディタ EmEditerで

ファイルリストから目的の拡張子だけを持つファイル名を抽出したいのですが

例えば
C:\aaaa\bbbb\hogehoge.txt

を抽出するなら [^\\]+(?=\.txt) でいいかと思うんですが、逆に「txt以外のファイル名」としたときに [^\\]+(?!\.txt) では全て選択出来てしまいます。
色々考えた結果

[^\\]+(?=\.(?!txt)) だと目的の動作をすることは分かったのですが、 [^\\]+(?!\.txt) が駄目な理由がいくら考えても分かりません。どなたか解説お願いしたいです。


「¥」を除く1回以上の繰り返しの後ろに「.txt」がつかない場所にマッチする。
まあこれだけだと当然上の例なら「aaaa」や「bbbb」も同じようにマッチするのは分かるんですが「hogehoge.txt」もマッチする理由がさっぱりなのです。
どなたかお願いします
109デフォルトの名無しさん:2010/04/12(月) 23:22:44
[^\\]+ が hogehoge.txt にマッチしてるだけでは?
110デフォルトの名無しさん:2010/04/12(月) 23:23:15
ちょっと前にまったく同じのがあったぞ

量指定子が全部食い尽くすから、("" != ".txt") は真
111デフォルトの名無しさん:2010/04/12(月) 23:41:00
この場合、量指定子は関係ないんじゃないの?

・「C:\aaaa\bbbb\hogehoge.txt」に対して「(?=\.txt)」をマッチさせると e と . の間の一箇所のみがマッチ
 →[^\\]+ を欲張りにマッチさせて「hogehoge」
・「C:\aaaa\bbbb\hogehoge.txt」に対して「(?!\.txt)」をマッチさせると e と . の間以外のすべてがマッチ
 →[^\\]+ を欲張りにマッチさせて「hogehoge.txt」(t と行末の間までマッチ)

ってことじゃないのかな
112デフォルトの名無しさん:2010/04/13(火) 15:31:26
うーんやっぱり量指定子が全部食ってるのかな?
けど量指定子が全部食うなら [^\\]+(?=\.txt) でおkな理由もよく分からんし

結局>>111の用に先読みが位置アンカーとしか動作しないことをよく考えるべきなのかなかな?
113108=112:2010/04/13(火) 17:34:02
すいません、ちょっと勝手な自分の考察をだだ流しすることになりますけど

[^\\]+(?!\.txt) と (?!\.txt)[^\\]+ は同じ結果になる。
[^\\]+(?=\.txt) と (?=\.txt)[^\\]+ は結果が違う。

やっぱり>>110>>111さんのいうことでOKなんですね。

「C:\aaaa\bbbb\hogehoge.txt」

(?!\.txt)[^\\]+でヒットするのは「.txt」の「.」の前以外の場所全て。その場所を起点として後ろ側で[^\\]+が当てはまる所は全部食う。
[^\\]+(?!\.txt)でも結局「.」の前以外の全ての場所になり、[^\\]+で食うので今回の例の場合は結果が変わらず。

[^\\]+(?=\.txt)なら「.」の前でのみヒットし、その前で[^\\]+も当てはまる所は食う。(?=\.txt)[^\\]+なら後ろ側を食うので結果が違う。

[^\\]+(?=\.(?!txt))
位置検索で「txt」じゃない場所を探す→たくさんのヒットの中から「.」があるところを検索→それより前の部分で[^\\]+ =ファイル名

はあ大分スッキリしました。結局先読みを「^」や「$」と同じように考えればいいんですね、多分
答えくれた方々ありがとやんした!
114デフォルトの名無しさん:2010/04/13(火) 19:02:56
>けど量指定子が全部食うなら [^\\]+(?=\.txt) でおkな理由もよく分からんし

おkに決まってるだろ
あほか
115デフォルトの名無しさん:2010/04/13(火) 19:09:32
結果が出た後に批判だけするのダサイからやめとけ
116デフォルトの名無しさん:2010/04/14(水) 03:15:36
文字コードのエスケープシーケンスについて教えてください。

preg_match("/^[ぁ-ゞ]+$/u",$str)
をUTF-8 コード表記にすると
preg_match("/^(\xe3\x81[\x81-\xbf]|\xe3\x82[\x80-\x9e])+$/",$str)

と、某所にあったのですが、\xe3\x81〜 の意味が判りません

ぁ:0x3041 む:0x3080 ゞ:0x309E は判ったのですが、どういう法則で、\xe3\x81〜となるのでしょうか?

コード表
http://www.unicode.org/charts/PDF/U3040.pdf
117デフォルトの名無しさん:2010/04/14(水) 03:28:00
U+3041はUTF-8だと\xe3\x81\x81
U+309EはUTF-8だと\xe3\x82\x9e
UTF-8の3バイトめは\x80-\xbf
118デフォルトの名無しさん:2010/04/14(水) 10:08:13
>>113

ゼロ幅表明の場合、カーソルは移動せず、立ち止まってちょっと後ろを振り返って
みたり、先を見渡してみたりして思ったような正規表現になっているかを確認する
作業だったような気がします。

[\\+]+(?=\.txt)
の場合は、「\.txt」の直前までカーソルが移動した状態でtrueとなる。
その後いくらカーソルを先に移動してもこの正規表現がtrueとなることはない。

[\\+]+(?!\.txt)
の場合は、「.txt」の直前までカーソルが移動した状態ではfalseだが、
「\.txt」の\.の直後以降にカーソルが移動した状態ではtrueとなる。

カーソルのイメージができればもっとスッキリできるのでは?

119116 :2010/04/14(水) 12:49:27
>>117サン
>U+3041はUTF-8だと\xe3\x81\x81
レスありがとうございます
そういうのって、どういう法則なんでしょうか。
任意の文字の\xnn\xnn\xnn形式に変換するには、どーすれば。。
120デフォルトの名無しさん:2010/04/14(水) 23:50:50
>>119
自分で調べようよ…
Googleで「UTF-8 仕様」で検索してみるとかさ。
121116 :2010/04/15(木) 14:49:27
判りやすいのがなくって・・(涙
全然、わかんないです。
122デフォルトの名無しさん:2010/04/15(木) 14:59:08
UTF-8でぐぐれば上の方にあるだろうウィキペディアのUTF-8の
「エンコード体系」に書いてある内容でわからなければ、そもそも
プログラミングや文字コードの基礎が足りないので勉強しろとしか
いえないな。
123デフォルトの名無しさん:2010/04/15(木) 15:08:28
>>121
あんた馬鹿?
「u+3042 e3 81 82 あ」でぐぐって2番目にヒットしたサイトに解説があるんだけど。
曰く、
firstByte = 0xe0 | (ucs2 >> 12);
secondByte = 0x80 | ((ucs2 >> 6) & ((1 << 6) - 1));
thirdByte = 0x80 | (ucs2 & ((1 << 6) - 1));
とあるね。
124デフォルトの名無しさん:2010/04/15(木) 15:11:31
>>120
あんた馬鹿?
自分が調べたらええやん
125デフォルトの名無しさん:2010/04/15(木) 16:13:52
>>123
あんた馬鹿?

なんで乞食に餌与えるのよ
126デフォルトの名無しさん:2010/04/15(木) 16:18:20
>>125
あんた馬鹿?
いつまでスレ違いの話を続けるのよ。
127デフォルトの名無しさん:2010/04/15(木) 18:58:09
>>126
あんた馬鹿?
ネタに釣られるなんて
128デフォルトの名無しさん:2010/04/16(金) 06:24:26
キモッ
129デフォルトの名無しさん:2010/04/16(金) 11:30:52
>>124-127
これをあぼーんするNGEXは

^(あんた)*(馬鹿|バカ)?.+(ええやん)*
130デフォルトの名無しさん:2010/04/16(金) 21:36:05
s/(\/\w\w)(\.htm)/$10$2/で、$1の直後に0を付けたいのですがどうも$10と解釈しているようで
うまくいきません。これの回避方法を教えてください。
131デフォルトの名無しさん:2010/04/16(金) 21:40:02
>>130
あ〜出来ました。いちど別の文字にしてから0に変えました。
132デフォルトの名無しさん:2010/04/16(金) 22:03:22
>>129
それ試してみたんだけど、必ずマッチが成功してしまうのだ。
これじゃあぼーんできないよ。。
133デフォルトの名無しさん:2010/04/16(金) 22:30:16
>>132
^[\s ]*<a\shref=.+>>\d.+<br>[\s ](あ[んな]た|おいら)*(馬鹿|バカ)[??]?.+(ええやん)*
134デフォルトの名無しさん:2010/04/18(日) 19:49:05
現在地球上で最も優れた正規表現の実装はどこにありますか?
135デフォルトの名無しさん:2010/04/18(日) 19:50:39
自前で実装すれば、boostもperlも遅いからな・・・
136デフォルトの名無しさん:2010/04/18(日) 20:15:59
鬼車
137デフォルトの名無しさん:2010/04/19(月) 18:12:57
>>130
普通に${1}0ってしろよ。
138デフォルトの名無しさん:2010/04/26(月) 16:47:51
正規表現クックブックが出たな
139デフォルトの名無しさん:2010/04/26(月) 17:52:46
>>137
thx
140デフォルトの名無しさん:2010/04/26(月) 18:00:01
なんでこんなにややこしいことになってるの?
もうすこし表現が簡単になればいいのに

便利に使うための記述じゃないの?

141デフォルトの名無しさん:2010/04/26(月) 18:37:07
ではあなたの考える分かりやすくて便利な性器表現をここで披露してみてくださいな
142デフォルトの名無しさん:2010/04/26(月) 18:40:37
>>141
凹凸 これでいいか
143デフォルトの名無しさん:2010/04/26(月) 18:41:11

正規表現で選民意識かよきめえw
144デフォルトの名無しさん:2010/04/26(月) 18:47:42
  ♀
 ♂
145デフォルトの名無しさん:2010/04/26(月) 19:41:28
>>138
ふくろう本あればもう他はいらなくね?


時々>>140みたいな香具師が開発チームにいて
「正規表現は可読性が落ちるから使うな」とか抜かすが、
そこは「お前の知識が浅いだけじゃん」とCoolに決めて黙らす
相手は団塊爺PGだったりするんだが昔は正規表現嫌われてたのかね
146デフォルトの名無しさん:2010/04/26(月) 19:58:40
イット業界
こわいお(;_;)
147デフォルトの名無しさん:2010/04/26(月) 20:00:30
当たり前のように使うようになったのは、Unixの文化だねぇ。
Unixへの憧れなしでパソコンユーザーだったおっさんとか、
メインフレーム屋やオフコン屋は拒否反応を示すのかも。
148デフォルトの名無しさん:2010/04/26(月) 20:26:07

偉い偉い
その優秀な頭脳でい仕事してくださいね!
149デフォルトの名無しさん:2010/04/26(月) 20:36:37
誰に対しての反応なのかわからないよ。
時間的にもおかしくない?
150デフォルトの名無しさん:2010/04/26(月) 20:41:27

偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!
151145:2010/04/26(月) 21:08:58
>>147
なるほどねー
パンチカード世代のUNIX系知らない団塊は毛嫌いするって事か
まぁ今更勉強しろとは言わないけど最低限読めるように頑張れよ>>150
152デフォルトの名無しさん:2010/04/26(月) 23:51:58

偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!
153デフォルトの名無しさん:2010/04/26(月) 23:53:57
2・3日前くらいからいろんなスレでキチガイを見かけるが同一人物か?
154デフォルトの名無しさん:2010/04/27(火) 00:46:11
今時、正規表現のロジックが理解できない奴は新しいコードなんて書けない
既存の古いコードのメンテでもやってればいい
155デフォルトの名無しさん:2010/04/27(火) 00:48:52

偉い偉い
その優秀な頭脳で新しいコードいっぱい書いてくださいね!
156デフォルトの名無しさん:2010/04/27(火) 01:37:23
否定先読みなんかはどうも感覚と一致しなくてバグが潜んでたりするなぁ
157デフォルトの名無しさん:2010/04/27(火) 01:44:59

偉い偉い
その優秀な頭脳でバグのないコードいっぱい書いてくださいね!
158デフォルトの名無しさん:2010/04/27(火) 01:45:25
最近いろんなブラウザでJavaScriptのエンジン開発やってるけど
正規表現の後読みが使えるブラウザって存在するの?

どっかのブラウザが対応したらその流れでIE9でも対応しないかなと期待してるんだけど。
159デフォルトの名無しさん:2010/04/27(火) 02:07:53
正規表現エンジンは、どのブラウザも全く同じ。
基本的に、コアの実装はIEでさえ標準に準拠してる。
ブラウザ間の差があるのは、「クライアントサイドJavaScript」の部分。
160デフォルトの名無しさん:2010/04/27(火) 02:22:28

偉い偉い
その優秀な頭脳で後読みが使えるブラウザを書いてくださいね!
161デフォルトの名無しさん:2010/04/27(火) 13:18:15
'20100427' を (\d\d\d\d)(\d\d)(\d\d) でマッチさせると2番目は '04' となります。
このようなときに、先頭の0を取り除いて4を切り出すということは正規表現だけで実現できるでしょうか?
162デフォルトの名無しさん:2010/04/27(火) 13:34:06
(\d\d\d\d)0(\d)(\d\d)
163デフォルトの名無しさん:2010/04/27(火) 13:42:13
すみません、もちろん仮定は「同時に '20101203' が 2010, 12, 3 と切り出せること」です。
164デフォルトの名無しさん:2010/04/27(火) 13:47:59
(\d\d\d\d)0?(\d?\d)0?(\d?\d) だと、
20100403 の時に変なことになるし、
たぶんできない。
165デフォルトの名無しさん:2010/04/27(火) 13:55:32
(\d\d\d\d)(?:0|([1-9]))(\d)(?:0|([1-9]))(\d)

と1桁ずつキャプチャしてつなげるとか?
166デフォルトの名無しさん:2010/04/27(火) 16:54:53

偉いなあお前らは
俺はワイルドカードも使えないがせいぜい頑張ってな
167デフォルトの名無しさん:2010/04/27(火) 17:03:00
単一のキャプチャの(...)でこの2つの場合を区別するのは
ムリだろ。入り口が有限状態オートマトンの1状態にしか
対応させられないから1桁とるべき場合か2桁取るべき場合
かの情報の持ちようがない。
168デフォルトの名無しさん:2010/04/27(火) 19:32:05
>>161
(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)
169デフォルトの名無しさん:2010/04/27(火) 19:33:09
すまん間違えた

(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)
170168=169:2010/04/27(火) 19:34:30
二重に間違えてるし…吊ってくるorzorz

^(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)$
171デフォルトの名無しさん:2010/04/27(火) 19:53:14
あー、^はいらないか
後ろが行末じゃない場合にも対応するならこうかな

(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)(?!\d)
172デフォルトの名無しさん:2010/04/27(火) 20:17:03
正規表現一本でなんでもかんでもやろうとするのって
PerlやRubyで一行野郎と変わらない阿呆だな
173デフォルトの名無しさん:2010/04/27(火) 21:01:58

偉いなあお前は
優れたツール使って頑張ってな
174デフォルトの名無しさん:2010/04/27(火) 21:33:41
レベル低いな
175デフォルトの名無しさん:2010/04/27(火) 22:34:36
>>172
正規表現一本も読めない奴が、このスレで何してんの?
176デフォルトの名無しさん:2010/04/27(火) 23:27:25

優秀なんだな君は
俺はワイルドカードも使えないが正規表現で頑張ってね
177デフォルトの名無しさん:2010/04/27(火) 23:45:23

a = b
a^2 = ab
a^2 - b^2 = ab - b^2
(a + b)(a - b) = b(a - b)
a + b = b
2b = b
2 = 1
178デフォルトの名無しさん:2010/04/28(水) 00:32:33
>>177
なつかしすw
179デフォルトの名無しさん:2010/04/28(水) 07:42:31
(a + b)(a - b) = b(a - b)
a + b = b

0でわるな
180デフォルトの名無しさん:2010/04/28(水) 08:49:34
>>177
a=42
b=-22のとき
181デフォルトの名無しさん:2010/04/28(水) 12:26:37
JavaScriptです

「xxxx=任意&yyyyyyy=任意&zzzzzz=任意」
と言う文字列から任意の値を各々取るにはどうしたらいいでしょうか?
xyzの文字は各々固定で、任意には何文字入るかわかりません
0文字もあります

欲しい結果は3つ
xxxx=任意
yyyyyyy=任意
zzzzzz=任意
182181:2010/04/28(水) 13:42:54
自己解決
sage忘れすまん
183デフォルトの名無しさん:2010/04/28(水) 15:30:15
教わっといて自己解決かよw
184181:2010/04/28(水) 15:46:38
>>183
いや、JavaScriptスレでもマルチしたけど
結局、正規表現ではダメだったのよ

まぁ…すいませんでしたw
勉強します
185デフォルトの名無しさん:2010/04/28(水) 21:22:49
●正規表現の使用環境 Perl5
●検索か置換か?  置換
●説明
行の最後が > じゃない行(改行コードだけの行も含む)の
改行コード を 改行コード<br>にしたい
改行コードは \n \r \r\n どれでもできるようにしたい
●対象データ
<p>あいうえお</p>
かきくけこ
<p>たちつてと</p>
●希望する結果
<p>あいうえお</p>
かきくけこ<br>
<p>たちつてと</p>
186デフォルトの名無しさん:2010/04/28(水) 23:59:29
頑張ってみたけど、先読みを使うと、\r\nの時に都合が悪くて、
解決方法がわからんかったので置き換えでごり押し。

s/([^>])(\r\n|[\n\r])/$1<br>$2/sg;

改行コードを統一すると、先読みでもう少しスタイリッシュにかけた。

s/(?<!>)(?=\n)/<br>/sg;

何に使うかしらないけど、出力先のOSをみて改行コードを置き換えてもいいと思うんだけど。
サンプルは以下。

my @str = (
"<p>aiueo</p>\nkakikukeko\n<p>sasisuseso</p>\n",
"<p>aiueo</p>\rkakikukeko\r<p>sasisuseso</p>\r",
"<p>aiueo</p>\r\nkakikukeko\r\n<p>sasisuseso</p>\r\n",
);

foreach(@str){
s/([^>])(\r\n|[\n\r])/$1<br>$2/sg;
s/\r\n?/\n/g; # 表示確認のため、改行コードを\nで統一
print;
print "-------------\n";
}
187デフォルトの名無しさん:2010/04/29(木) 02:04:27
>>186
ありがとうございます。
これをよく見て勉強します。
188デフォルトの名無しさん:2010/04/29(木) 18:11:51
>>187
こういう解法もある

s/(.)(\r\n|\n)/$1 eq '>' ? "$1$2" : "$1<br>$2"/sge;

eオプションが使えると色々応用が効くよ
189デフォルトの名無しさん:2010/04/30(金) 00:25:13
Perlならね。
190デフォルトの名無しさん:2010/04/30(金) 02:26:32
ありがとうございます。
これをよく見て勉強します。

頑張ってください
191デフォルトの名無しさん:2010/04/30(金) 09:40:13
sge-
192デフォルトの名無しさん:2010/05/02(日) 09:58:16
適当なフリーのテキストエディタで正規表現を使って以下のような置換を行おうとしたのですが
正規表現には素人なので2つめのパターンをどう表現すればいいのかよく分かりませんでした。
どう書けば上手く置換できるのか教えてください。

1つめのパターン
[[XXXXX]] → {{abc|XXXXX|}} (XXXXXは任意の文字列)
2つめのパターン
[[XXXXX|XXXXX 《YYY》]] → {{abc|XXXXX|def=YYY|}} (置換前の2つのXXXXXは同一の文字列)

例えば
 [[日本]] - [[アメリカ合衆国|アメリカ合衆国 《米国》]] - [[イギリス|イギリス 《英国》]] - [[ドイツ]] - [[フランス]] -
 [[中華人民共和国|中華人民共和国 《中国》]] - [[大韓民国|大韓民国 《韓国》]] - [[グアテマラ|グアテマラ 《グァテマラ/ガテマラ》]] -
 [[朝鮮民主主義人民共和国|朝鮮民主主義人民共和国 《北朝鮮》]] - [[メキシコ]] - [[ギリシャ|ギリシャ 《ギリシア》]]
のようなテキストを、
 {{abc|日本|}} - {{abc|アメリカ合衆国|def=米国|}} - {{abc|イギリス|def=英国|}} - {{abc|ドイツ|}} - {{abc|フランス|}} -
 {{abc|中華人民共和国|def=中国|}} - {{abc|大韓民国|def=中国|}} - {{abc|グアテマラ|def=グァテマラ/ガテマラ|}} -
 {{abc|朝鮮民主主義人民共和国|def=北朝鮮|}} - {{abc|メキシコ|}} - {{abc|ギリシャ|def=ギリシア|}}
のように置換したいのです。
193デフォルトの名無しさん:2010/05/02(日) 10:06:13
正規表現 欲張り
194デフォルトの名無しさん:2010/05/02(日) 13:36:16
{A},{B}
という文字列に下記正規表現はマッチすると思うのですが
\{(.+)\} *, * \{(.+)\}
マッチしません。どこがまずいのですか?
195デフォルトの名無しさん:2010/05/02(日) 13:44:04
\{(.+)\} *, *\{(.+)\}
196デフォルトの名無しさん:2010/05/02(日) 13:46:07
>>195
ありがとうございます。
スペースが入っていましたねw
気づきませんでした。
197デフォルトの名無しさん:2010/05/02(日) 23:31:14
(V)o¥o(V)
198デフォルトの名無しさん:2010/05/03(月) 18:24:33
そりゃ工業高校なんかで最低限の技能をなにか一つ身に付けてる奴なら年齢が最強の武器になるよ
何となく大学院まで行ったような学生よりよっぽど将来有望だ
でも3年間何もせずただ学校に通ってただけってんじゃ駄目だろ
何もしてないどころか勉強ばっかりやって3年間無駄に歳だけ喰って
社会じゃ役に立たない能書きだけ一人前になってたんじゃしょうがないだろ
だから普通科の高卒は中卒以下だって言ってんだよ
199デフォルトの名無しさん:2010/05/05(水) 22:01:58
前に、このすれで、()の中身を配列に入れていく正規表現があった。
(())でも、それぞれの中身を入れていく優れものだった。
あれの発展版で、文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9
のそれぞれの文章を配列に入れれる正規表現はできないものだろうか?
200デフォルトの名無しさん:2010/05/05(水) 22:25:37
日本語でおk
201デフォルトの名無しさん:2010/05/05(水) 22:34:50
>>199
その正規表現って
((o)(o))ってあってもちゃんと乳首取れる?

ていうか言語クラス違うくね?できるもんなのか。
202デフォルトの名無しさん:2010/05/05(水) 22:35:51
近所が自転車盗まれたても、相当離れてるけどジュース置いたら逮捕w
姉はそれでおっぱい触られたって。
これひどくね?友達の姉の実話な。
203デフォルトの名無しさん:2010/05/05(水) 22:48:00
入れ子になってても順番にキャプチャできる
123456789 に対して 1(2(3)4)5(6(7)8)9 としたら
キャプチャ結果は 234, 3, 678, 7 になる
>>199が何を求めてるのかいまいちよくわからんが
204デフォルトの名無しさん:2010/05/06(木) 08:53:49
>文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9
がデータだろうから 1(2(3)4)5(6(7)8)9 を与えたら 1, 2, 3, 4, 5, 6, 7, 8, 9 がほしいんだと思うぞ

一方ロシアでは split を使った
205デフォルトの名無しさん:2010/05/06(木) 12:35:18
>ていうか言語クラス違うくね?できるもんなのか。
日本語でOK。
206デフォルトの名無しさん:2010/05/06(木) 15:17:54
>>205
正規表現であって、文脈自由文法じゃないけどできるものなの?
ってことだよ。俺の理解不足だったらすまないが。
207デフォルトの名無しさん:2010/05/06(木) 15:47:52
>>204
たしかにネストなんか気にせずに'('と')'を区切り記号としてsplitするだけでいいな。
さすがロシア。
208デフォルトの名無しさん:2010/05/06(木) 17:01:02
確かに、わざわざ正規表現で処理する内容じゃないなw
209デフォルトの名無しさん:2010/05/06(木) 17:22:49
さくらエディタを使っていて

CHAPTER01=00:00:00.000
CHAPTER01NAME=第一部 オープニング
CHAPTER02=00:09:13.400
CHAPTER02NAME=オラはにんきもの

こういうのを

TRACK 01 AUDIO
TITLE "第一部 オープニング"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "オラはにんきもの"
INDEX 01 09:13:40

こうしたいんですが、正規表現でできるもんなんでしょうか
できるとしたら答えを貰えるのが一番ですが、どこら辺を調べればいいのかヒントをもらえないでしょうか
210デフォルトの名無しさん:2010/05/06(木) 19:01:48
>>209
出来る
サクラエディタの正規表現はperl互換だからperlの正規表現調べればいけると思う

一応、答えると
CHAPTER(\d\d)\=(\d\d\:\d\d\:\d\d)\.\d\d\d\r\nCHAPTER\d\dNAME\=(.*?\r\n)

TRACK $1 AUDIO\r\nTITLE \"$3\"\r\nINDEX 01 $2\r\n
で置換すればいいんじゃないかと思う。
(一番最後のINDEX 01ってのがINDEX 02の間違いなら、置換をINDEX 01からINDEX $1に変えてね)
多分
211デフォルトの名無しさん:2010/05/07(金) 00:19:48
>>210
おお!出来ました。ありがとうございます。
正規表現はperlのが使えたんですね。これを機械に勉強してみます。
212デフォルトの名無しさん:2010/05/12(水) 03:15:50
php 5.2です。

あるテキストファイル内の文字列から、''や""で囲まれた場所以外の半角スペースとタブを削除したいんですが(preg_replace?)、
どんな感じにすればいいんでしょうか?
213デフォルトの名無しさん:2010/05/15(土) 19:34:41
以下のような文章があって、NAME〜からENDまでの間の文字を正規表現で抽出するにはどうすればよいのでしょうか?
NAME〜とENDは含みません。

NAME Haruhi Suzumiya
Haruhi is the title character and leader of the SOS Brigade, whose energetic and
eccentric character proves to be the driving force for the series.
She has a mind for adventure, which often leads her subordinates to be swept into her plans.
END
214デフォルトの名無しさん:2010/05/15(土) 19:39:38
>>213
NAME[\s ]?(?.+)\nEND
215デフォルトの名無しさん:2010/05/19(水) 07:33:29
いい加減な回答だなw
216デフォルトの名無しさん:2010/05/19(水) 22:29:45
正規表現で、"あ(い(う)え(おか)き)くけ" から一番外側の()の中身を取得するにはどうすればよいですか?
217デフォルトの名無しさん:2010/05/19(水) 22:33:54
言語による
218デフォルトの名無しさん:2010/05/19(水) 22:38:27
\1
219デフォルトの名無しさん:2010/05/20(木) 22:14:10
●正規表現の使用環境 Perl5
●検索か置換か? 検索
●説明
りんごにマッチする文字列を検索。
青りんごは対象外としたい。

●対象データ
1,いちご、青りんご、みかん
2,いちご、青りんご、りんご
3,いちご、りんご、みかん

●希望する結果
2と3がマッチ

お願いします
220デフォルトの名無しさん:2010/05/21(金) 00:45:52
(?<!青)(りんご)
221デフォルトの名無しさん:2010/05/21(金) 01:46:36
>>219
/\bりんご\b/
222デフォルトの名無しさん:2010/05/21(金) 02:16:16
>>220
りんごの括弧はいらないだろ。

>>221
蜜りんごは?ねぇ、俺の大好きな蜜りんごは?
223デフォルトの名無しさん:2010/05/21(金) 05:39:03
224デフォルトの名無しさん:2010/05/21(金) 07:53:34
>>220-221
ありがとうございます。
225デフォルトの名無しさん:2010/05/21(金) 09:08:55
★青葉りんご彡☆
226デフォルトの名無しさん:2010/05/21(金) 19:33:34
Javaで鬼車使うには、ランタイムを再コンパイルするしかないの?
227デフォルトの名無しさん:2010/05/22(土) 00:57:13
●正規表現の使用環境
JavaScript2.0? ※Firefox3.5.9+Greasemonkey 0.8.20100408.6+WindowsXP Pro SP3

●検索か置換か?
置換

●説明
( と ) ※括弧と括弧閉じを含む文字列を置換したい。

●対象データ
(Update:2010/01/02)

●希望する結果
(Update:2010/02/03)

続きを書きます。
228277:2010/05/22(土) 01:00:01
変数の wordsBrf.push(""); の "" の中に\マークを入れたりせずに、
文字列を置換させたいです。


//文字を置換
var wordsBef = new Array();//置換前
var wordsAft = new Array();//置換後

wordsBrf.push("(Update:2010/01/02)");//置換前
wordsAft.push("(Update:2010/02/03)");//置換後

var body = document.body.innerHTML;
var i = 0;

for (i = 0; i < (words.length); i++) {

var w = new RegExp( words[i], "gi" );
var body = body.replace( w, words[i] );

}

document.body.innerHTML = body;
229277:2010/05/22(土) 01:06:01
実際には、Webサイトにある更新日 (Update:2010/04/30) という
文字の色を変えるのに使いたいです。※更新”されていない”ものは赤で表示。

TCP Monitor Plus (OGA'sさんのサイト)
http://hp.vector.co.jp/authors/VA032928/

//バージョン更新チェック
var color = new Array();
var words = new Array();

color.push("#FF0000");

words.push("Ver2.42");//TCP Monitor Plus
words.push("(Update:2010/04/30)");

var body = document.body.innerHTML;
var i = 0;

for (i = 0; i < (words.length); i++) {

var w = new RegExp( words[i], "gi" );
var body = body.replace(w, "<font color='" + color[0] + "'>" + words[i] + "</font>");

}

document.body.innerHTML = body;


どうかよろしくお願いいたします。
230277:2010/05/22(土) 01:07:27
説明が下手ですみません。

変数の値に直接エスケープ文字を入れたくないという事です。

よろしくお願いします。
231デフォルトの名無しさん:2010/05/22(土) 01:23:34
>>230
本文読んでないけど、メタ文字をエスケープ出来れば済むのならjavascript quotemetaでぐぐるんだ
232277:2010/05/22(土) 01:36:41
>>231
(*・∀・)ノこんばんわ。
レスありがとうございます。

quotemetaはPerlでしか使えないのか〜(´・ω・`)と思っていたら、
メタ文字のエスケープ関数のサンプルが載っているサイトがありました。

//追加
function quote(str){
return str.replace(/\W/g, function($0){
return '\\' + $0;
});
};

//変更
var w = new RegExp( quote(words[i]), "gi" );

これで出来ました!
夜遅くにどうもありがとうございました!
233デフォルトの名無しさん:2010/05/28(金) 22:43:12
グローバルフラグを付けなくてもいいようなケースにもグローバルフラグを付けた場合
どれだけ無駄になりますか?とてつもなく無駄ですか?微々たるものですか?
234デフォルトの名無しさん:2010/05/28(金) 22:52:06
検索対象の文字列長による。
グローバルフラグをつけさえしなければ、
最初のマッチング位置以降の文字列は読み込まないので。

ただし、検索対象の文字列の中にマッチングする対象が無い場合は
グローバルフラグをつけた場合と同じぐらいコストがかさむ。

もう作っちゃったなら、性能問題出てから考えたら。
235デフォルトの名無しさん:2010/05/28(金) 22:55:32
>>234
どうもありがとうございます。特に何も感じなかったら気にしないことにします
236デフォルトの名無しさん:2010/05/29(土) 02:17:39
●正規表現の使用環境
C# 3.0

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい
{ と } に囲まれた文字列を検索したい

●対象データ
Memo[0]{
[Text] 対象データ
}

●希望する結果
[Text] 対象データ


よろしくお願いします
237デフォルトの名無しさん:2010/05/30(日) 10:50:00
>>216
亀レスだけど、
\(.*\)
で最長一致検索すれば、一番外側の()である
(い(う)え(おか)き)
にマッチする


ちなみに、\(.*?\)で最短一致検索すれば
"(い(う)"と"(おか)"の2箇所にマッチする
238デフォルトの名無しさん:2010/06/01(火) 00:04:43
強欲マッチってどういう時使うの?
239デフォルトの名無しさん:2010/06/01(火) 00:13:50
例えば文中の全ての数字の並びを抽出したいときに
/(\d+?)/g
とかやると切ないことになる
240デフォルトの名無しさん:2010/06/01(火) 00:29:59
じゃ手放さない(バックトラックしない)強欲マッチは?
241デフォルトの名無しさん:2010/06/01(火) 00:43:24
パフォーマンスだろ。
242デフォルトの名無しさん:2010/06/01(火) 01:31:28
よくわかりません。
243デフォルトの名無しさん:2010/06/01(火) 08:06:13
鬼車の欲張りと強欲の違いがわからない
ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
244デフォルトの名無しさん:2010/06/01(火) 12:12:44
手放さない欲張りマッチを使って失敗するような場合はあるんですか?
245デフォルトの名無しさん:2010/06/04(金) 10:32:38
javascriptです
aiueo
aiue
iueo
にはマッチするけどiueにはマッチしないってどう書けばいいですか?
/a?iueo?/
だとiueにもマッチしてしまって
/a?iueo|aiueo?/
だと期待通りにはなるのですが
重複する記述があるのでまとめられるならまとめたいです
共通する部分がiueじゃなくてもっと複雑になった場合など
246デフォルトの名無しさん:2010/06/04(金) 11:08:31
245
自己レスです
/a?(iue)o|a\1o?/
こうかな・・・
247デフォルトの名無しさん:2010/06/04(金) 12:26:17
>>246
僕もそう思った。
248デフォルトの名無しさん:2010/06/06(日) 10:57:14
質問です
javascriptです。

IMG00123123.jpgというような文字列が配列に大量にある。
そんな中で、例えばIMG00000012.jpgを検出したい。
そのものずばりで検索すれば、何も問題はないのですが、
不精をして、12だけで、マッチさせたい場合、どう考えればよいでしょう?

249デフォルトの名無しさん:2010/06/06(日) 11:13:15
JavaScriptってsprintfないんだな。意外だ

("00000000" + "12").substr("12".length);
250デフォルトの名無しさん:2010/06/06(日) 12:06:30
Number("IMG00000012.jpg".match(/\d+/)[0]) == 12
251デフォルトの名無しさん:2010/06/06(日) 12:15:14
>>249
ありがとうございます。

後ろから検索する事と、
文字列の長さを利用して、
"00000000"と"12"を分割する、という考え方ですね。

ちょっと検証してみます。
252デフォルトの名無しさん:2010/06/06(日) 12:55:22
>>250
あ、ありがとうございます。
現在>>249の考え方で検証中です。。

str:検索対象の文字列(ファイル名)例:IMG012312.jpg
a:検索の為の入力された数値 例:12

c=str.lastIndexOf(a+".")
if(c>-1)
{
d=str.slice(0,c);
e=(d.match(/[1-9]/).length

if(e>0)
{
alert("strは、00000012.jpgではない");
}else{
alert("strは、00000012.jpgだ");
}
おおよそこんな処理になるでしょうか?
253デフォルトの名無しさん:2010/06/06(日) 13:06:18
正規表現もだけど、それ以外のところがボロボロだからjsスレ行ってこい
254デフォルトの名無しさん:2010/06/06(日) 14:13:08
>>253
エラーだらけですみません。デバッグしてませんでした。
str="IMG001012.jpg ";
a=12;
c=str.lastIndexOf(a+".jpg") ;//後方から"12.jpg"で検索

//引っかかれば、12.jpgの部分がある
//なければ-1が帰ってくる

if(c>-1) {

//検索に引っかかった場合次は、
//文字列strの0番からc-1番までが、
//0以外の文字を含むか検証する必要がある

d=str.slice(0,c); //strの0番からc-1番までを抜出し変数dに代入

//文字列dの中に1から9の任意の値がなければnullが帰ってくる
//strは少なくとも12.jpgではないと言えるので

if((d.match(/[1-9]/g))==null)
{
alert("12.jpgの候補だ");
}else{
alert("12.jpgではない");
}
}
こんな感じで絞り込めました。
後は、imgとかの違いや、0の数での違いをどう処理するかかなと
思いますが、、
255デフォルトの名無しさん:2010/06/06(日) 14:18:33
すみません。以下訂正します

誤//strは少なくとも12.jpgではないと言えるので
正//strは少なくとも複数の0と12.jpgからなる文字列だといえるので
256デフォルトの名無しさん:2010/06/06(日) 15:07:04
>>250
n=Number("IMG00000012.jpg".match(/\d+/)[0]);
alert(n);
で検証しました。確かに12ですね。
\d+:任意の数値の1回以上の表現
これで、00000012が配列として抽出される
で、問題は[0]ですが、
これは、もしかして配列の0番ということですか?
こんな使い方が出来るとは知りませんでした。

この手法だと、直接値を比較できますね。
ありがとうございました!!
257デフォルトの名無しさん:2010/06/06(日) 15:50:34
リファレンス嫁

https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/String/match
>正規表現が g フラグを含んでいない場合、regexp.exec(string) と同じ結果を返します。
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp/exec
>[0] 最後にマッチした文字

配列じゃなくてプロパティ
厳密には配列もプロパティの集まり
つーかjsスレ(ry
258デフォルトの名無しさん:2010/06/06(日) 16:42:14
>>257
すみませんでした(平謝り)
上記リファレンス、頭から読み直します。
ありがとうございました。
259デフォルトの名無しさん:2010/06/11(金) 23:05:13
質問させてください。
●正規表現の使用環境 - Mery(エディタ、鬼車ライブラリ)
●説明 - 連続する同じ内容の2行にマッチ、3行以上の部分にはマッチさせない
●対象データ
ABCD
ABCD
EFGH
EFGH
EFGH

●希望する結果
ABCDの2行のみマッチ、EFGHの2行のところ(2箇所)はスルーして欲しい。
---
否定先読みと否定戻り読みを同時に使ってみたところ、
たぶん否定戻り読みの\1の参照が変なため上手くいきませんでした。こんな感じ。
(?<!\1)(^.+\n)\1\1(?!\1)
260259:2010/06/11(金) 23:08:36
>>259
すみません。例では「\1」が1個多すぎました。
× (?<!\1)(^.+\n)\1\1(?!\1)
○ (?<!\1)(^.+\n)\1(?!\1)

…どっちみちダメな例ですが、いちおう。。
261デフォルトの名無しさん:2010/06/12(土) 04:20:30
捕獲集合より前に参照使おうとしてるからダメ。
鬼車では>>259の問題は解けないと思う。

こういう前方からの参照ができる正規表現エンジンってあるの?
262デフォルトの名無しさん:2010/06/12(土) 10:25:24
マッチ部分が必要な2行のみにしたいのなら難しい(というかできるか
どうか俺もわからん)けど、そういう行を抽出したいだけなら前の1行も
マッチさせてしまえばいいんじゃね?

$str = <<__STR__;
ABCD
ABCD
EFGH
EFGH
EFGH
__STR__

$re = qr{
(?:
¥A
|
(^.+¥n)
(?!¥1)
)
(
(^.+¥n)
¥3
)
(?!¥3)
}xsm;

while ($str =~ /$re/g) {
print "<<<¥n$2>>>¥n"
}
263259:2010/06/12(土) 13:32:11
>>262
どうもありがとう! それで上手くいきました。

が、便乗ですみませんが、よろしければもう1つ質問させてもらえますか。
>>262の非捕獲式集合 "(?:)" を消そうと思うと上手くいきません。

"(?:)" を"()" に変え、 後方参照が1つ増えたので、"\3" を "\4" に変えると
同じものになるはずだと思うのですが。。

○ (?:\A|(^.+\n)(?!\1))((^.+\n)\3)(?!\3)
×  (\A|(^.+\n)(?!\1))((^.+\n)\4)(?!\4)
264259:2010/06/12(土) 13:43:31
>>263
cf.
無理矢理ほんの少しだけ見やすくしてみました。

○ --- (?: \A|(^.+\n)(?!\1) )  ( (^.+\n)\3 ) (?!\3)
× ---  ( \A|(^.+\n)(?!\1) )  ( (^.+\n)\4 ) (?!\4)
265デフォルトの名無しさん:2010/06/12(土) 14:03:18
( \A|(^.+\n)(?!\2) )  ( (^.+\n)\4 ) (?!\4)
266259:2010/06/12(土) 14:50:02
>>265
!!!!!!
!!!!!!

…かなり長時間悩んでいたので、信じられないくらいすっきりした。
ありがとう。
267デフォルトの名無しさん:2010/06/13(日) 09:25:15
((^.+¥n)¥2)(?<!^¥2¥2¥2)(?!¥2)

というのを試してみたら可変長戻り読みでエラーになっちゃった。
これ戻り読みするときには¥2は確定してるんだからなんとかならん
のかなぁ。
268デフォルトの名無しさん:2010/06/17(木) 03:14:38
まぁまぁ初心者なんだが、
/aaa/ ・ /aaa bbb/ と2回やるのと、/aaa( bbb)[0,1]/ とまとめるのでは、
一般的に言ってどっちが速い・軽い・負担少ないの?
対象データとの兼ね合いもあるだろうが、どっちの方が好ましいの?
269デフォルトの名無しさん:2010/06/17(木) 03:18:12
後者じゃないの。
10万回くらい回すテストプログラム作ってみたらいいと思う。

あと、/aaa( bbb)[0,1]/じゃなくて/aaa( bbb){0,1}/ね。
もっと言うと/aaa( bbb)?/の方が簡潔。
270デフォルトの名無しさん:2010/06/17(木) 03:19:36
訂正
×: /aaa( bbb)[0,1]/
○: /aaa( bbb){0,1}/
271デフォルトの名無しさん:2010/06/17(木) 03:21:17
おっとすれ違った。ありがとう

>/aaa( bbb)?/
なるほど!
272デフォルトの名無しさん:2010/06/19(土) 15:08:05
perlスクリプト中に含まれる

use utf8;
use encoding "cp932";
use encoding 'euc-jp';
use   encoding   "iso-8859-2";

などの文にマッチして、「utf8」「cp932」「euc-jp」「iso-8859-2」の部分のみ取り出したいのですが
一発でできる方法があったら教えてください。
273デフォルトの名無しさん:2010/06/19(土) 15:11:49
248です。先日はありがとうございました。
アルファベット+数値.jpgのパターンはうまく認識するコードができました。
ただ新たな問題も発生しました。以下のようなパターンです。
日本語の文字化けと、スペースがあるパターンでは、数値を正確に拾えませ
んでした。

画像_000012.pg
%E7%94%BB%E5%83%8F_000012.jpg

画像 000012.jpg
%E7%94%BB%E5%83%8F%20000012.jpg

画像 000012.jpg
%E7%94%BB%E5%83%8F%E3%80%80000012.jpg
文字化け部分を無視して、数字の部分だけを検出する方法を得たいのですが
どうしたらよいでしょうか?

日本語とスペースの部分は(%..)*と、まとめられますが
これを除いた数値部分\d+だけをマッチの対象としたい場合
以下の表現でよいでしょうか?

(?:(%..)*)\d+
274デフォルトの名無しさん:2010/06/19(土) 15:19:55
>>272
| を使えばまあ1つにはできるだろうけど
275デフォルトの名無しさん:2010/06/19(土) 21:03:30
>>272
^use\s+(encoding\s+)(?(1)["']|)(.*?)\2;$

こうですか?分かりません><
276デフォルトの名無しさん:2010/06/23(水) 05:14:30
●正規表現の使用環境
秀丸 または AHK

●検索か置換か?
検索 / grep

●説明
テキストファイルを複数キーワードで検索したい
(通常のウェブ検索のようなものを正規表現で行いたい)

●対象データ
text1 [tag1][tag2]
text2 [tag2][tag1]
text3 [tag2]
text4 [tag3][tag1]
text5 [tag3]
text5 [tag1][tag3][tag2]

●希望する結果
[tag1] および [tag2] で検索した場合、以下がヒット

text1 [tag1][tag2]
text2 [tag2][tag1]
text5 [tag1][tag3][tag2]
277276:2010/06/23(水) 05:15:20
どなたか >>276 についてアドバイスをいただけないでしょうか。
宜しくおねがいいたします。
278デフォルトの名無しさん:2010/06/23(水) 09:06:03
\[tag(1|2)\]
279デフォルトの名無しさん:2010/06/23(水) 09:50:32
[tag1] と [tag2] 両方含む行を拾いたいんじゃまいか

>>276
(?=.*\[tag1\])(?=.*\[tag2\])
ただ秀丸の正規表現が先読みに対応してないと動かない
280デフォルトの名無しさん:2010/06/25(金) 00:09:27
>>279
ありがとうございます。試してみたところ、秀丸では動きませんでした。
先読みには対応しているようなので、何か別の工夫がいるのかもしれません。
秀丸スレで質問してみます。
281 ◆/91kCCQXBo :2010/06/25(金) 00:53:42
((.*tag2.*)(.*tag1.*))|((.*tag1.*)(.*tag2.*))
282デフォルトの名無しさん:2010/06/25(金) 17:47:50
>>280
(?=.*\[tag1\])(?=.*\[tag2\])
でも
^(?=.*\[tag1\])(?=.*\[tag2\])
で動いたぞ。ただ、実際に0文字にマッチしているので、
範囲としては見えない。分かりやすいのがよければこれだな:
^(?=.*\[tag1\])(?=.*\[tag2\]).*
283デフォルトの名無しさん:2010/06/27(日) 22:26:13
●正規表現の使用環境
VBScript

●検索か置換か?
置換

●全角英数字を全て半角英数字にしたい
1文字1文字Case文でそれぞれを置換するしか方法ないですかね?
284デフォルトの名無しさん:2010/06/28(月) 18:11:55
正規表現じゃ無理。StrConvでググリなさい。
285デフォルトの名無しさん:2010/06/28(月) 18:17:06
ていうかマルチポストしてんならそう書きなさい。
あと死んでください。

Excel VBA 質問スレ Part15
http://pc12.2ch.net/test/read.cgi/tech/1271261239/692
286デフォルトの名無しさん:2010/06/29(火) 19:29:23
●正規表現の使用環境
Perl

●検索か置換か?
置換

●説明
文章の全部のurlを下記のように”&”のあとを削除したい

●対象データ
ttp:\\www.example.com\c?ro=1&act=rss&output=no
......

●希望する結果
ttp:\\www.example.com\c?ro=1
......
287デフォルトの名無しさん:2010/06/29(火) 20:53:29
/&.*//
288デフォルトの名無しさん:2010/06/29(火) 21:04:22
一行にURLだけしか入ってなければそれでもいいのだが
289デフォルトの名無しさん:2010/06/30(水) 12:21:22
秀丸エディタとかでちょっと正規表現使った置換とかしたい時に
\fで区切ってたんだけど、要素が10以上になるとうまく指定できない……
290デフォルトの名無しさん:2010/07/01(木) 18:35:23
自己解決
291デフォルトの名無しさん:2010/07/04(日) 23:25:25
●正規表現の使用環境
JavaScript

●検索か置換か?
置換

●説明
「サーバー」を「サーバ」に置換したい
「サーバーサイド」「サーバー設定」は除外したい

●対象データ
つまりサーバーのあれこれ
しかしサーバーサイドのなんたら
なお、サーバー設定は云々

●希望する結果
つまり、サーバのあれこれ
しかしサーバーサイドのなんたら
なお、サーバー設定は云々
292デフォルトの名無しさん:2010/07/04(日) 23:59:32
サイドと設定以外のサーバーを全部サーバにするってことかな?

.replace(/サーバー(?!(サイド|設定))/g,"サーバ")
293デフォルトの名無しさん:2010/07/05(月) 08:15:02
>>292
そうです。ありがとうございました!

梟で勉強します!
294デフォルトの名無しさん:2010/07/05(月) 14:04:37
梟より最近出た料理本の方があんたのような人間には良いんじゃないか。
295デフォルトの名無しさん:2010/07/05(月) 15:59:11

こういう皮肉を言う人間にはなりたくないな。
296デフォルトの名無しさん:2010/07/05(月) 16:37:34
どこが皮肉なんだろ?
おれも >>291 にはクックブックの方がいいと思うけど。
297デフォルトの名無しさん:2010/07/05(月) 18:12:56
>>1は料理本が出る前のテンプレだよなあ。
このスレの質問は、初心者ばかりだから、梟じゃわけわからんことが多いだろう。
298293:2010/07/05(月) 19:29:54
おっしゃる通り、初心者です
梟本は持ってるんですが、確かに難解で中々身についてる感じがしないです
専門書と言うか辞書を読んでる感覚で頭で分かったつもりになるだけと言うか…

料理本、よろしければURLか正式タイトル教えて頂けませんか?

299デフォルトの名無しさん:2010/07/05(月) 20:09:02
正規表現クックブック
http://www.oreilly.co.jp/books/9784873114507/

いろんな実例が載ってるから便利でいいと思うよ。
300298:2010/07/05(月) 20:53:05
>>299
買いました!
これのが易しそうですね
ありがとうございます

皆さんはハンドブックやクイックリファレンスみたいなの持ってますか?
301デフォルトの名無しさん:2010/07/05(月) 22:33:53
持っていない。
料理本も他人に推奨しながらまだ買ってないし、梟も2版だけどね。

3版で2版にない良いところがあったら教えてほしいとこr。
302デフォルトの名無しさん:2010/07/05(月) 22:37:51
フクロウ本で否定の先読みが出てくるのって2章じゃないか
難解とかいう以前に読んでないんだろう
303デフォルトの名無しさん:2010/07/06(火) 23:49:53
質問です
●正規表現の使用環境
JavaScript

●検索か置換か?
置換

●説明
「チョコレート」を「チョコ」に置換したいです
でも「板チョコレート」「バレンタインチョコレート」はヒット(置換)させたくないです

●対象データ
やはり板チョコレートよりも
バレンタインチョコレートよりも
自分で買うチョコレート!

●希望する結果
やはり板チョコレートよりも
バレンタインチョコレートよりも
自分で買うチョコ!


(!(バレンタインチョコレート|板チョコレート)チョコレート),チョコ/g
…ダメです。やっぱ難しいです。
304デフォルトの名無しさん:2010/07/07(水) 00:04:27
(?<!板)(?<!バレンタイン)チョコレート
305276:2010/07/07(水) 00:36:58
久しぶりに戻ってきて、続きのコメントがあったことに気付きました。
>>282 さんがおっしゃる通りでした。0 文字マッチで動いてたんですね。
結局最後のものを使わせていただきました。
ありがとうございました。
306303:2010/07/07(水) 12:28:01
>>304
上手くいきません
「<」って、どう言う意味なんですか?

307デフォルトの名無しさん:2010/07/07(水) 13:14:47
この先生き残る、の逆verかw
308デフォルトの名無しさん:2010/07/07(水) 14:08:25
>>306
JavaScriptは戻り読み使えないのか。ごめん
(?<!...) で否定の戻り読み。「左に"板"も"バレンタイン"もない"チョコレート"」って意味

これならどうだろ

var s = "やはり板チョコレートよりも\nバレンタインチョコレートよりも\n自分で買うチョコレート!";
s..replace(/(板|バレンタイン)?チョコレート/g, function(str, p0){ return p0 ? str : 'チョコ'});

https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Regular_Expressions
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/String/replace
309デフォルトの名無しさん:2010/07/07(水) 17:39:20
行頭のひとつ、または連続するスペースの
それぞれひとつひとつを全て検索対象にする
(連続したものをひとまとまりとして扱うのではなく。そして文中のスペースは対象にしない)
には、どう書けばいいですか?
310デフォルトの名無しさん:2010/07/07(水) 18:33:14
自己解決しました
311デフォルトの名無しさん:2010/07/07(水) 18:46:20
どんな風に解決したか書いてくれよ。
312309:2010/07/07(水) 19:30:22
>>310は自分じゃないけど
でも実際自己解決しました
解決って、その通りのことができたわけじゃないんだけど
やろうとした目的は果たせたんで、おkとします

>>310さん、せっかくすばらしい人間性を披露してくださったのに
あなたがワクワク期待してたような反応してあげられなくて、ごめんなさい
313デフォルトの名無しさん:2010/07/07(水) 19:34:21
つか報告だけなら来なくていいよ。
314デフォルトの名無しさん:2010/07/08(木) 09:42:56
>>308
動かないっす(;´Д`)
ブラウザはFF

JavaScriptに限らずVBscriptでも動けばいいと思ったんですが
厳しそうですね…

これって、やろうとしてる事は前方参照否定になるんですかね?
315デフォルトの名無しさん:2010/07/08(木) 13:16:00
>>314
x s..replace
o s.replace
316デフォルトの名無しさん:2010/07/08(木) 17:54:33
●正規表現の使用環境
PHP5

●検索か置換か?
検索

●説明
[[ と ]] に囲まれた文字列を配列で取得したい

●対象データ
[[hare]][[ame]][[kumori]][[yuki]][[]][[kaminari]][[taifuu]]

●希望する結果
matches[0] = hare
matches[1] = ame
matches[2] = kumori
matches[3] = yuki
matches[4] =
matches[5] = kaminari
matches[6] = taifuu

よろしくお願いします。
317デフォルトの名無しさん:2010/07/09(金) 07:36:38
最近、正規表現ってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?
318314:2010/07/09(金) 08:25:23
>>308,315
ありがとう!
でも正規表現だけだと、無理って事?


>>317
君は知る必要ないね
一般事務職でも使うケースはあるけど
ワイルドカードだけ取り敢えず覚えておいては?
と、正規表現初心者の俺が(ry
319デフォルトの名無しさん:2010/07/09(金) 10:43:04
MS-DOS時代の人間なんで
ワイルドカード(*、?だけですけど)の使い方は分かってます。
320デフォルトの名無しさん:2010/07/09(金) 11:22:26
正規表現を使うソフトと出会ったら勉強すればいい。
出会ってもないのに知る必要はないと思う。
321デフォルトの名無しさん:2010/07/09(金) 15:36:10
正規表現とワイルドカードを一緒くたにすると
怖いお兄さん(お姉さんも可)に怒られるからよい子は注意な
322デフォルトの名無しさん:2010/07/09(金) 18:26:02
心配するな。
ここで正規表現って騒いでるやつも知らないから。
その証拠にワイルドカードぐらいしか言えないだろ?w
323デフォルトの名無しさん:2010/07/09(金) 20:39:02
ドロー4!
324名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:01:52
最近、SQLってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?
325名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:03:32
最近、HTMLってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?
326名無しさん@そうだ選挙に行こう:2010/07/10(土) 18:51:05
最近、クラウドコンピューティングってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいに頭がクラウドな香具師は知らなくても無問題でしょうか?
327名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:53:00
企業がマスゴミをだますときに使う

っつーかスレ違い
328名無しさん@そうだ選挙に行こう:2010/07/10(土) 21:49:10
正規表現を導入することでミッション クリティカルなシステムから
モバイル アプリケーションまで対応できる高い信頼性を備えた
アプリケーションを構築することができます。
正規表現で企業内に存在する多数のデータを統合し、全社員がデータを活用できる
ビジネス インテリジェンス基盤として堅牢で実績のあるハイパーバイザーを構築し
不要なリスクやオーバヘッドを回避できます。
正規表現の仮想インフラストラクチャ機構にはデータを安定して管理するさまざまな機能はもちろん、
データを活用・分析する機能まで、すべての機能がオールインワンで備わっているます。
高いスケーラビリティとバランスのとれたトータルクオリティーを活用することにより
あなたの快適ライフをサポートします。
329名無しさん@そうだ選挙に行こう:2010/07/10(土) 21:58:55
OBICの中の人乙
330名無しさん@そうだ選挙に行こう:2010/07/11(日) 09:29:54
>>328
ユーのランゲージはファンタスティックね
331名無しさん@そうだ選挙に行こう:2010/07/11(日) 10:15:52
ルー柴乙
332デフォルトの名無しさん:2010/07/14(水) 22:16:49
●環境
vb.net

●したいこと
3文字以上の繰り返し表現を抽出

●サンプル
例文1)死にたい死にたい死にたい死にたい死にたい
結果1)死にたい

例文2)筋肉バスターと阿修羅バスター
結果2)バスター


ってのを正規表現でやるのは無理でしょうか・・・
333デフォルトの名無しさん:2010/07/15(木) 00:06:01
例文3) 阿修羅像と筋肉バスターと阿修羅バスターとジェットコースター

こういうときはどういう結果になって欲しいの
処理系側に頼るにしてもあんまりロジック考えたくない
334デフォルトの名無しさん:2010/07/15(木) 00:54:48
>>332
英語ならともかく日本語じゃ無理じゃないか
形態素解析 単語 頻度 なんかでぐぐるといいかも
335デフォルトの名無しさん:2010/07/15(木) 03:49:25
>>333
>  阿修羅像と筋肉バスターと阿修羅バスターとジェットコースター

「阿修羅」
「バスターと」
じゃね?
336デフォルトの名無しさん:2010/07/15(木) 04:52:36
部屋とYシャツと私
337デフォルトの名無しさん:2010/07/15(木) 07:44:51
ヘアとワイセツとタワシ
338デフォルトの名無しさん:2010/07/15(木) 08:16:33
女子高生と機関銃と私
339デフォルトの名無しさん:2010/07/15(木) 09:16:17
中国と韓国と北朝鮮
340デフォルトの名無しさん:2010/07/17(土) 10:14:07
>>316
phpならsplit("\]\]\[\[", str)で配列に分割して
最初と最後の要素から"[["と"]]"を取り除いた方が早いんじゃない?
正規表現にこだわる理由は何だろう

>>339
処理結果:特定アジア
341デフォルトの名無しさん:2010/07/17(土) 10:53:38
'[[hoge]] fuga [[piyo]]' みたいな入力に弱いのと直感的じゃないからじゃまいか
できれば「文字列を左から走査していき「[[ と ]] に囲まれた文字列」を
すべて拾い上げる」ように書きたいところ

というわけで preg_match_all に "\[\[(.*?)\]\]" を渡すとかどうだろ
PHP知らないんで適当だが
342デフォルトの名無しさん:2010/07/17(土) 12:05:18
>316です。
ありがとうございます。
実際には
[[hoge]]今日は[[fuga]]いい[[tenk]]天気です
みたいに間に文字は入るので、正規表現でしか出来ない(効率の面で)と判断しました。
この中のhoge、fuga、tenkiのみを配列の中に入れたかったのです。
結局preg_match_allで "/\[{2}[0-9A-Za-z]*\]{2}/"とする事で解決しました。
343デフォルトの名無しさん:2010/07/18(日) 02:24:03
>>335
「スター」は抽出しないのか?
344デフォルトの名無しさん:2010/07/18(日) 02:30:15
>>343
それを抽出するなら「スターと」「ターと」も必要じゃないか?
345デフォルトの名無しさん:2010/07/18(日) 02:38:40
ちゃんと作ったらもっと色々でてきそうだなw
346デフォルトの名無しさん:2010/07/26(月) 18:08:06
/**
 コメント
**/
// コメント

上記のコメント箇所で、コメント内の各一文字を「_」に置き換える方法はあるでしょうか?
コメント行を削除せずに、一度コメントを省いてからソース検索をしたいと思っておりまして。

____↓
_____↓
____↓
_______↓
347デフォルトの名無しさん:2010/07/26(月) 18:12:00
/\/[\/*].+(\n|*\/)/_/s
348デフォルトの名無しさん:2010/07/26(月) 18:15:53
実際のプログラムだと運がよければできるぐらいだな。
コメントかどうか判断がつきにくい文字列リテラルとか
あるんで病的なケースに完全に対応するのは難しい。
多少誤爆があってよければ適当にやりゃできるだろ。

正規表現といっても使い方はエディタや言語によって
違うので何を使ってやりたいかを決めてそっちのスレで
聞いたほうがいいかも。
349デフォルトの名無しさん:2010/07/26(月) 18:16:18
>>346
while ((c=getchar()) != EOF) {
if (c == '/') {
c = getchar();
if (c == '/') {
putchar('_');putchar('_');
while (c=getchar()) != '\n') putchar('_');
} else if (c == '*') {
LOOP:
putchar('_');putchar('_');
while (c=getchar()) != '*') putchar('_');
if ((c=getchar()) != '/') goto LOOP;
putchar('_');
}
}
putchar(c);
}
350デフォルトの名無しさん:2010/07/26(月) 19:09:53
>>349
ありがとうございます。
正規表現だけではできないですかね…
351デフォルトの名無しさん:2010/07/26(月) 19:15:36
正規表現ってマッチするだけだからねー。
352デフォルトの名無しさん:2010/07/27(火) 10:00:25
>>351
あ、すみません。
正規表現とリプレイスの組み合わせでできないですかね?

以前どこかのサイトで見かけたことがあったのですが、
場所忘れ&これを実現した正規表現だったか覚えていなくて…
353デフォルトの名無しさん:2010/07/27(火) 11:45:54
>>347
これだと1コメントで「_」になってしまいます。
コメントが10文字ある場合は「_」も10個ほしいです。
先読み、戻り読みを駆使してうまくやっていたような気がしたんですが、
すみません、思い出せないです。
354デフォルトの名無しさん:2010/07/27(火) 12:01:28
PHPならpreg_replaceとかあるが・・・。
355デフォルトの名無しさん:2010/07/27(火) 12:09:56
検索にひっかからなくするという目的なら1文字になっちゃってもいいと
思うんだけどね。不必要に問題を複雑にしてるような。
356デフォルトの名無しさん:2010/07/27(火) 14:23:36
(//|\G).+?(?=.*$)でうまくいくと思ったがちょっとおかしい

a // b  で
a ____   になると思ったが
______   になってしまう

なぜ\Gが行頭に引っかかるのだ!
ちなみにjavaです
357デフォルトの名無しさん:2010/07/27(火) 19:15:52
いや \G は文字列先頭にもマッチするもんだろう。
358デフォルトの名無しさん:2010/08/02(月) 11:52:25
>>346
「コメントを省いてからソース検索」するのが目的なのに
「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
他に目的があるのなら全部書き出して最終的に何がしたいか明示すべき
359デフォルトの名無しさん:2010/08/02(月) 13:23:24
>>358
そうですねf^^;

やりたいことはソース中の文字列で日本語コメントを抽出です。
その際、検索結果の行番号を元のソースに合わせたいです。
複数行コメントをカットしてしまうとずれが生じるので、全てスペース(改行は変換せず)を考えています。

かなり前にこのスレッドで答えをもらったと思うのですが、それを忘れてしまいまして
360デフォルトの名無しさん:2010/08/02(月) 17:24:38
>>359
> その際、検索結果の行番号を元のソースに合わせたいです。

「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
361デフォルトの名無しさん:2010/08/03(火) 15:50:50
仕様がわからない状態でコーディングはできない
362デフォルトの名無しさん:2010/08/03(火) 17:33:47
自分が何をしたいのか、を他人にうまく伝えられない人
363デフォルトの名無しさん:2010/08/03(火) 17:40:10
>「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
わからんのなら、おとなしくすっこんでろよw
仕様は>>346で明確に示してあるだろ。これ読んでもわからんの?
わかる人が答える。わからない人は指をくわえて黙って見ている。
これが掲示板の作法だろ。
364デフォルトの名無しさん:2010/08/03(火) 17:45:16
>>346だけ読んで理由がわかったらエスパーすぎる

行番号を維持するだけでなく桁数/文字数も維持したいのだろう
365デフォルトの名無しさん:2010/08/03(火) 20:10:42
エスパーも何も、これ以上わかりやすい説明は無いと思うが
366デフォルトの名無しさん:2010/08/03(火) 20:47:16
せめて文字列リテラル中にコメントと紛らわしい文字列は
ないぐらいは仮定しないととんでもなく難しい気がするな。

あとこういうのを間違わずにやろうとすると結構大変。

// hogehoge /* hogehoge
/* hogehoge
// hogehoge */ hogehoge
367デフォルトの名無しさん:2010/08/04(水) 07:41:17
>>362
むしろ自分が何をしたいのかさえ自分で理解できていないレベル
368デフォルトの名無しさん:2010/08/04(水) 07:48:43
>>366
コメントについてはネストしたものを正規表現だけで取り扱うのは不可能と
「詳説 正規表現」に書いてあるけどな
その例はネストしていないけど
369デフォルトの名無しさん:2010/08/04(水) 11:49:47
>>368
そんなもん複数行モードで(/\*.*?\*/|//.*$)だろ…
ここで質問した俺が馬鹿だった
それじゃ一生答えが導けないよ
370デフォルトの名無しさん:2010/08/04(水) 11:56:56
/* ここからコメント /* ネスト */ ここもコメント */

こういうのをなんとかするのは普通の正規表現の範囲では無理。
371デフォルトの名無しさん:2010/08/04(水) 12:02:01
文字列中に改行があってもマッチさせることは正規表現で可能でしょうか?

例えば something を検索したいとすると
some\nthing、so\nmething, someth\ning などもマッチした、と判定したいんです。

今はこんな感じで処理しています。
「改行の位置を記憶→改行を全削除→文字列のマッチ→改行をもう一度挿入」
これが正規表現でできると楽になるので方法がわかる方いたらどうか教えてください。

使っている言語はJAVAですが、
他の言語の正規表現でもできるかどうか教えてもらえると助かります。
372デフォルトの名無しさん:2010/08/04(水) 12:38:56
>>369
それで適当な固定文字列に置き換えるだけなら簡単なんだけど
文字数を保存して間を_にしたいとかいうから面倒なわけです。

perlならeval使えるから加工するプログラム書けば一発ですが、ただの
エディタの置換機能だとそうもいかん場合も多いんじゃねーの? 何を
使ってるのかも示されてないのでなんともいえんけどさ。

$str = qq{
// hogehoge /* hogehoge
/* hogehoge
// hogehoge */ hogehoge
};

$str =~ s%(/\*(.*?)\*/)|(//([^\n]*))%($1 ne '')? ('/*'.to_underscore($2).'*/'): ('//'.to_underscore($4))%gse;

print $str;

sub to_underscore {
my($s) = @_;

$s =~ s/\S/_/g;

return $s;
}
373デフォルトの名無しさん:2010/08/05(木) 07:56:23
>>369
要求仕様を先に確認しろ

>>371
処理系のよっては改行文字を無視するモードがある
Javaはどうだったかな
374デフォルトの名無しさん:2010/08/05(木) 09:10:16
>>371
perlなら
undef $/
だったかな
375デフォルトの名無しさん:2010/08/05(木) 09:17:10
>>371
s\n?o\n?m\n?e\n?t\n?h\n?i\n?n\n?g
376デフォルトの名無しさん:2010/08/05(木) 10:42:50
ふざけないでください
377デフォルトの名無しさん:2010/08/10(火) 22:29:01
Perlで前方一致の中に正規表現を使うことってできますか?
/(?<=.*_number=)\d*/のような感じでやりたいのですが・・・
378デフォルトの名無しさん:2010/08/10(火) 23:25:35
>>377
やって見りゃVariable length lookbehind not implementedになるのはすぐわかるだろ。
この例だと.*は余計なので取り除いて /(?<=_number=)¥d*/ にすればいいと思うが。

379デフォルトの名無しさん:2010/08/11(水) 06:32:21
>>378
ありがとうございます、できないんですね・・・
では、/(?<=x_.*_number=)\d*/のように書きたい場合は他に書き方はあるでしょうか?
380デフォルトの名無しさん:2010/08/11(水) 07:10:06
\d*を見つけられればいいって感じなら
/(x_.*_number=)(\d*)/
みたいにすれば?
381デフォルトの名無しさん:2010/08/11(水) 07:17:20
>>380
ありがとうございます。
\d*を見つけるだけでなく、$&に取り出したいです。
382デフォルトの名無しさん:2010/08/11(水) 08:39:22
perlなら¥K使えば?

perl -e '"x_hoge_number=100"=~/x_.*_number=¥K¥d*/ and print $&'


383デフォルトの名無しさん:2010/08/11(水) 13:52:06
$&じゃなきゃダメなの?数字欲しいだけなら
/x_.*_number=(\d*)/
で$1見るのが楽チンな気がするんだけど。
384デフォルトの名無しさん:2010/08/11(水) 20:18:38
>>382
>>383
数字だけ取り出せれば良かったので$1を使うことにしました。
ありがとうございました。
385デフォルトの名無しさん:2010/08/13(金) 17:59:53
●正規表現の使用環境
.net Framework 2.0 - 3.5 (C#)

●検索か置換か?
検索

●説明
artist, titleの各グループの文字列を取得したい

●対象データ
Artist - Title

●希望する結果
artist = Artist
title = Title

よろしくおねがいします。
386デフォルトの名無しさん:2010/08/13(金) 18:44:28
正規表現の詳しいサイトとか知りませんでしょうか?
ずぶの素人なので、どこのサイトで勉強したら良いのか分りません。
387デフォルトの名無しさん:2010/08/13(金) 18:55:38
適当なテキストエディタ入れて適当な正規表現解説サイト見て
適当に入力して試してたら数分で理解できるよ
388デフォルトの名無しさん:2010/08/13(金) 19:12:44
>>387
適当厨ww
389デフォルトの名無しさん:2010/08/13(金) 19:16:28
右も左もわからないんならテンプレのここでいいんじゃないか
http://funcchan.blog16.fc2.com/

>>385
こういうこと?
違ってるならもっと具体的な入力データとほしい結果の例を挙げて

using System.Text.RegularExpressions;
...
string[] words = Regex.Split("Artist - Title", " - ");
string artist = words[0];
string title = words[1];
390デフォルトの名無しさん:2010/08/13(金) 21:04:02
>>389
Artist, Album, Titleが含まれている文字列からそれらを正規表現で抽出したいです。
例えば
山田耕筰 - 赤とんぼ

(?<artist>.*?) - (?<title>.*?)
みたいな感じで。
元の文字列がどういう形式か不定なので、Splitはあまり使いたくないのですが・・・
391デフォルトの名無しさん:2010/08/13(金) 21:18:42
Artist や Title に ' - ' が含まれたりする形式だと困るよね。
392デフォルトの名無しさん:2010/08/13(金) 21:44:27
うん、" - " がフィールドの区切りとして使えないのなら無理じゃない?
それぐらいは保証されてると思って>>389を書いた

自分だったら " - " が文字列に2つ以上入ってたら不正な入力として受け付けないか
許される状況であれば脇によけておいて後で手作業で処理するよ
393デフォルトの名無しさん:2010/08/13(金) 21:44:49
それは人間が見ても判別困難ですし、考慮していません。
とりあえず
(?<artist>.*) - (?<title>.*?)
にしたところ希望の動作は得られましたが、
Artist - Title
そのものがグループ(グループ名なし)として抽出されています。
これは解決できますか?
394デフォルトの名無しさん:2010/08/13(金) 21:47:02
よくわかんないから C# のコード貼ってちょ
395デフォルトの名無しさん:2010/08/13(金) 21:47:19
おっと、>>393>>391宛です。
396デフォルトの名無しさん:2010/08/13(金) 21:47:59
>>393
解決って何よ
希望の動作したならそれで十分でしょ
397デフォルトの名無しさん:2010/08/13(金) 21:52:21
>>396
おっしゃる通りなんですけど、なんか気になるので。

>>394
一応ソースです。

//source = "山田耕筰 - 赤とんぼ"
//expression = "(?<artist>.*) - (?<title>.*?)"
Match match = expression.Match(source);
Group group;

group = match.Groups["artist"];
if (group == null)
{
  artist = string.Empty;
}
else
{
  artist = group.Value;
}
・・・
以下Groups["title"]、Groups["album"]について同様
398デフォルトの名無しさん:2010/08/13(金) 22:03:03
>>397
全体へのマッチはグループ指定してないからグループ名なしのマッチでいいじゃん
399デフォルトの名無しさん:2010/08/13(金) 22:26:13
それは仕様ですか?それともexpressionのせいでしょうか?
400デフォルトの名無しさん:2010/08/13(金) 22:41:39
仕様。ほかの言語も似たようなもの
ttp://msdn.microsoft.com/ja-jp/library/system.text.regularexpressions.groupcollection%28v=VS.95%29.aspx
> このコレクションには、1 つ以上の System.Text.RegularExpressions.Group
> オブジェクトが格納されています。一致が成功した場合、コレクションの
> 1 つ目の要素には、一致した文字列全体に対応する文字列が含まれます。

あと>>397の正規表現だと (?<title>.*?) は空文字列にマッチしてないかな
401デフォルトの名無しさん:2010/08/13(金) 23:03:41
>>400
なるほど、仕様なのですね。
確かに(?<title>.*?) は該当箇所が空の場合でもマッチしてます。
該当箇所が空の場合マッチさせないようにするには
(?<artist>.*) - (?<title>.*)
とすればOKでしょうか?
402デフォルトの名無しさん:2010/08/13(金) 23:07:29
*を+にすればいいんじゃね?
403デフォルトの名無しさん:2010/08/13(金) 23:26:07
>>402
(?<artist>.+) - (?<title>.+)
にしたらマッチしなくなりました。

動作上はこれで問題ありませんので、これにしようと思います。
今回は大変勉強になりました。
>>389-402のみなさん、ありがとうございました。
404デフォルトの名無しさん:2010/08/14(土) 06:50:19
質問があります。

私は、HTMLでホームページを作ったのですが、
titleタグをちゃんといれて作ったのですが
h1タグを入れるのを忘れてしまっていました。

そこで、各ページのh1タグに、それぞれのtitleタグと同じものを入れたいのですが
ホームページのページ数が1000以上なので、
多過ぎて大変です。

そこで、正規表現をつかって、うまく対処する方法を教えてください。
405デフォルトの名無しさん:2010/08/14(土) 06:59:32
stylesheet
406デフォルトの名無しさん:2010/08/14(土) 09:06:17
>>404
<title>(.*?)</title> で title のテキストを検索
あとは <body> を検索して <body><h1>$1</h1> に置換

わけわかんなかったら親切な人がスクリプト貼ってくれるのを祈る
407デフォルトの名無しさん:2010/08/14(土) 11:43:08
<?php
$path = "./";
$ext = ".html";
$insert_point = "<div class=\"hoge\">";

$d = dir($path);
while($f = $d->read()){
if(strpos($f,$ext) === FALSE)
continue;
$txt = file_get_contents($f);
if(preg_match('/<title>(.*)<\/title>/', $txt,$hits)){
$txt = str_replace($insert_point,"$insert_point\n<h1>$hits[1]</h1>",$txt);
if(!$fp = fopen($f,"w"))
continue;
fputs($fp,$txt);
fclose($fp);
}
}
?>
408デフォルトの名無しさん:2010/08/15(日) 14:26:57
拙い質問で申し訳ないのですが
現在、改行コードを含めた任意の文字列を"[\s\S]*"としているのですが
ブラケット中の最初の文字がマッチした場合、それ以降は評価しないとしたら
一般的な文章では"\s"よりも"\S"にマッチする文字の方が多いことを考えて
この場合"[\S\s]*"と直した方が速度は上がると考えて良いのでしょうか?
よろしくお願いします。
409デフォルトの名無しさん:2010/08/15(日) 15:12:35
実際に試してみた方が早いんじゃね?と言ってみる
410408:2010/08/15(日) 15:18:56
そうですか。
他で質問してみます。どうもありがとうございました。
411デフォルトの名無しさん:2010/08/16(月) 09:20:33
>>410
正規表現エンジンの動作を理解した方が早道
412デフォルトの名無しさん:2010/08/24(火) 14:01:49
●正規表現の使用環境
サクラエディタ

●検索か置換か?
検索

●説明
下記の条件で色分けのための選択をしたい

●対象データ
99999ACB コメント;以降構文

●希望する結果
行頭から10文字は半角数字もしくは文字
11と12は半角スペース
以降コメント(任意文字列)のあとにセミコロン

13桁目からセミコロンまでを指定したい。

(?<=.{13}).*;

かと思ったんだけどダメでした。
どう書けば良いんでしょうか…。
413デフォルトの名無しさん:2010/08/24(火) 15:02:31
>>412
(?<=.{12}).*?;
414デフォルトの名無しさん:2010/08/24(火) 15:11:05
ありがとうございます、できました。
たださっきまで適当に試行錯誤していて何故か

(?<=.{12}).*(?<=;)

でも出来ました。
いまいち意味を理解できずにできてしまったんですが

?; は最短マッチで一番早い;までという意味ですよね。

(?<=)

は検索しても全然わからないんですがマッチした文字より後ろ、という意味であってますか?
(?<=.{12}).*(?<=;)
だと12文字より後ろから何文字でも、のあとどういう意味になるんでしょう。
415デフォルトの名無しさん:2010/08/24(火) 19:39:31
> ?; は最短マッチで一番早い;までという意味ですよね。
最短マッチなら+?;や*?;

あと、(?<=)というか先読み・後読みは文字ではなく「場所にマッチ」

(?<=.{12}).*(?<=;)
→任意の文字12個の直後の場所から最後の";"の直後の場所に挟まれた
 任意の文字の0個以上の繰り返しにマッチする

例1)^はそれぞれの(?<=)でマッチする「場所」(実際は文字幅0)
123456789abcdefghijkl;mnop;qrst(対象)
↓ (?<=.{12}).*(?<=;)
123456789abc^defghijkl;mnop;^qrst → defghijkl;mnop;(マッチ結果)

例2)上の*を*?に変更しただけ
123456789abcdefghijkl;mnop;qrst(対象)
↓ (?<=.{12}).*?(?<=;)
123456789abc^defghijkl;^mnop;qrst → defghijkl;(マッチ結果)
416デフォルトの名無しさん:2010/08/25(水) 11:08:54
おお、なるほど場所にマッチという考え方なんですね。
ありがとうございます!
417デフォルトの名無しさん:2010/08/31(火) 00:21:19
●正規表現の使用環境
秀丸 8.0.2 b5

●検索か置換か?
検索

●説明
条件にマッチする行を指定数だけ抽出する

●対象データ
a hogehoge1
b hogehoge2
c hogehoge3
a hogehoge4
a hogehoge5
c hogehoge6
a hogehoge7
b hogehoge8

●希望する結果
"a " で始まる行を 3 つだけ表示させる
a hogehoge1
a hogehoge4
a hogehoge5

宜しくお願いします。
418デフォルトの名無しさん:2010/09/06(月) 16:08:36
色分けの正規表現で文字数を全角を2文字とカウントすることはできますか?
例えば
前50文字が数字であれ半角スペースであれ全角スペースであれ漢字であれ
51桁目からを色分けしたい場合
(?<=.{50}).*$
では全角文字があった場合その分51桁目よりもっと後ろが色分けされますよね?
419デフォルトの名無しさん:2010/09/06(月) 16:10:33
すみません、誤爆というかサクラエディタスレに書き込もうとして
やっぱりこっちにしようと思って文章修正し忘れしました。

●正規表現の使用環境
サクラエディタ

●検索か置換か?
検索

●説明
行の51ケタ目(51文字目ではない)からを色分けしたい

を付け加えて読んで下さい。
420デフォルトの名無しさん:2010/09/06(月) 16:29:39
全角文字の文字クラスと半角文字の文字クラスを50桁分並べた全ての順列を|で
並べれば原理的には可能だと思うけど、多分そんな大きな正規表現は扱えない
だろうなぁ。
421デフォルトの名無しさん:2010/09/07(火) 00:12:24
ほい
(?<=.{51}).+
422デフォルトの名無しさん:2010/09/07(火) 00:13:54
ごめん。書き込んだ瞬間に気づいた。
全半角を考慮しろってことね。
423デフォルトの名無しさん:2010/09/07(火) 08:49:37
全角と半角の文字幅を考慮して数える特別な書き方が用意されてないと
420のような方法でやるしか思いつかないな。ちょうどn桁の文字列に
マッチする正規表現をR(n)としたとき、

R(0) = 空
R(1) = 半
R(2) = (全R(0)|半R(1))
R(3) = (全(R(1)|半R(2))
...
R(n) = (全R(n-2)|半R(n-1))

と作っていくことができるだろう。ただし半,全はそれぞれ半角、全角1文字を
表す文字クラス。

これフィボナッチ数と同じパターンだからR(n)は a^n ぐらいの長さには
なりそうだな。n=50だと相当でかい。

もっとうまい書き方はあるだろうか?
424デフォルトの名無しさん:2010/09/07(火) 09:27:22
2バイト文字を考慮しないLANGで50文字マッチさせればいいんじゃない?
って書いてからサクラエディタ限定質問であることに気付いた_/ ̄|○
425デフォルトの名無しさん:2010/09/07(火) 09:46:47
正規表現で行うべきことでないのはたしか
文字幅なんて概念はないんだから
426デフォルトの名無しさん:2010/09/07(火) 10:58:29
ですよね、そもそも正規表現とは考え方が違うとは思ったんですが、
バイト数カウントみたいなものがもしあればと思って。
色々考えてもらってありがとうございます。
427デフォルトの名無しさん:2010/09/07(火) 11:22:23
utf-8なんかだとバイト数もあてにできんけど
428デフォルトの名無しさん:2010/09/07(火) 11:47:10
EOFまでのすべての文字をキャプチャしたいのですが、よろhしくお願いします。
(.*)$だと改行が含まれないとのことで・・
429デフォルトの名無しさん:2010/09/07(火) 11:53:50
>>428
「.」が改行含むかどうかって実装とかオプションで違うから何使ってるか
言わないとなんともいえんね。使ってる物の専用スレに行った方が
いいかもしれん。
430デフォルトの名無しさん:2010/09/07(火) 12:08:16
使ってるのはVBScriptです。そうですか、仮に改行\nを含まないと仮定すると
正規表現はどうすればいいんでしょうか。((.|\n)*)$こんな感じ?
専用スレ探してみます。
431デフォルトの名無しさん:2010/09/07(火) 12:29:07
MultiLine = False かな
432デフォルトの名無しさん:2010/09/07(火) 13:02:50
おお、MultiLineですか。
ありがとうございます。そのようなスマートな方法を探してたんです。
433デフォルトの名無しさん:2010/09/09(木) 08:05:34
perl -a
$a='a;b;c;'; $a=~s/.*?(;b|)//; print $a."\n";
$a='a;b;c;'; $a=~s/.*?(;b)//; print $a."\n";
$a='a;b;c;'; $a=~s/(.*?;b|)//; print $a."\n";
を実行すると、
a;b;c;
;c;
;c;
となりますが、何故最初の表現がこうなってしまうのか解りません
最短一致表現の直後に (〜|) がある場合、空の部分の方が先に処理されてしまうのでしょうか??
434デフォルトの名無しさん:2010/09/09(木) 09:05:33
>>433
| が解釈される順番が違う
1番目の表現は .*? を探した後に | の左にある ;b を探して、なければ右にある空文字列を探す
 →.*?は文字数0でもマッチするので文字列先頭の空文字列にマッチ
3番目の表現は最初に | の左にある .*?;b を探して、なければ右にある空文字列を探す
 →"a;b"にマッチ

自分が正規表現エンジンになったつもりで文字列の「最初から」マッチさせていくとわかりやすい
435デフォルトの名無しさん:2010/09/09(木) 09:15:10
訂正:
.*?は文字数0でもマッチ → .*?は文字数0にもマッチ
436433:2010/09/09(木) 15:07:36
なるほど ありがとうございます。
よく解りました。
437デフォルトの名無しさん:2010/09/09(木) 18:46:36
使用言語はjavascript。
独自のタグ(<A#...#A>)が設定されたテキスト行から、このタグを取り除きたい。
テキスト行中にタグが複数出てくることもあり。

置換前 : あいうえお <A#かきくけこ#A> さしすせそ <A#たちつてと#A> なにぬねの

置換後 : あいうえお さしすせそ なにぬねの


どうやったらいいですかあああああボスケテーーー!!!
438437:2010/09/09(木) 19:00:10
while((string = string.replace(/<A#.*#A>/, '')) == false){};

結果 : あいうえお なにぬねの

イケるかと思ったらダメだったでござる。
gオプションを付けなかったら、左から一致した一個を置換だと思ってたのに…
439デフォルトの名無しさん:2010/09/09(木) 19:03:04
.*じゃ全部食われちゃうだろ。.*?にすればいいと思う。
440437:2010/09/09(木) 19:15:04
>>439
即答イカす!ありがとう!!

while(string.match(/<A#.*?#A>/) != null){ string = string.replace(/<A#.*?#A>/, ''); }

でとりあえずできた


string = string.replace(/<A#.*?#A>/, ''); の戻り値はtrue/falseじゃなくて置換後の文字列だったよ…
441デフォルトの名無しさん:2010/09/09(木) 19:36:58
g付けなよ、一発でできるから
442437:2010/09/09(木) 19:52:23
おあああああ!.*? にしてgを付ければいいのか!
?の使い方をイマイチよくわかってなかった

str = str.replace(/<a%.*?%a>/g, '')

こうですね!!!
443デフォルトの名無しさん:2010/09/09(木) 22:43:17
タグがネストすることがなければいいんだけど
444デフォルトの名無しさん:2010/09/10(金) 04:00:58
すみません。コメント削除用に正規表現を書きたいのですがどなたか助けてください。

local test1 = 0 -- comment

例えば上記のluaコードであれば、 --.*\n で問題なく文末コメントを選択出来るのですが

local test2 = "A--B" -- comment

このように、文字列中にコメント記号が存在する場合は
文字列中のものはマッチさせず、文末コメントだけマッチさせるようにしたいのです。
どのように書けばよいのでしょうか?
445デフォルトの名無しさん:2010/09/10(金) 04:26:02
>>444
--[^"]*\n とかは?

local test2 = "A--B" -- "hoge"
とかは削除できんけど
446デフォルトの名無しさん:2010/09/10(金) 09:05:24
>>444
~s/(.*)--.*$/\1/
447デフォルトの名無しさん:2010/09/10(金) 12:56:14
質問いいですか?vb.netで開発してます。正規表現で全角半角カナと半角英数のみ許可するという正規表現教えてください。
448デフォルトの名無しさん:2010/09/10(金) 14:18:55
許可ってなんだ?
449デフォルトの名無しさん:2010/09/10(金) 14:33:55
[A-Za-z0-9ア-ンアーン]+
450デフォルトの名無しさん:2010/09/10(金) 14:37:26
表現が悪くてすみません。[A-Za-z0-9ア-ンアーン]+ でいけそうです!
ほんとありがとうございました。
451デフォルトの名無しさん:2010/09/10(金) 14:44:31
>>450
ヴァイオリンは?
452デフォルトの名無しさん:2010/09/10(金) 14:52:42
すいません。さっきの正規表現ではいけませんでした。。。。
453デフォルトの名無しさん:2010/09/10(金) 15:24:38
^[A-Za-z0-9ア-ンアーン]+$
454デフォルトの名無しさん:2010/09/10(金) 15:27:41
>>453
コード
コード
455デフォルトの名無しさん:2010/09/10(金) 15:30:12
>>451 >>454
判ってるなら代案だせよ馬鹿
456デフォルトの名無しさん:2010/09/10(金) 15:34:29
質問者さんにとってのカタカナに記号類がどこまで含まれるのかが
わからないとどうしようもないだろう。

俺も ヴァ〜 とか通らない例を書きたくなるし。
457デフォルトの名無しさん:2010/09/10(金) 15:53:50
^[\d\Lu\Ll\p{IsHiragana}\p{IsKatakana}]+$
458デフォルトの名無しさん:2010/09/10(金) 15:54:57
ありゃ。ひらがなじゃなくて半角カタカナがほしいのか。
459デフォルトの名無しさん:2010/09/10(金) 16:05:34
>>454
そこらへんは>>447が勝手に追加するでしょ

vb.netわかんねーけど
if(str =~ /[^許可する文字列の集合]/){ エラー処理
とかでいいんじゃね
460デフォルトの名無しさん:2010/09/10(金) 16:46:27
n文字目にXがあって、そこから更にr文字開けて、ブランクかY以外の行
というのはどう書けばいいでしょう。

^.{6}(X).{5}^( |Y).*$

かと思ったのですがダメでした。
461デフォルトの名無しさん:2010/09/10(金) 16:56:19
間違えた、6とか5は適当に入れてしまったけど、そこがnとrって意味です。
すみません。
462デフォルトの名無しさん:2010/09/10(金) 17:01:14
[^ Y]
463デフォルトの名無しさん:2010/09/10(金) 17:04:53
\sのほうがよくね
464462:2010/09/10(金) 17:11:50
>>463
そうだね。
465デフォルトの名無しさん:2010/09/11(土) 06:25:18
>>463
\sって処理系によっては改行含むんじゃなかったっけ?
466デフォルトの名無しさん:2010/09/11(土) 09:27:27
むしろ含まない処理系ってあるの?
467デフォルトの名無しさん:2010/09/15(水) 00:29:49
●正規表現の使用環境
.net(C#3.0)

●検索か置換か?
検索

●説明
空白をデリミタとして、最初の文字列を取得したい
空白は半角全角両方あり、複数連続することもあり得る
ただし、()や[]で囲まれる文字列はスルー(空白として処理する)
正規表現一発で抜き出したいです

下記例の各行は全て「山田太郎」だけ抽出されるようにしたいです

山田太郎 39才
 山田太郎 39才
(A社) 山田太郎 39才
(A社)山田太郎  39才
(A社 B課)山田太郎 39才
山田太郎(A社)39才
468デフォルトの名無しさん:2010/09/15(水) 08:09:56
一発抜きたい、だけ読んだ。
469デフォルトの名無しさん:2010/09/15(水) 09:31:43
カッコのネストをちゃんと扱わなければいけないなら
正規表現では無理、というのは有名な話なわけだが。
470デフォルトの名無しさん:2010/09/15(水) 10:46:17
(A社)山田太郎[B課]39才
[A社]山田太郎(B課)39才
まで正しく扱えるようにするのは厄介。
471デフォルトの名無しさん:2010/09/15(水) 11:04:08
正規表現って役に立たないんだね
472デフォルトの名無しさん:2010/09/15(水) 11:20:36
向いてない仕事に対して役に立たないと言ってしまうのは如何なものか。
473デフォルトの名無しさん:2010/09/15(水) 11:24:39
一発にこだわるからおかしなことになる
二発目三発目でなにが問題か
474467:2010/09/15(水) 12:48:52
なるほど難しいのですか…
そりゃ自分で分からんわけだ

>>473
「抜き出すための正規表現を入力」みたいなGUIだったので…
まぁ無理なら諦めます
475デフォルトの名無しさん:2010/09/15(水) 14:36:56
ネストなしでよければ

^([  ]|\(.*?\)|\[.*?\]|(.*?)|[.*?])*(.*?)[  \(\[([]
476デフォルトの名無しさん:2010/09/15(水) 23:37:59
・括弧はネストしない
・括弧は対応が取れている
・括弧は4種のみ(大小括弧、全半角)

という条件なら、さほど難しいお題ではないな
逆に言うと、この条件から外れるのであれば正規表現向きではないと

>>475
空白も括弧もなく末尾に達するのは考慮しなくても良いのかな
トークンの部分を ([^  \(\[([]*) とするのに一票
477デフォルトの名無しさん:2010/09/16(木) 10:13:09
C#2.0で正規表現を使用して
半角英数字+半角カナ+半角の()
のみの入力であることを調べたいのですがうまくいきません。

([A-Za-z0-9アーン]|[゙゚]|)+
478477:2010/09/16(木) 10:16:18
途中で送信してしまいました。

改めて

C#2.0で正規表現を使用して
半角英数字+半角カナ+半角の()
のみの入力であることを調べたいのですがうまくいきません。

([A-Za-z0-9アーン]|[゙゚]|[\(\)])+

としても
半角の


がマッチしてくれないようなのですが、なにがおかしいかわかりません。
お分かりになられるようでしたらお教え願えませんか?

テストに使用した文字は


アダパン09azAZ()

です

可能であれば半角sペースも許可したいのですが・・・

よろしくお願いいたします。
479デフォルトの名無しさん:2010/09/16(木) 10:47:28
あーん?
480デフォルトの名無しさん:2010/09/16(木) 11:04:47
音引きちょっと楽しい。あーん。

^[A-Za-z0-9ヲ-゚\(\) ]+$
481477:2010/09/16(木) 11:08:29
ありがとうございます。
問題なく動きました。

+やら他の部分は理解できるのですが

何故半角カナの判定が ヲ-゚ で正常に判定できるのでしょうか??
482デフォルトの名無しさん:2010/09/16(木) 11:10:13
もしかしてShift-JISとUnicodeで変わらないかなそれ。
Unicodeの半角カナって0201と同じ並びになってるんだっけ?
483デフォルトの名無しさん:2010/09/16(木) 11:19:00
http://ash.jp/code/unitbl1.htm
半角カナコード表
484デフォルトの名無しさん:2010/09/16(木) 11:24:16
気になる人は全部羅列するといいよ!俺はやらんけど。
485デフォルトの名無しさん:2010/09/16(木) 11:25:31
これ見て書いた。
http://charset.7jp.net/jis0201.html

>>481
A-Z で半角英大文字が判定できるのと同じ理屈ですよ。
それより音引きで範囲指定しようとしてたことを気にしてほしい。
486477:2010/09/16(木) 12:12:16
>>482-485
コード表見て納得しました。

まだまだ勉強が足りないようで恥ずかしい限りです。
精進したいと思います。

ありがとうございました。
487デフォルトの名無しさん:2010/09/16(木) 12:44:10
>>485ー486
>>485-486
質問者は未だ音引きの事実に気付いていない悪寒
488477:2010/09/16(木) 15:27:25
>>487
少し勉強してみました。

アーン
の部分の
-
あるべきところを

のようにしてしまっていたことですよね?

この部分に関しては完全なこちらの記述ミスだったと思っております。
でも言われるまで単純に気がつきませんでした・・・
489デフォルトの名無しさん:2010/09/16(木) 21:52:56
長音符(ちょうおんぷ) or 音引き(おんびき)だと。
逆の誤変換はたまーに見るよね。
ガ−ベジコレクションとか。
490デフォルトの名無しさん:2010/09/17(金) 07:46:16
それを言うなら「ガベージコレクション」だろ
491デフォルトの名無しさん:2010/09/17(金) 08:06:29
カタカナで書いたことがないのでわかりません
492デフォルトの名無しさん:2010/09/17(金) 11:18:23
ガーベジコレクション 約 247,000,000 件

ガベージコレクション 約 251,000,000 件

ガーベージコレクション 約 250,000,000 件

ガベッジコレクション 約 110,000 件

ガベジコレクション 約 13,200 件

ガベコレ 約 23,300 件
493デフォルトの名無しさん:2010/09/17(金) 11:25:23
ガーベッジコレクション 約 250,000,000 件

発音は
ガービッジ
が近いな
ttp://ejje.weblio.jp/content/garbage
494デフォルトの名無しさん:2010/09/18(土) 05:40:57
"ガベージコレクション" 約 94,800 件 (0.14 秒)
"ガーベジコレクション" 約 39,500 件 (0.14 秒)
"ガベージコレクション" -"ガーベジコレクション" 約 357,000 件 (0.24 秒)
"ガーベジコレクション" -"ガベージコレクション" 約 24,100 件 (0.09 秒)
495デフォルトの名無しさん:2010/09/18(土) 07:04:08
スレ違いうぜぇ
496デフォルトの名無しさん:2010/09/18(土) 07:28:10
制服コレクションの方が好きです
497デフォルトの名無しさん:2010/09/18(土) 08:26:21
死ね
498デフォルトの名無しさん:2010/09/18(土) 16:47:43
ゴミ集め。
499デフォルトの名無しさん:2010/09/18(土) 20:00:04
エリザベートとエリーザベトの違いみたいなもん
500デフォルトの名無しさん:2010/09/18(土) 20:05:53
表記揺れ含めると長ウンコになって
なんというか日本語の柔軟性と正規表現て相性ワルイなと
501デフォルトの名無しさん:2010/09/19(日) 05:47:06
ガー?[べビ][ーッ]ジ・?コレクション
502デフォルトの名無しさん:2010/09/19(日) 05:48:34
ガー?[べビ][ーッ]?ジ・?コレクション|ガベコレ
503デフォルトの名無しさん:2010/09/19(日) 16:22:39
秀丸ですが、指定の文字列が無い行全てを削除したいです。

以下の様な複数行のターゲットがあって、zyzの文字列が有る行のみ
残したいのです。

.+[^(zyz)].+\n じゃダメだったし、力不足でニッチもサッチもいきませんorz
どなたかHELP ME・・・・・

AAABBBzzyCCDDDEEEAAA
AAABBBDDzyzEEEAAA
AAABBBCCzyzEEEAAA
AAABBBCCDDDAAA
AAACCDDDEEEAA
AzyzAABBBCCDDDEEEAAA
504デフォルトの名無しさん:2010/09/19(日) 17:29:25
505デフォルトの名無しさん:2010/09/19(日) 17:46:21
有り難うございました m(_ _)m
506デフォルトの名無しさん:2010/09/25(土) 01:17:42
質問です.

int int1=10;
int int2=20;

の文字列から任意のユーザ定義語(例えばint1, int2)だけ取り出したいのですが
どんな風に書けばよいでしょうか?
ちなみにC#のRegexでマッチさせたいと考えてます.
507デフォルトの名無しさん:2010/09/25(土) 01:40:26
>>506
int[12]

という冗談はさておき、厳密にやろうとしたら正規表現では無理。
yacc(bison)でも使ったら?
508デフォルトの名無しさん:2010/09/25(土) 10:52:29
厳密にやるのは正規表現じゃ無理なのは確かだが、

int¥s+(¥w+)¥s+=

ぐらいでいけそうだけどな。自分用ならyaccのたぐいを
持ち出すよりはお手軽だ。うまくいかなかったら調整
すればいいし。

人様に使わせるものならそういうわけにもいかないけど。
509デフォルトの名無しさん:2010/09/25(土) 13:52:31
>507,508
ありがとう

正規表現で
語(予約語+ユーザ低語)は
[a-zA-Z_][a-zA-Z_0-9]*
で多分抜き出せると思うが,
抜き出した結果がintとかswitchとか予約後の場合
マッチングの結果から取り除く,というのを正規表現だけで
表現できませんか?
510デフォルトの名無しさん:2010/09/25(土) 15:15:31
>>509
だからそういうのは正規表現向きじゃないって。
C#なら、予約語リストを用意しておいてそれとマッチするかチェックすればいいじゃん。
# 予約語をDBに入れたら検索も手抜きできるけど、そこまでするかどうかは別の問題
511デフォルトの名無しさん:2010/09/26(日) 01:05:10
javascriptです。
(hoge|omg)|poo,muu
例えばこんな文字列で、()に囲まれた|は無視して、|を見つけるとかはできるんでしょうか?
512デフォルトの名無しさん:2010/09/26(日) 08:46:31
\|
513デフォルトの名無しさん:2010/09/26(日) 09:35:47
正規表現は数を数えられない→括弧の対応をとることはできない
514デフォルトの名無しさん:2010/09/26(日) 10:11:13
括弧は必ず正しく対応してるという前提で。
\|(?![^\(]*\))
515デフォルトの名無しさん:2010/09/26(日) 10:41:14
どうして正規表現=有限オートマトンにはできないことを
やらせたがる奴が後を絶たないのだろう。ちょっとは
まじめに勉強しろよ。そう難しい話じゃないんだからさ。
516デフォルトの名無しさん:2010/09/26(日) 11:30:28
最近の拡張ではできちゃったりするからw
517デフォルトの名無しさん:2010/09/26(日) 17:36:13
嫁がおとといから家に帰ってこないんです。
いままでこのようなことはありませんでした。
外泊するときはかならず一言あったのですが。
いま、嫁がどこにいるのか検索できないでしょうか。
518デフォルトの名無しさん:2010/09/26(日) 17:51:34
スレ違いだと思うけど
1.GPS機能のついたケータイを持たせる(認知症の老人などで実績あり)
2.腕や足にGPS機能のついた発信器を付ける(元犯罪者の監視で実績あり、米国)
3.嫁に首輪を付けて、常に自分がハーネスを持っているようにする
4.自分に首輪を付けて、常に嫁にハーネスを握っていて貰う
5.夢から覚める
519デフォルトの名無しさん:2010/09/27(月) 05:48:24
正規表現は数を数えられない→人物の同定はできない
520デフォルトの名無しさん:2010/09/27(月) 08:49:45
数を数えられないと人物の同定は出来ないの間が飛躍しすぎで
どうしてそれがいえるのかさっぱりわからない。

あと数は数えられないわけじゃなくてあらかじめ数えたい数までの
状態を用意しておく必要があるだけだよw
521デフォルトの名無しさん:2010/09/27(月) 11:43:26
つまりトンネル効果は実際の電子が移動してる訳じゃなくて
ドミノ倒し式に電子が飛び出すって話だろう
522デフォルトの名無しさん:2010/09/30(木) 19:40:05
●正規表現の使用環境
PHP5.29

●検索か置換か?
検索

●説明
:より前の記号部分を取得したい。

●対象データ
5789:石鹸
w555-2:タオル
Zxcvb:ハンガー

●希望する結果
5789
w555-2
Zxcvb
523デフォルトの名無しさん:2010/09/30(木) 21:00:09
^(\w+)(?=:)
524デフォルトの名無しさん:2010/10/01(金) 18:29:56
ありがとうございます!
525デフォルトの名無しさん:2010/10/02(土) 21:52:42
http://test.com/test1/test2/test3/pic.jpg から
test.com/test1/test2/test3 を取るにはどう書いたらいいでしょうか

test1やtest2の階層は増えたり減ったりします。
要するにhttp://から最後の/の間の値がほしいです
526デフォルトの名無しさん:2010/10/02(土) 21:59:54
http://(.*)/ でマッチして $1 で後方参照
使ってる言語にあわせて適当に変えてね
527デフォルトの名無しさん:2010/10/02(土) 23:22:30
ありがとす
528デフォルトの名無しさん:2010/10/03(日) 02:10:07
(^ω^)/
529デフォルトの名無しさん:2010/10/06(水) 22:48:26
A3AACD9ABD377E716127E010FEAC9EBE のような半角英数字32文字の取得はどう書けばいいんでしょうか?
530デフォルトの名無しさん:2010/10/06(水) 22:57:53
>>529
あとこれで数字は入ったり入らなかったりする場合にもマッチさせたいのです。
531デフォルトの名無しさん:2010/10/06(水) 23:20:44
[A-Z0-9]{32}
532デフォルトの名無しさん:2010/10/07(木) 00:43:31
[A-F0-9]{32}
533デフォルトの名無しさん:2010/10/07(木) 00:47:38
[A-Fa-f0-9]{32}
534デフォルトの名無しさん:2010/10/07(木) 00:48:29
>>533
お前の眼は節穴か?小文字がどこにあるというんだ?
535デフォルトの名無しさん:2010/10/07(木) 00:48:58
>>531-533
ありがd
536デフォルトの名無しさん:2010/10/07(木) 16:29:19
>>534
だが要件に小文字とは言ってないぞ
537デフォルトの名無しさん:2010/10/07(木) 17:43:56
半角英数字と指定してるのにサンプルだけ見て16進数だと勘違いしてるのもアレだが
538デフォルトの名無しさん:2010/10/07(木) 17:57:51
ということで真の正解は
[A-Za-z0-9]{32}
539デフォルトの名無しさん:2010/10/07(木) 18:48:18
>>537
入る文字列がA-Z0-9であった場合、その中にA-F0-9以外の文字が現れる確率を求めなさい
540デフォルトの名無しさん:2010/10/07(木) 19:58:23
確率の問題なのか?
541デフォルトの名無しさん:2010/10/07(木) 21:04:57
確率で言うと0か0以外かの問題だな
542デフォルトの名無しさん:2010/10/08(金) 14:10:18
AFO 9
543デフォルトの名無しさん:2010/10/09(土) 00:57:47
このスクリプトを弄って

.replace(/^(http:\/\/\w+\.ggpht\.com\/(?:\w+\/){4})s\w+\/(\w+\.\w+)$/, "$1$2")


↓このURLを
http://lh4.ggpht.com/_t_n4016d-gI/STHDImgY6vI/AAAAAAAAAQo/AYanW_8Hr_4/s128/IMG_0888.JPG

http://lh4.ggpht.com/_t_n4016d-gI/STHDImgY6vI/AAAAAAAAAQo/AYanW_8Hr_4/
↑これに変える動作させたいのですが


正解の正規表現を教えてください
544デフォルトの名無しさん:2010/10/09(土) 01:05:06
すいません
>>738は解決したのでももういいです
545デフォルトの名無しさん:2010/10/09(土) 01:06:18
>>543です
546デフォルトの名無しさん:2010/10/10(日) 09:04:59
スレ立てるまでもない質問スレから誘導されてきました。


.replace(/^(http:\/\/.+\.static.flickr.com\/[^/]+\/\w+_\w+_)m(\.\w+)$/, "$1b$2")

↑の /.+\.static.flickr.com\/ の部分

対象が「*.static.flickr.com」なのを「farm1.static.flickr.com」に変更したいんですけど

正しい正規表現を教えてください


※こういうURL置換させることを目指してます
http://farm1.static.flickr.com/127/349535809_df2deac900_m.jpg

http://farm1.static.flickr.com/127/349535809_df2deac900_b.jpg
547デフォルトの名無しさん:2010/10/10(日) 09:17:53
548デフォルトの名無しさん:2010/10/10(日) 09:18:37
おおっとまちがい
/^(http:\/\/farm1\.static\.flickr\.com\/[^/]+\/\w+_\w+_)m(\.\w+)$/
549デフォルトの名無しさん:2010/10/10(日) 09:47:53
>>548
URL置換出来ました
ありがとうございましたm(_ _)m
550デフォルトの名無しさん:2010/10/10(日) 10:09:32
もう一つお願いします


.replace(/^(http:\/\/\w+\.ggpht\.com\/(?:\w+\/){4})s\w+\/(\w+\.\w+)$/, "$1$2"));


↑のスクリプトですが対象のURL文字列に『-(ハイフン)』が含まれてる場合に動作しません
『-(ハイフン)』が入っていても動作可能な正規表現を教えてください


※こういうURL置換させることを目指してます
                  『-(ハイフン)』URL文字列中の『-』の位置は画像ごとにランダムに移動
http://lh4.ggpht.com/_t_n4016d-gI/STHDImgY6vI/AAAAAAAAAQo/AYanW_8Hr_4/s128/IMG_0888.JPG

http://lh4.ggpht.com/_t_n4016d-gI/STHDImgY6vI/AAAAAAAAAQo/AYanW_8Hr_4/IMG_0888.JPG
551デフォルトの名無しさん:2010/10/10(日) 10:19:16
\w+になってるところを[\w-]+にすればたぶん動くよ
動かなかったら[\w\-]
552デフォルトの名無しさん:2010/10/10(日) 10:20:54
[\w\-] は [\w\-]+ の間違い
553デフォルトの名無しさん:2010/10/10(日) 11:17:35
>>551-552
おかげさまで動きました。
個人的に非常に使えるスクリプトを作ることが出来ました。
ありがとうございました。
554デフォルトの名無しさん:2010/10/12(火) 08:15:36
ただ猫画像を貼りたかっただけじゃん。大歓迎だけど。
555デフォルトの名無しさん:2010/10/12(火) 19:41:02
シェルの中で入力ファイル名から出力ファイル名を生成しています。
特定の文字列・記号を正規表現でリネームしたいのですが思いつきません。

ファイル名前半部が異なるファイルが50以上あるのですが、思い通りにrenameしてくれません。
ご教示お願いいたします。

対象ファイル:
iko_foobar_hogehoge_20101008.tsv

リネーム後ファイル:
iko_foobar_hogehoge-20101008.tsv

コマンドの実行イメージ
rename iko*_[\d,8].tsv iko*-[\d,8].tsv

IN_FILE = ma_sina_syo_20100101
OUT_FILE="${DIR_PATH_RCV}/${PREFIX}$(basename ${IN_FILE})${MARK}${YMD}.tsv"
OUT_FILE=iko_ma_sina_syo-20100101.tsv
556デフォルトの名無しさん:2010/10/12(火) 22:12:38
shellは正規表現のパースなんかできないよ。
557デフォルトの名無しさん:2010/10/12(火) 23:18:53
JMeterで何とか以下のHTMLの『二番目の』optionを拾いたいんだけど、どーも上手くいきません。
<select name="select$item1" onchange="javascript:dummry();" id="select_item1">
<option selected="selected" value="0">(none)</option>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item2</option>
</select>
※optionの行にはいくつかタブが入っています。

「id="select_item1">([.\r\n\t\f]*)option value="([1-9]*)"」と書けば拾ってくれると思ったんだけどダメでした。
何か忘れている箇所がありましたら、是非アドバイスをお願いします。

ちなみに(おそらくnameに$が入っているせいだと思いますが)HTMLリンクパーサは動きません(涙
558デフォルトの名無しさん:2010/10/13(水) 10:52:31
<
559557:2010/10/13(水) 16:27:18
なるほど、<>の二つは「.」に含まれないのですね
「id="select_item1">([\r\n\t\f]*)<(.*)>(.*)</option>([\r\n\t\f]*)<option value="([1-9]*)">」
の5番目を引っ張ることでなんとか取得出来ました。
・・・もう少しスマートな方法があるような気がとってもするのですが(汗、
わかりやすくはあるのでよしとしておきます。
アドバイス、ありがとうございました!
560デフォルトの名無しさん:2010/10/13(水) 16:44:01
>>559
違うw
[.]はピリオドそのものを表してる

JMeter は知らないけど
id="select_item"[^<]*<option[^>]*?value="([^"]*)"[^>]*>[^<]*<option[^>]*?value="([^"]*)"[^>]*>
とかでいけるんじゃね?
561デフォルトの名無しさん:2010/10/13(水) 16:45:50
ああしくじった
id="select_item"[^<]*<option[^>]*?value="([^"]*)"[^>]*>[^<]*<\/option>[^<]*<option[^>]*?value="([^"]*)"[^>]*>[^<]*<\/option>
かな
562デフォルトの名無しさん:2010/10/13(水) 16:57:17
>>561
optionvalue
563デフォルトの名無しさん:2010/10/13(水) 17:06:02
>>561
そんな文字列があるのは想定外
じゃあこう
id="select_item"[^<]*<option\s[^>]*value="([^"]*)"[^>]*>[^<]*<\/option>[^<]*<option\s[^>]*value="([^"]*)"[^>]*>[^<]*<\/option>

本当はこう書きたいところ
<select\s[^>]id="select_item">[^>]*(?:<option\s[^>]*value="([^"]*)"[^>]*>[^<]*</option>[^>]*)*</select>
564557:2010/10/13(水) 18:37:18
>>560
>違うw
>[.]はピリオドそのものを表してる
おっと、それは失敬。なるほど、このせいで動かなかったのですね。
例題の提示もしていただいて本当にありがとうございます。
上記のとおり今回は分かりやすさを優先しておきますが、リファレンス片手に読み解いてみます。
勉強させていただきますね(拝
565デフォルトの名無しさん:2010/10/13(水) 21:31:54
>>556
ガ━━(゚Д゚;)━━ン!
566デフォルトの名無しさん:2010/10/14(木) 23:29:11
っPowerShell
567デフォルトの名無しさん:2010/10/15(金) 07:29:47
っbash
568デフォルトの名無しさん:2010/10/18(月) 22:32:13
質問です。
テキストの中の<location></location>で囲まれた行のみ処理対象にして、
1.<location></location>を残す。
2../(ピリオドとスラッシュ)を追加。
3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。
という正規表現を教えてください。


<location>file:///(ドライブ名):/(フォルダ名)/(フォルダ名)/(フォルダ名)/(フォルダ名)/(ファイル名)</location>
という行がテキストファイル内に存在したら
<location>./(ファイル名)</location>
という内容に変更したい。フォルダ名とファイル名に規則性無し。
特に、8個目の/(スラッシュ)以降の文字列を残す方法が全くワカリマヘン。

現状レベル
昨日から丸1日正規表現に取り組んで、近づいてる様な近づいてない様な抽出実験してるレベルです。

因みに今回のテキストファイルは、VLCのプレイリストのxspfファイルです。
ファイルを移動した時、プレイリストが絶対アドレスで定義されてるので、リンクが切れてしまいます。
今回の変更で、相対アドレスになりある程度のファイル移動が可能になる。まあ仕事じゃない趣味のレベルです。

宜しくお願いします。
569デフォルトの名無しさん:2010/10/19(火) 00:48:04
>>568

s/<location>.*?([^\/]+)<\/location>/<location>./$1<\/location>/
570568:2010/10/19(火) 14:26:12
>>569 様 頂いたレスから調べてみました。
.*?([^\/]+) の部分が / 間の文字列が抽出出来る事はナントカ理解できました。

>>568 について具体的には・・・(質問が前後してしまいスミマセン)

今回のxspfファイルです。
尚、各タグの前には、数文字分スペースが空いてる場合もあります。投稿した画像で分かります。
------
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
<title>プレイリスト</title>
<trackList>
<track>
<location>file:///G:/tv%20John/videos/fold1/fold2/Record.ts</location>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:id>0</vlc:id>
</extension>
</track>
</trackList>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:item tid="0" />
</extension>
</playlist>
------
サクラエディタで実験してみました。(使いこなせてないケド)  http://iup.2ch-library.com/i/i0172035-1287464921.jpg

置換前に \s*<location>.+</location> を指定して「該当行マーク」ボタンを押すと黄色マーキングが出来ました。
黄色マーキングされた
<location>file:///G:/tv%20John/videos/fold1/fold2/Record.ts</location>

<location>./Record.ts</location>
に置換するには「置換後」に何を記述したら良いのでしょうか?
571デフォルトの名無しさん:2010/10/19(火) 15:27:21
>>570
>>569のs〜ってのはsedとかviとかperlでの置換(Substitution)命令
s 区切り文字 正規表現 区切り文字 置換文字列 区切り文字
で、正規表現を置換文字列に置換する
後はサクラエディタのヘルプ調べればわかるはず
572sage:2010/10/19(火) 15:30:36
●正規表現の使用環境
php5

●検索か置換か?
置換

●説明
tableタグ内の改行(<br />)を全て削除したい

●対象データ
<table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br />
<tbody><br />
<tr><br />
<td><br />
</td><br />
</tr><br />
</tbody><br />
</table>

●希望する結果
<table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx">
<tbody>
<tr>
<td>
</td>
</tr>
</tbody>
</table>
573572:2010/10/19(火) 15:31:38
tableは複数あるかも知れませんが、全て一括で同様の処理がしたいです。
よろしくお願いします!
574デフォルトの名無しさん:2010/10/19(火) 15:59:25
>>572
ググって考えろ。丸投げのアホは氏ね。
575568:2010/10/20(水) 15:00:18
>>571
サクラエディタでも出来ました。ありがとうございます。
置換前 <location>.*?([^\/]+)<\/location> 置換後 <location>./$1</location> 又は <location>.\/$1<\/location>

当初 $1 の利用法が全く理解不能でしたが、ナントナク分かりました。
>"$1、$2、$3……"を使うと、検索文字列内の "()" で囲まれた部分を、置換文字列側で参照することができます。
>"()" で囲まれた部分にマッチしたところを左から数えて、最初が$1、2番目が$2という具合です。
あと、仰るとおり s/ の意味もワカリマセンでした。超単純に解釈すると、コマンドパラメタの区切りみたいな役目だったんですね。

ドーデモイイ事ですけど不思議に思った事が・・・
置換の正規表現で <location>./$1</location> 又は <location>.\/$1<\/location> 両方共結果が同じでした。
/ と \/ ではナゼ同じなのでしょうか?(/ はメタキャラクタ?でもないし) 因みに \\/ にするとさすがに結果が変わりましたケド。
/で変更  http://iup.2ch-library.com/i/i0172641-1287554183.jpg
\/で変更 http://iup.2ch-library.com/i/i0172642-1287554183.jpg
\\/で変更 http://iup.2ch-library.com/i/i0172643-1287554183.jpg

 

 
576デフォルトの名無しさん:2010/10/20(水) 15:23:42
先頭から3文字にマッチする表現を教えてください
577576:2010/10/20(水) 15:29:50
^...
これでいけました
578デフォルトの名無しさん:2010/10/20(水) 18:31:52
>>575
> / と \/ ではナゼ同じなのでしょうか?

エスケープ不要な文字にいちいち \ つけるんじゃねーよという文句も言わずに
「本当は要らないのに」と内心思うぐらいで粛々と作業してくれる処理系が多いのです。
579デフォルトの名無しさん:2010/10/20(水) 19:52:32
見出しと任意文字列の間にtabを挿入したいのですが、そうした置換は可能でしょうか?
サクラエディタを使っています。
幼稚な質問をお許し下さい


見出し1=任意文字列1
見出し2=任意文字列2=任意文字列3
見出し3=任意文字列4=任意文字列5=任意文字列6

【こうしたい】
見出し1=  任意文字列1
見出し2=  任意文字列2=任意文字列3
見出し3=  任意文字列4=任意文字列5=任意文字列6



580デフォルトの名無しさん:2010/10/20(水) 20:10:24
>>578
perlはどの記号が\いるかいらないかいちいち人が覚えるのは大変だから
特に正規表現として特別な意味がない記号でも全部\つけたらその文字
自身を表すってことにしちゃったんだよね。
581デフォルトの名無しさん:2010/10/20(水) 20:16:20
[-abc]の - そのものって \ 必要だったかな、わかんないや、とりあえず \ つけとけ
みたいにすることはよくある

>>579
^(.*?=) で検索して $1\t で置換

エスケープシーケンスを有効にする、みたいな項目があったらチェックして置換してね
サクラエディタ持ってないからうまくいかなかったらスルーで
582579:2010/10/20(水) 21:50:34
ありがとうございました。
583568:2010/10/21(木) 15:13:16
ナルホドー 結構柔軟なモンなんですね。ありがとうございます。
584デフォルトの名無しさん:2010/10/21(木) 21:16:20
VBScriptのRegular Expressionオブジェクトにtr///(y///)に相当するメソッドはありますか?
585デフォルトの名無しさん:2010/10/23(土) 20:07:02
2桁の英数字にはマッチするけど3桁にはマッチしない正規表現はどう書けば良いんでしょうか?
586デフォルトの名無しさん:2010/10/23(土) 20:45:16
(^|[^0-9A-Za-z])[0-9A-Za-z][0-9A-Za-z]([^0-9A-Za-z]|$)
587デフォルトの名無しさん:2010/10/23(土) 21:02:59
>>586
ありがとうございます
後方不一致とか色々やってみたけど結局うまくいかなかった・・・
588デフォルトの名無しさん:2010/10/23(土) 21:42:45
処理系にもよるし厳密ではないが、 \b\w{2}\b は?
589デフォルトの名無しさん:2010/10/25(月) 17:58:15
"A"にはマッチするけど"ABC"にはマッチしない正規表現お願いします
590デフォルトの名無しさん:2010/10/25(月) 18:07:28
否定先読みが使えるなら
A(?!BC)
591デフォルトの名無しさん:2010/10/25(月) 18:10:23
>>590
出来ました。ありがとうございます。
592デフォルトの名無しさん:2010/10/26(火) 03:16:21
特定の文字だけで構成される行 にマッチする正規表現をお願いします。

あああああああ
wwwwwwwwwww
HHHHHHHHHHHHH

のような行です。
593デフォルトの名無しさん:2010/10/26(火) 03:28:09
すみません、特定の文字、というか、同じ文字だけで構成される行、でした。
わかりにくくてすみません。
594デフォルトの名無しさん:2010/10/26(火) 03:51:07
^(.)\1*$
595デフォルトの名無しさん:2010/10/26(火) 05:37:58
>>594
ありがとうございます!
596デフォルトの名無しさん:2010/11/01(月) 03:28:11
【】で囲まれた任意の同一文字列(文字数可変)が2回続いた場合にマッチする正規表現をお願いします

【AAA】【AAA】はマッチ
【AAA】【BBB】はマッチしない

という感じです
597デフォルトの名無しさん:2010/11/01(月) 03:34:20
もうちょっとやりたい事を具体的に書くと

【AAA】【AAA】 → 【AAA】

のように置き換えたいと思ったのですが
マッチの部分で躓いてしまいました
598デフォルトの名無しさん:2010/11/01(月) 05:26:08
(【.*?】)\1
599596,597:2010/11/01(月) 06:11:45
>>598
ありがとうございます
勉強になりました
600デフォルトの名無しさん:2010/11/01(月) 06:41:09
       ┌─┐
       │●│
       └─┤
       _   ∩
      ( ゚∀゚)彡
    ┌─┬⊂彡
    │●│ おっぱい!おっぱい!
    └─┘      おっぱい!おっぱい!

601デフォルトの名無しさん:2010/11/01(月) 18:54:00
「いっぱい」の「い」を「お」に変えてごらん
602デフォルトの名無しさん:2010/11/01(月) 19:51:32
       ┌─┐
       │●│
       └─┤
       _   ∩
      ( ゚∀゚)彡
    ┌─┬⊂彡
    │●│ おっぱお!おっぱお!
    └─┘      おっぱお!おっぱお!

韓ドラみたいになったお・・・
603デフォルトの名無しさん:2010/11/01(月) 22:37:54
行の最初から最後 → 文章の最初から最後 に対象範囲を広く変更するのですが・・・
^.*=(.+?)$ → \A.*=(.+?)\z に修正しましたが上手く動きません。
文章の最初と最後の記述は >\A >\z 以外に何を記述すれば良いのでしょうか?
尚、今回訂正する文法の参考と動作確認したのはコチラです ttp://www.rubular.com/

因みに RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" ) で使用します。
宜しくお願いします。
604デフォルトの名無しさん:2010/11/01(月) 22:50:36
改行
605デフォルトの名無しさん:2010/11/01(月) 23:54:20
>>604
試行錯誤の末、漸く改行の意味が分かりました。たぶんw
\n も含めて文字列と解釈する様に訂正しました。
\A(.|\n)*=(.+?)\z にすると ttp://www.rubular.com/ では上手く行きました。
ご指摘ありがとうございます。 >>604 様

但し RegExReplace( ClipBoard, "\A(.|\n)*=(.+?)\z", "$2" ) に入れると、
考えてる様には動かない様なので RegExReplace の記述を再度調べてみます。
606デフォルトの名無しさん:2010/11/02(火) 00:56:24
>>605
使えるメタ文字(\Aとか)は正規表現ライブラリによって変わるよ
確認してるとこはRubyだし
RegExReplaceとやらのヘルプ調べてみては?
607デフォルトの名無しさん:2010/11/02(火) 02:18:37
どの処理系かわかんないけどドットが改行にマッチするオプション指定で片づくんじゃないのかな。

PCREなら /pattern/s って s 修飾子つければ元のパターンのまま
期待通りの動作になってくれるようなの。
608デフォルトの名無しさん:2010/11/02(火) 02:26:12
>>606
>ライブラリによって変わる なるホド!違うのはナントナ〜ク分かってましたがそういう事でしたか。
RegExReplace を発見したので熟読してみます。
609デフォルトの名無しさん:2010/11/02(火) 02:33:52
>>607
おっと、前後してしまいました。
因みに処理系?というのは >AutoHotkey です。 
ttp://sites.google.com/site/autohotkeyjp/reference/RegEx

RegExReplace でも色々有るんですね。今日レスされて分かりましたw
これって共通に使えるモノで、他の言語から呼出しても全く同じ仕様なのかな?と、勝手に解釈してましたわ。
610デフォルトの名無しさん:2010/11/02(火) 02:48:53
>>609
いろんな RegExReplace があるんじゃなくて正規表現エンジンが色々あるんです。

PCREで修飾子も諸々使えるんだね。
http://sites.google.com/site/autohotkeyjp/reference/RegEx#TOC-13
611デフォルトの名無しさん:2010/11/02(火) 03:24:04
>>610 
>オプション
>パターンの最初に )で区切ってオプションを指定する。 
>s .で改行文字もマッチするようにする
をそれなりに解釈して修正してみました。

RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" ) の "^.*=(.+?)$", と解釈。変えてみましたが、$1と$2は空白でした。
)s^.*=(.+?)$
^.(*)s=(.+?)$
^(.*)s=(.+?)$

申し訳ありませんが >パターンの最初に )で区切ってオプションを指定する。 とは、こういう意味なんでしょうか?
アホですみません。
 
612デフォルトの名無しさん:2010/11/02(火) 04:47:37

)s^.*=(.+?)$

 )
s^.*=(.+?)$


s)^.*=(.+?)$
613603:2010/11/02(火) 06:47:15
>>612
あ〜そう指定するのね。出来ました!
>>604-612
皆様、大変お手数お掛けしました。
614デフォルトの名無しさん:2010/11/04(木) 05:36:24

.replace(/^(http:\/\/farm1\.static\.flickr\.com\/[^/]+\/\w+_\w+_)m(\.\w+)$/, "$1o$2")


のスクリプトを改変したいのですが、
以下の場合の正規表現をそれぞれ教えてください
615デフォルトの名無しさん:2010/11/04(木) 05:38:32
616デフォルトの名無しさん:2010/11/04(木) 05:48:32
(1)
.replace(/(http:\/\/img\.pics\.livedoor\.com\/(.+?\/){3}.+?-).+\.jpg$/i,"$11024.jpg")
617デフォルトの名無しさん:2010/11/04(木) 05:53:41
(2)
.replace(/^(http:\/\/.+?\.photobucket\.com\/(.+?\/){3})th_(.+?\.jpg)$/i,"$1$3")
618デフォルトの名無しさん:2010/11/04(木) 05:56:52
(3)
.replace(/^(http:\/\/.+?\.content\.foto\.mail\.ru\/(.+?\/){3}).+?(-.+?\.jpg)$/i,"$1i$3")
619デフォルトの名無しさん:2010/11/04(木) 05:59:13
620デフォルトの名無しさん:2010/11/04(木) 07:22:03
>>616-619

完璧です
ありがとうございます!!!
621デフォルトの名無しさん:2010/11/04(木) 08:42:08
622デフォルトの名無しさん:2010/11/04(木) 10:33:26
さてと、そろそろ各サイト宛にDoS攻撃しかけている馬鹿がいるって通報しておくか。
つーか、少しでも勉強する気があるならいい加減自力でできてていい頃合いだろ。
クレクレ相手にするのも程々にしておかないと切りがないぞ。
623デフォルトの名無しさん:2010/11/04(木) 10:56:21
自力でやってできないから聞いてるんだが
何がDoS攻撃だよ通報したけりゃ勝手にやれば?どこにするのか知らんが
てか、人の足引っ張って楽しいか?無能の癖に他人の邪魔だけは一人前だな
624デフォルトの名無しさん:2010/11/04(木) 11:04:37
>>621
( 4 ) は自力でできたのでもういいです
625デフォルトの名無しさん:2010/11/04(木) 11:12:20
ほほぉ、「自力でやってできないから聞いてるん」じゃなかったのかい?w
「丸投げしたけど揶揄されたから自力でやってみたらできた」って素直に認めちまえよw
626デフォルトの名無しさん:2010/11/04(木) 11:55:22
( 5 )もできたのでもういいです

つか622のおかげで自力でできたなw
627デフォルトの名無しさん:2010/11/04(木) 19:53:58
>>624>>626
「自力でできたのでもういいです」なんてセリフを言われちゃ
本当は自分で出来ることを他人にやらせようとしてただけと感じちゃう
それじゃせっかくボラしてくれてる人も萎えちまうぞ

今まで教えてくれた人に報いる気があるなら、
せめて「〜としてみたらできました」と報告しようぜ
628デフォルトの名無しさん:2010/11/04(木) 21:30:08
自分で出来る自信がつきましたので
これからはこのスレでボラの皆さんと一緒に活躍したいと思いますのでヨロシク!
629デフォルトの名無しさん:2010/11/06(土) 06:48:03
A=01
A=02
A=abc01
A=_abc_02
A=01_02_abc

これで、A=01 や A=02 だけにマッチさせる記述を教えてください
A=(?!abc|_abc)\w+
ではA=01_02_abcまでマッチしてしまいます
A=(?!abc|_abc)\w+(?!_abc) でも A=(?!abc|_abc)\w+(?!_abc)$ でもダメでした
よろしくお願いします
630デフォルトの名無しさん:2010/11/06(土) 08:01:51
A=0[12]\n
631デフォルトの名無しさん:2010/11/06(土) 12:36:49
^A=\d+$
632デフォルトの名無しさん:2010/11/06(土) 18:20:06
>>630
レスありがとうございます
ですがマッチしませんでした

>>631
ありがとうございます
マッチいたしました

皆さんお世話になりました。
633デフォルトの名無しさん:2010/11/06(土) 23:09:36
どういうことだよ
634デフォルトの名無しさん:2010/11/07(日) 13:49:11
>>633
すみません、わかりにくかったですね

>>630氏に教えていただいた「A=0[12]\n」では
A=01
A=02
A=abc01
A=_abc_02
A=01_02_abc
これらすべてにマッチしませんでした。

ですが>>631氏の「^A=\d+$」では
A=01
A=02
A=abc01
A=_abc_02
A=01_02_abc
これらの
A=01
A=02
のみにマッチさせることができた、ということです
635デフォルトの名無しさん:2010/11/07(日) 19:54:49
\nは必ず行末にマッチしたっけ?
636デフォルトの名無しさん:2010/11/07(日) 21:03:23
そもそもお題が複数行対象じゃなくて複数の例を列挙してるだけじゃないの。
637デフォルトの名無しさん:2010/11/08(月) 00:02:27
まぁ提示された条件が曖昧だから答えもあってるんだかどうかわからんわな。
638デフォルトの名無しさん:2010/11/15(月) 16:45:54
最短一致のない悲しい環境で使うための

a(.*?)b

という文字列を渡すと

a([^b]*)b

という最短一致を排除した形式に変換してくれるスクリプトかなんかないかな。
639デフォルトの名無しさん:2010/11/15(月) 22:54:09
Cygwin使っている人いますか? その20
http://hibari.2ch.net/test/read.cgi/unix/1268282846/

272 名無しさん@お腹いっぱい。 [sage] 2010/11/15(月) 11:42:30 ID: Be:
マウントオプションとは別に、CRLFをLFに変換するツールはないでしょうか?

美乳セーラー女子高生とSEX顔射フィニッシュ

というコマンドやnkfでも一応可能なのですが
専用のツールはなかったかと思いまして

273 名無しさん@お腹いっぱい。 [sage] 2010/11/15(月) 11:43:21 ID: Be:
>>272
コピペミスった、、、、、
見なかったことにしてください

コマンドは、

cat crlf.txt | tr -d '\r' > lf.txt

です。
640デフォルトの名無しさん:2010/11/15(月) 23:13:41
スレチ
641デフォルトの名無しさん:2010/11/18(木) 23:33:58
C++言語の関数プロトタイプにマッチする正規表現教えてください
自分がやるとif文とかwhile文までマッチしちゃいます。
642デフォルトの名無しさん:2010/11/19(金) 03:52:38
test.abc.ne.jp
test.abcdef.ne.jp
test.ztv.ne.jp

「test.abc.ne.jpは除外」というルールを
^test\.[^abc]+\.ne\.jp$
と書いたのですが、test.abcdef.ne.jpも除外されてしまいます

^test\.(?!abc(?!def))\w+\.ne\.jp$
と書けばいいのですが、(?!)は環境により使えません
(?!)を使わず、「test.abc.ne.jpを除外し、test.abcdef.ne.jpは除外しない」というルールを教えていただきたいです。よろしくお願いします
643デフォルトの名無しさん:2010/11/19(金) 09:09:10
なぜそこで文字クラスが出てくるのかがわからない
644デフォルトの名無しさん:2010/11/19(金) 10:08:30
それなら、
^test\.abc+\.ne\.jp$
でマッチさせて、マッチしたら除外でいいんじゃね?
645デフォルトの名無しさん:2010/11/19(金) 10:09:14
あぁabc+はabcの間違いね
646デフォルトの名無しさん:2010/11/19(金) 10:13:02
書けないことはないけど否定の正規表現は鬼門なのでおすすめしない。

例えば^abc$の否定は

^(|.|..|[^a]..|[a[^b].|ab[^c]|....*)$

なので似たようなことをすればOK。君の問題のはめんどくさくて書く気
しないから自分で頑張れ。
647デフォルトの名無しさん:2010/11/19(金) 11:58:08
>>638
sed -e 's/\(.*\)(.*?)\(.*\)/\1([^\2]*)\2/'
648デフォルトの名無しさん:2010/11/20(土) 14:15:01
>>643
ごめんなさい・・おっしゃってる意味がよく・・・
勉強中なもので・・お恥ずかしい

>>644
test.abcdef.ne.jp
test.ztv.ne.jp
だけを一気に検索できたら便利だなぁって思いまして。確かにおっしゃることはもっともなんですけど、アナログかなぁ・・って

>>646
>否定の正規表現は鬼門なのでおすすめしない。
そうなんですか!自分も(?!)とかは参考サイトで勉強したんですけどほんと難しかったです
そうだったんですね・・・鬼門でしたか。


みなさんレスありがとうございます。正規表現ってむつかしいですねやっぱり。
649デフォルトの名無しさん:2010/11/20(土) 14:19:38
なぜそれでアナログになるのか分からない
650デフォルトの名無しさん:2010/11/20(土) 14:58:41
>>649
一度にパッてやりたいじゃないですか。パッて検索したり置換したり
自分いまだに後方参照ってものをモノにしてなくて正規表現を含む文字列の置換はいまだに手でチマチマとやってるんですよ・・だから手作業でやるのはアナログだなぁって。
651デフォルトの名無しさん:2010/11/20(土) 15:00:42
正規表現でマッチさせて除外するのに手作業は必要ないと思うが
652デフォルトの名無しさん:2010/11/20(土) 15:06:36
あれ、>>644氏のおっしゃってることって、
^test\.abc\.ne\.jp$でマッチさせて、マッチしたらそれを手作業で消して、ってことじゃないんですか?
653デフォルトの名無しさん:2010/11/20(土) 15:28:20
正規表現はある具体的な文字列にマッチするかしないかの
抽象的なパターンでしかないので
スクリプト言語と組み合わせて

ファイルから各行を読み込む
各行について正規表現 ^test\.abc\.ne\jp$ とマッチするなら
  除外
しないなら
  なんらかの処理
  
とかしたほうがいいと思うんだけど、それとは話が別なんだろうか
654デフォルトの名無しさん:2010/11/20(土) 15:36:56
>>653
^test\.abc\.ne\jp$
の条件に合致したものが除外・選択、という処理がなされるということですね
漏れはエディタに各文字列を入力してそれを単に検索してるだけです

自分はプログラムとかはサパーソなんですけど、正規表現については便利だなぁって思いまして。
エディタで色々どんなものか試してるんです。覚えたらファイル検索とかに役立ちますものね
655デフォルトの名無しさん:2010/11/20(土) 16:33:55
>>654
どんな実装してるか分からないエディタではなく
Perl なり JavaScript なりで試せよアホが
というか「文字クラス」の意味すら分からないところを見ると
俺が指示したオライリーのサイ本もまだ読んでないだろ?
やはりお前は口では「勉強中」とか言いつつ、本気で勉強する気など無いことがまた明らかになったな
656デフォルトの名無しさん:2010/11/20(土) 16:35:24
どういう絡み方してんだかw
657デフォルトの名無しさん:2010/11/20(土) 16:55:30
フクロウでもなければリャマでもないあたり
>>655はたぶんPerl忍者
658デフォルトの名無しさん:2010/11/20(土) 17:37:20
>>654 は様々なスレ、中でもソフトウェア板のFirefox関連スレで丸投げ質問を連発して荒らしまくり
Greasemonkeyスレでも「○○するスクリプトを作ってくれ」を連発する一方
自分はJavaScriptを覚えるどころか読む気すらないのに「勉強してるんだから教えろ」と言う人物でして
サイ本を出したのもその流れの中でのことです
詳しくは → http://2chnull.info/r/software/1280677666/676-785 あたりをご参照下さい

といってもこのスレ的には無関係な話でしたね。申し訳ありません
659デフォルトの名無しさん:2010/11/20(土) 17:51:53
気持ち悪い
660デフォルトの名無しさん:2010/11/21(日) 09:35:54
VBScriptで、HTMLのコメントを抽出しようとしたんだけど、
.Pattern = "(^)?(<!.*>)($)?"
でやったら連続したコメント(<!・・・><!・・> 行頭行末含む)が抽出できませんでした。

何が間違ってるのか教えていただきたいです。
661デフォルトの名無しさん:2010/11/21(日) 09:36:36
.*
662660:2010/11/21(日) 10:03:48
>>661
すばやい回答ありがとうございます。
「.*」というのは、0文字以上の任意の文字列と考えて付加したんですが・・何か間違っているのでしょうか?
663デフォルトの名無しさん:2010/11/21(日) 10:09:23
>>662
.*にすると最長一致になる
http://www.rubular.com/r/0Jwha2lugE

.+?って書くと最短一致になるから、
(^)?(<!.+?>)($)?
とすれば出来ると思う
http://www.rubular.com/r/2uXXJArUB7
664デフォルトの名無しさん:2010/11/21(日) 10:12:38
VBはよく知らんが
<!--(.+?)-->
じゃ駄目なのか?
665660:2010/11/22(月) 19:09:45
遅くなりました。回答ありがとうございます。
ですが、最長一致にしろ最短一致にしろ、連続したコメントを拾えないのは同じでは・・
と思ったんですが何故か通りました。
ありがとうございました!

>>664
動作確認しました。ありがとうございます。
以前何かで正規表現書いていたときに、(確かJavaScriptだったかな)
それだと行頭と行末はスルーしてしまったので無意識につけてました。
あれはなんだったんだろう。。今度機会があったらまた試して見ます。。
666デフォルトの名無しさん:2010/11/23(火) 15:59:19
性器表現って使わないほうがいい時ってありますか
667デフォルトの名無しさん:2010/11/23(火) 16:02:06
>性器表現
不特定多数や18歳以下の人が閲覧可能な環境下では控える事をおすすめします
668デフォルトの名無しさん:2010/11/23(火) 16:26:13
「del *.* って何ですか?」と聞いてくるような人にはすすめない
669デフォルトの名無しさん:2010/11/23(火) 17:00:39
del /Q /S /F C:\*.*
670デフォルトの名無しさん:2010/11/23(火) 17:07:42
そういうのは正規表現じゃないからスレチ
671デフォルトの名無しさん:2010/11/23(火) 17:09:10
>>669
実行した
672デフォルトの名無しさん:2010/11/23(火) 18:28:19
.bashrc とかを消すつもりで
rm .* とやったら
親ディレクトリも一緒に消えたでござるの巻
673デフォルトの名無しさん:2010/11/24(水) 13:27:29
その場合、普通は-rがないから止まる。問題は、.sshで、こいつはディレクトリだから消すには-rが必要で……
674デフォルトの名無しさん:2010/11/26(金) 21:41:35
●正規表現の使用環境
C#2010
●内容
IsMatchで"(A|B)"のような比較をしたいんですが、
この場合キャプチャしないよう"(?:A|B)"と書くべき
なんでしょうか?

675デフォルトの名無しさん:2010/11/27(土) 06:59:15
メモリやパフォーマンスが多いに改善される局面ならすべきなんじゃねーの
そうでないなら気にするな
676デフォルトの名無しさん:2010/11/27(土) 17:31:24
>>674
後で使うならキャプチャー、使わないなら(?:で
他人の書いた正規表現をメンテする場合、うかつキャプチャーすると後方参照
の順番が狂ったりするし、キャプチャーする必要がなければしないようにしてる
677デフォルトの名無しさん:2010/11/27(土) 23:58:46
>>675,676
ありがとう。
完全に関数内のみで使う予定だったので
とりあえずそのままにしておきます。

単純なis系の関数なのでキャプチャさせないだけで
ほんの少しでもパフォーマンスが上がるならと考えてました。

678デフォルトの名無しさん:2010/12/07(火) 15:39:32
●正規表現の使用環境
Devas(ディレクトリ内の再帰検索及び置換ソフトでGrep互換)

●検索か置換か?
検索と置換

●説明
HTMLのaタグにonclick属性を追加,または追記したい

●対象データ
数百のSmartyテンプレート
(HTMLやフレームワークのコードを含む文字列)
単純に<a hrefで始まるものばかりではなく,<a class等で始まるものもある

●希望する結果
htmlのaタグから
href="xxxxx-regist"を含んでおり,
かつonclick="xxx"含んでいる または 含んでいないものを検索,置換し
onclickにアクションを追加または追記

<a href="xxx-regist" onclick="追加または追記したい">



対象ページが数百もあり,とても手作業で修正できないため正規表現の力を借りたいです
aタグはすぐにhrefで始まるものばかりではないため,以下のような正規表現を考えたのですが,
なぜか複数行に渡ってしまう結果が抽出されたりとうまくいきません

href=".+\-regist".+?(onclick="(.+)")?.+?\n


ご教授いただけないでしょうか・・
679デフォルトの名無しさん:2010/12/07(火) 15:44:06
正規表現よりもDOMでいじった方が楽そうだな
680デフォルトの名無しさん:2010/12/07(火) 19:36:40
たとえば"..."の間をとるのに"(.+)"なんて書いたらはるかかなたまでマッチングしちゃうぞ。

"([^"]+)" とかしろよ。
681デフォルトの名無しさん:2010/12/07(火) 21:02:32
>>678
メタキャラクタぐらい覚えてからこい
682デフォルトの名無しさん:2010/12/09(木) 16:07:34
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━-┓
┃ ┌────────────────────────ーーー┐ ┃
┃ │            / ̄ ̄\                      │ ┃
┃ │          /  ヽ_  .\                    │ ┃
┃ │          ( ●)( ●)  |     ____            │ ┃
┃ │          (__人__)      |     /      \          .| ┃
┃ │          l` ⌒´    |  / ─    ─   \       │ ┃
┃ │         . {         |/  (●)  ( ●)  \      .| ┃
┃ │           {       / |      (__人__)      |     │ ┃
┃ │      ,-、   ヽ     ノ、\    ` ⌒´     ,/__      .| ┃
┃ │     / ノ/ ̄/ ` ー ─ '/><  ` ー─ ' ┌、 ヽ  ヽ、   │ ┃
┃ │    /  L_         ̄  /           _l__( { r-、 .ト、 . │ ┃
┃ │       _,,二)     /            〔― ‐} Ll  | l) ).│ ┃
┃ │       >_,フ      /               }二 コ\  Li‐' .| ┃
┃ │    __,,,i‐ノ     l              └―イ   ヽ |   . | ┃
┃ │                l                   i   ヽl   . | ┃
┃ └ーーー────────────────────────┘ ┃
┗-━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
          平成22年12月9日(木)
683デフォルトの名無しさん:2010/12/10(金) 07:45:22
[]内のメタ文字(たとえばピリオド)はエスケープする必要はありませんが()内はどうなのでしょうか
(.com|.org)は(\.com|\.org)ってしたほうがいいんでしょうか
684デフォルトの名無しさん:2010/12/10(金) 08:17:52
はい
685デフォルトの名無しさん:2010/12/10(金) 13:41:53
実際に試して確認すればいいじゃん
686デフォルトの名無しさん:2010/12/10(金) 14:27:38
>>683
つーかこれでいいじゃん

\.(com|org)
687デフォルトの名無しさん:2010/12/10(金) 14:31:21
お前はそれで>>683の一行目に答えたことになると思ってるのかと小一時間
688デフォルトの名無しさん:2010/12/10(金) 14:51:55
>>687
答えは>>684で既に出てるだろks
689デフォルトの名無しさん:2010/12/10(金) 15:12:22
リロード忘れた><
690689:2010/12/10(金) 15:13:11
誤爆
691デフォルトの名無しさん:2010/12/10(金) 16:06:12
>>683
したほうがいいか?っていう問題なのか
ピリオドのみと\.ではマッチが異なるぞ
692デフォルトの名無しさん:2010/12/10(金) 20:00:08
>>683
メタ文字とかエスケープとか書いてるやつがいうことじゃねえw
693683:2010/12/11(土) 20:28:32
みなさんレスありがとうございます
モヤモヤが解決しますた\(^−^)/
694デフォルトの名無しさん:2010/12/13(月) 01:08:56
Flexible Renamerというソフトで音楽ファイル名の検索&一括置換したいのですが、

対象: aaa_bbb_01ccc.mp3

結果: aaa_bbb_01_ccc.mp3

"_"区切りの三番目の2桁数字部分が区切られていないヤツを(選び)全て結果のように区切りたい、ということです。

よろしくおねがいします。
695デフォルトの名無しさん:2010/12/13(月) 01:26:24
検索 (.{3}_.{3}_.{2})([^_].+)
置換 $1_$2
696デフォルトの名無しさん:2010/12/13(月) 01:36:35
aaa、bbb、cccはそれぞれ任意の文字数/文字列です(^^;
697デフォルトの名無しさん:2010/12/13(月) 02:20:41
>>696
氏ね

>>695が親切に回答してくれてるだろ
量指定子をほんの少し変えればいいだけ
698デフォルトの名無しさん:2010/12/13(月) 03:08:11
ムダ仕事をさせたのに謝らず、余計な顔文字付けてるその余裕ぶり
そりゃ気分を悪くする人もいるわなぁ
699696:2010/12/13(月) 03:44:49
なにもわからず大変失礼し申し訳ありませんでした m(__)m
只今、にわかですが勉強させてもらいなんとかできました。
ありがとうございました。
700デフォルトの名無しさん:2010/12/13(月) 09:53:50
サクラエディタで、改行部分を連番+改行に置き換えたいのですけど、連番に変換するにはどうしたらよろしいでしょうか?

文字列1
文字列2


1
文字列1
2
文字列2

といったかんじです。
701デフォルトの名無しさん:2010/12/13(月) 11:50:59
正規表現は置換の対象になる場所を見つけるまでのものだから
スレ違いだと思う。
702デフォルトの名無しさん:2010/12/13(月) 12:13:18
バッチスクリプトでどうやるか少しぐぐったら面倒そうだった
Ruby なんかがあれば $ ruby -pe 'puts $.' old.txt > new.txt とかできる
703デフォルトの名無しさん:2010/12/17(金) 12:41:40
撮影した写真に付けた名前を一括変更しようと思い、
正規表現を扱えるFlexible Renamerを用いて色々と試しているのですが、いまいち行いたいことが出来ません。
ファイルに付いている一定の法則でついている共通したタグを、ファイル名の末尾に"移動"させたいのです。
例: [2010-12-13] [IN] AABBCC.nef -> [IN] AABBCC [2010-12-13].nef
検索では \[20..-..-..] と打つことで指定することができたのですが、移動の仕方が検索しても見つかりません…

正規表現では"移動"を行うことは出来ないのでしょうか?
どうかご教示お願いします!
704デフォルトの名無しさん:2010/12/17(金) 12:45:28
検索に (\[20..-..-..\])(.*).nef
置換に $2$1.nefでいけるかな
705デフォルトの名無しさん:2010/12/17(金) 13:19:36
[^]=. ですか?
706デフォルトの名無しさん:2010/12/17(金) 13:35:00
>>705
いいえエラーになります
707デフォルトの名無しさん:2010/12/18(土) 00:08:36
>>703
正規表現始めて3日目の俺にはちょうどいい練習問題だ
固定の部分がはっきりしてるし適当にこんな感じで

検索:(\[.+?\]) (\[.+\]) (.+)\.nef
置換:\2 \3 \1.nef

置換の部分はツールに合わせて\とか$とかかんとかしてくれ
708デフォルトの名無しさん:2010/12/18(土) 02:43:23
置換の数字って0から始まるのと
1から始まるのとどちらが正しいの
709デフォルトの名無しさん:2010/12/18(土) 07:21:35
置換冤罪って怖いですね。
人が混み入ったところに近づきたくない
710デフォルトの名無しさん:2010/12/18(土) 07:39:51
正しいとかねえよ好きにしろ
711デフォルトの名無しさん:2010/12/18(土) 09:37:38
>>704>>707
ありがとうございます!どちらも期待していたとおり働きました!

移動させるのではなく、ファイル名全てをぶつ切りで検索…
そしてそのぶつ切りにした要素?を並び替えると…なるほど
いったんちゃんと正規表現を勉強してみようと思います。
ありがとうございました!
712デフォルトの名無しさん:2010/12/19(日) 05:55:09
「正規表現」ってドイツ語にもちゃんとあるがな。
大昔から。
713デフォルトの名無しさん:2010/12/19(日) 06:01:06
A「セイキヒョウゲンの本買った」
B「チカンでじゅうぶんじゃね」
A「チカンじゃものたりなくてな」
B「俺も挑戦してみようかな、セイキヒョウゲン」
714デフォルトの名無しさん:2010/12/19(日) 07:27:00
君の日本語IMでは「正規表現」って「性器表現」と変換される、と言いたいわけだね。
「置換」は「痴漢」か。


ちなみにおいらの義妹は大人しい子でね、
廊下ですれ違いざまに抱きしめたり猥褻行為を行ったりしても全く怒らない。
親は「嫁に貰ってくれないか?」と焚き付けてくるし。
義妹もそのつもりのような気がしなくもない。
715デフォルトの名無しさん:2010/12/19(日) 07:40:58
>>709
濡れ衣を着せられやすいおいらでも、そういうことは特に経験したことないな。

以前満員電車で、鞄を持っている手がちょうど若い女の股間部分に嵌ってしまい、
身動き取れなくて当惑したことがあった。
だが、こちらが電車の揺れに乗じて股間に手をすりつけようとしているか、
逆に手を引っ込めようと努力しているのかとか、女の側にも見分けはつくのだろう
と思った。
716デフォルトの名無しさん:2010/12/19(日) 08:55:16

717デフォルトの名無しさん:2010/12/19(日) 11:07:22
何 こ の キ モ イ 自 演
718デフォルトの名無しさん:2010/12/19(日) 12:05:04
>>717
妄想の激しい君にはブチロフェノン系のハロペリドールのデポ剤の注射を
お勧めする。デポ剤だから注射一本で一ヶ月は効力あるぞい。
719デフォルトの名無しさん:2010/12/19(日) 15:40:25
正規表現にはマッチするけど、性器表現にはマッチしないようにするにはどうしたらいいでしょうか?
720デフォルトの名無しさん:2010/12/19(日) 16:23:51
^(?![おオ]?(ちん|チン)([こコ]|(ちん|チン)))(?!ペニス)(?!陰茎)(?!竿).*$
721デフォルトの名無しさん:2010/12/19(日) 16:35:08
>>719
正規表現
722デフォルトの名無しさん:2010/12/20(月) 14:51:12
regexと呼ぶ
723デフォルトの名無しさん:2010/12/20(月) 14:53:16
れげっくす
724デフォルトの名無しさん:2010/12/22(水) 19:56:14
2回以上続く改行だけ検索したいのですが、どうやっても1回のみの改行も検索してしまいます。
\r\nを2回ってだけではだめなようで、解決策はありますか?
725デフォルトの名無しさん:2010/12/22(水) 20:04:23
726724:2010/12/22(水) 22:41:51
すみません
使用ソフトはサクラエディタです。

改行が2連続したところを検索したいのです
以下の例で、”2と3”の間、”4と5”の間だけです。
実際の文字列とは違います。

1
2

3
4

5
727デフォルトの名無しさん:2010/12/22(水) 22:42:40
>>724
\r\nを2回でいいだろ
正規表現見直してみろ
728デフォルトの名無しさん:2010/12/22(水) 22:55:33
^\r\n$^\r\n$
はどうですか?
729デフォルトの名無しさん:2010/12/22(水) 22:57:14
こうか。
^\r\n$
730726:2010/12/22(水) 23:00:44
ありがとうございました。

出来ました。
731726:2010/12/22(水) 23:40:04
すみません、後ひとつ聞きたいんですが

2桁以上の整数を、すべて+1する置き換えかたはありますか?
5
50
100
134
1295

5
51
101
135
1296
って感じです
よろしくお願いします。
732デフォルトの名無しさん:2010/12/22(水) 23:44:09
正規表現だけじゃ無理
733デフォルトの名無しさん:2010/12/23(木) 00:30:05
>>731
cygwin導入して、sedとかの文章整形ツールを考えた方が良さそう。
windowsだけでやるならperl。
734デフォルトの名無しさん:2010/12/23(木) 07:19:35
>>731
それはExcelでやれ
735デフォルトの名無しさん:2010/12/23(木) 11:39:59
今更だが、改行が2回以上あるのは空行が1回以上あるのと同じ
736デフォルトの名無しさん:2010/12/23(木) 11:40:21
ああ、よく考えたらファイル名ってわけじゃないのか。
だったらExcelの関数で
=IF(A1>=10,A1+1,A1)
整数かどうかは自分で調べて。
737デフォルトの名無しさん:2010/12/23(木) 12:57:36
1.tabを別の文字列に置換

2.数字の前後にtabを挿入

3.エディタからExcelにコピペ

4.数字以外と数字の列に分かれるているのを確認

5.Excelの機能(関数とか)を使って数字に+1

6.Excelからエディタにコピペ

7.1で置換した文字列をtabに戻す
738デフォルトの名無しさん:2010/12/23(木) 13:16:45
$ ruby -ne 'n = $_.to_i.abs; n += 1 if n >= 10; puts n' < numbers.txt

sedやawkわかんないんでRubyでやったけど正規表現関係なすね
739デフォルトの名無しさん:2010/12/23(木) 16:15:28
awk '{ print $1 + ($1 >= 10) }' file
740デフォルトの名無しさん:2010/12/26(日) 19:20:48
version="1.0"

これを正規表現で表したいのですが、
どのように書けばよいのでしょうか?
741740:2010/12/26(日) 19:21:29
javascriptです。
742デフォルトの名無しさん:2010/12/26(日) 19:25:09
>>740
version="1.0"
743デフォルトの名無しさん:2010/12/26(日) 19:26:50
>>740
どこに正規表現が絡むんだろう
744デフォルトの名無しさん:2010/12/26(日) 19:39:49
.の前に\
745デフォルトの名無しさん:2010/12/26(日) 20:05:41
strはXMLファイルの文字列で先頭行が、<?xml version="1.0"?>となってます。
str.replace(/version="1\.0"/, 'version="1.0" encoding="Shift_JIS"');
としてencoding属性を付けたいのですが上手くいきません。
746デフォルトの名無しさん:2010/12/26(日) 20:27:15
str.replace('version="1.0"', 'version="1.0" encoding="Shift_JIS"');

通常の置換でおk
747デフォルトの名無しさん:2010/12/26(日) 20:28:05
//で囲んだ文字列ってダブルクォートはエスケープしなくてもいいの?
748デフォルトの名無しさん:2010/12/26(日) 20:39:23
>>746
できませんでした。
XMLファイルの文字コードと異なる文字コードでソースを
書いてるから一致しないのかも。もう少しいろいろやってみます。
レスくれた方ありがとうございました。
749デフォルトの名無しさん:2010/12/26(日) 20:44:30
>>748
str = str.replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="Shift_JIS"?>');
750デフォルトの名無しさん:2010/12/26(日) 20:56:34
>>749
それもやってみたのですが、だめでした。
MSXML2.DOMDocumentの制限ですかね。
751デフォルトの名無しさん:2010/12/26(日) 20:59:01
ていうかその置換ならわざわざ全部拾わなくてもいいんじゃない?
752デフォルトの名無しさん:2010/12/28(火) 23:33:01
おまんこにはマッチするけど、まんこにはマッチしない性器表現ってどうかくんですか?
753デフォルトの名無しさん:2010/12/29(水) 01:48:06
つまんね氏ね
754デフォルトの名無しさん:2011/01/12(水) 01:21:40
●正規表現の使用環境
Java1.6
●検索か置換か?
検索(Stringクラス String[] split(String regex)メソッドによる文字列分割)
●説明
CSVファイル中の一行を対象文字列とし、
その文字列中初出の\s*,\s*をデータ区切り子として見なしマッチさせる。
(その前後で文字列を2つに分割)
●対象データ
aaa,bbb,ccc
aaa, bbb, ccc
aaa , bbb , ccc
●希望する結果
aaa,bbb,ccc
^
aaa, bbb, ccc
^^
aaa , bbb , ccc
^^^
●希望しない結果
aaa,bbb,ccc
^ ^
aaa,bbb,ccc
^^^^
aaa, bbb, ccc
^^^^^^^^
etc...
自分で考えた(?<^[^,]*)\s*,\s*では
java.util.regex.PatternSyntaxException: Unknown look-behind group near index 8
(?<^[^,]*)\s*,\s*
^
というような例外が出てしまいました。
755デフォルトの名無しさん:2011/01/12(水) 01:29:20
すいません。行頭のスペースが消えておかしくなりましたので書き込み直します。

●正規表現の使用環境
Java1.6

●検索か置換か?
検索(Stringクラス String[] split(String regex)メソッドによる文字列分割)

●説明
CSVファイル中の一行を対象文字列とし、
その文字列中初出の\s*,\s*をデータ区切り子として見なしマッチさせる。
(その前後で文字列を2つに分割)

●対象データ
aaa,bbb,ccc
aaa, bbb, ccc
aaa , bbb , ccc

●希望する結果
"aaa"と"bbb,ccc"に分割
"aaa"と"bbb, ccc"に分割
"aaa"と"bbb , ccc"に分割

●希望しない結果
"aaa"と"bbb"と"ccc"に分割
etc...

自分で考えた(?<^[^,]*)\s*,\s*では
java.util.regex.PatternSyntaxException: Unknown look-behind group near index 8
というような例外が出てしまいました。

よろしくお願いします。
756デフォルトの名無しさん:2011/01/12(水) 02:08:06
String[] split(String regex, int limit) で limit を 2 にすればいいのでは
757デフォルトの名無しさん:2011/01/12(水) 09:34:57
>>756
有り難うございます。
確かに処理を書き換えれば容易なのですが、後学のために、
できれば正規表現だけで解決できればと考えていました。。
758デフォルトの名無しさん:2011/01/12(水) 12:40:36
\s*,\s*(?=.*,)
759デフォルトの名無しさん:2011/01/12(水) 21:34:03
>>758
有り難うございます。
マッチ例が不適切で、そのように受け取られても仕方ないのですが、
処理対象は一般のCSVファイルの一行なので、
それだと1行に3項目でない場合(2項目以下や4項目以上)、はうまく分割できません。

できれば正規表現の範疇で解決したかったのですが、無理そうならば
limitを2の案で行こうと思います。
760デフォルトの名無しさん:2011/01/13(木) 17:53:06
●正規表現の使用環境
C#

●検索か置換か?
検索

●説明
=の連続がある行で挟まれた部分を抽出したい

●対象データ
ゲスト========================
ほげほげ
ほげほげほげ
プロフィール===================
はげ
はげはげ
=============================

●希望する結果
"ほげほげ\nほげほげほげ"
"はげ\nはげはげ"

結果に=の行が含まれていても構いません
=は2つ以上連続している行が対象です

^.*={2,}$(?'block'.+?)^.*={2,}$ とやってみましたがマッチしませんでした
MultiLineオプションは指定しています
それと対象文字列から\rは事前に除去しています

よろしくお願いします
761デフォルトの名無しさん:2011/01/13(木) 18:27:37
^と$はなぜつけてるの?
762760:2011/01/13(木) 19:19:29
>>761
=連続が含まれる行、と言う意味で付けてます
それと今見直してみると試した正規表現が違ってました
本当は↓これ
(?'blockhead'^.*?={2,}$)(?'blockbody'.+?)(?'blockfooter'^.*?={2,}$)
763デフォルトの名無しさん:2011/01/13(木) 22:07:36
^(?'blockhead'.*={2,})$\n^(?'blockbody'.+\n.+?)$\n^(?'blockfooter'.*={2,})$
764デフォルトの名無しさん:2011/01/13(木) 22:53:34
rfc3986の付録Bに
URIを解析する正規表現としてこんなのが載っています

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
これをJavaに移植したいんですが
どの文字をエスケープすればいいのかわかりません

"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"
今これでやってるのですが、URLに"が含まれていても解析できてしまうので
どこか間違ってるみたいです
どなたか教えてもらえないでしょうか
765デフォルトの名無しさん:2011/01/13(木) 23:33:09
>>759
もう見てないかも知れんが

最初の\s*,\s*だけにマッチさせるのは難しそうだから
^([^,]*[^,\s])?\s*,\s*(.*)
こんな感じで1行全部マッチさせて必要なとこだけキャプチャしたら?
これなら正規表現だけ。
766デフォルトの名無しさん:2011/01/14(金) 02:28:04
>>764
それ、「URIを解析(分解)する正規表現」であって、
「正当なURIだけにマッチする正規表現」じゃないから
その結果で間違い無いと思うよ
何をしたいのかな?

767760:2011/01/14(金) 12:44:58
>>763
残念ながらヒットしないようです
正規表現のデバッグってどうやればいいんでしょうね・・・
768デフォルトの名無しさん:2011/01/14(金) 13:20:32
>>767
ggrks
769760:2011/01/14(金) 13:23:03
>>768
要するに知らないのですね
わかります
770デフォルトの名無しさん:2011/01/14(金) 13:27:17
知ってるがお前の態度が気に入らない^^
771デフォルトの名無しさん:2011/01/14(金) 13:35:28
>>767
正規表現の欠点というより、欠陥。つまり、ほとんどの
メジャー言語の欠陥。
772768:2011/01/14(金) 14:35:41
>>769
「正規表現 チェック」で腐るほど情報が出るがお前の眼は空洞か?nullなのか?
「正規表現のデバッグ」なんて言ってる奴には理解できないのかもしれんが
773760:2011/01/14(金) 15:47:34
>>772
ググってTOP100くらい見たけど、それで?
マッチしない時に何処が悪いかこれで判るのか?
おまえさんの前頭葉がnullなんじゃねの?

そうこうしてる間に>>763さんのをヒントに自己解決したよ
^(?'blockhead'.*={2,})$\n(?'blockbody'(.*\n)*?)(?=.*={2,}\n)

>>763さんに感謝を
>>768は樹海に逝け
もし763=768なら感謝された後樹海に逝け
774デフォルトの名無しさん:2011/01/14(金) 15:49:28
マッチしないときは>>773の頭が悪いと分かるよ
775デフォルトの名無しさん:2011/01/14(金) 16:12:39
『プリンターがあります。これはプリンタです。プリンタを使います。プリンターの変更です。』
という文がある時、文中のプリンタをプリンターになおすにはどのような正規表現を
用いればよいでしょうか?
776デフォルトの名無しさん:2011/01/14(金) 16:15:41
プリンタ(?!ー)
777デフォルトの名無しさん:2011/01/14(金) 16:17:31
今なら否定先読み使うんだろうけど昔は

「プリンタ」を「プリンター」に置換
「プリンターー」を「プリンター」に置換

と2段階でやったもんさ。
778デフォルトの名無しさん:2011/01/14(金) 16:19:23
プリンタ(?!ー) -> プリンター
プリンター? -> プリンター
プリンタ -> プリンター & プリンターー -> プリンター
779デフォルトの名無しさん:2011/01/14(金) 16:20:56
>>776-777
プリンタ(?!ー)を使おうと思います。回答ありがとうございました。
780デフォルトの名無しさん:2011/01/14(金) 16:45:45
>>773
>>772が何を言いたかったのかは知らんがwチェッカーはいろいろ出てくるな
チェッカーがあっても>>772の頭じゃ使えないわけかw
可哀想になw>>772>>773もwwwww

>>77
俺も考えるのがめんどくさいときはそうしてるw
781デフォルトの名無しさん:2011/01/14(金) 16:46:01
>>77じゃなくて>>777だったww
782デフォルトの名無しさん:2011/01/14(金) 19:06:47
>>766
そうだったんですか、とても明快な回答ですっきりしました
元は、あるRFCに従ってパーサを書いていて、
そこだけ正規表現で楽が出来るのかなと思ったんですが
正規表現のが苦手なので
素直にBNFを書き下すことにしました
どちらにせよ有効なURIかは結局調べないとダメっぽいですね
特にエンコードがらみは大変そです
783デフォルトの名無しさん:2011/01/14(金) 20:37:16
>>773
>自己解決したよ

遅かったか。せっかく考えたんで参考までに

ヘッダー用
^((.+(?<=[^=]))={2,})\n
ボディ用
^(((.(?<!==))*\n)+)
フッター用
^(=+)\n

全体
(^((.+(?<=[^=]))={2,})\n^(((.(?<!==))*\n)+)){2}^(=+)\n

おまけ(ボディ)
={2,}を不許可
^(((.(?<!==))*\n)+)
行末以外の={2,}を許可
^(((.*(?<=[^=])=?)\n)+)
784デフォルトの名無しさん:2011/01/14(金) 21:03:46
>>782 そういうこと
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
は、URIをprotocol、host、pathname、search、hashに分解するためだけのもの

有効なURIかを厳密にチェックするのはものすご〜く大変、以下参考
http://www.din.or.jp/~ohzaki/perl.htm
785デフォルトの名無しさん:2011/01/14(金) 21:30:36
このサイトは昔みたことがあるけど、すごいですね
「万能な正規表現」ってやつをいつか理解してみたいです
786760:2011/01/17(月) 12:50:05
>>783
おお、わざわざありがとうございます
今後の参考にします
787デフォルトの名無しさん:2011/01/23(日) 14:51:37
スレの趣旨に反するがURLの文字列的なチェックなんて大体でいいんだよ。
本質的に有効かどうか(404などが出ない)というチェックは結局できてないんだから。
788デフォルトの名無しさん:2011/01/23(日) 15:15:54
URIが実際に存在するかは
仕様通りにURIがパース出来るかということと全く関係がない
789デフォルトの名無しさん:2011/01/31(月) 00:02:08
空行の検索を調べていたらどの解説サイトも ^\n で検索していました
^\n$ ではだめなのでしょうか
790デフォルトの名無しさん:2011/01/31(月) 00:37:14
いいよ
791デフォルトの名無しさん:2011/01/31(月) 00:46:01
ありがとうございます
792デフォルトの名無しさん:2011/01/31(月) 21:59:27
>>789
\n\rのみの行に対応できる?
793デフォルトの名無しさん:2011/01/31(月) 22:19:32
>>792
無視してもいいだろ。
794デフォルトの名無しさん:2011/01/31(月) 23:02:05
^$
795デフォルトの名無しさん:2011/02/01(火) 09:12:37
>>792
それ行として破綻してるだろ。
796デフォルトの名無しさん:2011/02/02(水) 12:37:49
最近正規表現はじめたんだがなんでもいいから同じ文字2回繰り返すってどうすればいいんかな?
797デフォルトの名無しさん:2011/02/02(水) 12:47:23
(.)\1
798デフォルトの名無しさん:2011/02/02(水) 12:48:13
(.)\1
799デフォルトの名無しさん:2011/02/02(水) 12:54:45
大事なことなので二回繰り替えしました
800デフォルトの名無しさん:2011/02/02(水) 16:58:48
>>797-799
うまいw
801デフォルトの名無しさん:2011/02/02(水) 17:09:25
やるじゃんw
802デフォルトの名無しさん:2011/02/03(木) 12:58:40
Abc_def, Ghi_jkl ,Mno_pqr
という文章を、
AbcDef, GhiJkl ,MnoPqr
に変えたいのですが、どのような正規表現を書けばいいでしょうか?
803デフォルトの名無しさん:2011/02/03(木) 13:04:44
正規表現じゃ無理です
適当につかる言語で書いた方が早い
804802:2011/02/03(木) 13:12:26
そうですかーorz
ありがとうございます
805デフォルトの名無しさん:2011/02/03(木) 13:29:00
正規表現と他の言語を組み合わせると楽だな

C#だと
var input="Abc_def, Ghi_jkl ,Mno_pqr";
Regex.Replace(input, "_([a-z])", i => i.Result("$1").ToUpper())
806デフォルトの名無しさん:2011/02/03(木) 16:15:09
807デフォルトの名無しさん:2011/02/06(日) 17:49:31
(.+)+
これってどういう意味を表している?
808デフォルトの名無しさん:2011/02/06(日) 17:55:28
(任意の文字の1文字以上の繰り返し)の繰り返しなので

すももももももももものうち の場合
(す)(ももももももももも)(の)(う)(ち)
とヒットするに違いない
809デフォルトの名無しさん:2011/02/06(日) 18:01:40
>>807
captureに全部食われるんじゃない
実質 (.+) と同じ。つまり空でない文字列
810デフォルトの名無しさん:2011/02/06(日) 18:21:07
>>808-809
そうなのか・・・
梟本で"=XX==========="に対して
'X(.+)+X'って正規表現を使ってたんだけど
イマイチ理解できなくて
811デフォルトの名無しさん:2011/02/06(日) 18:25:21
>>810
何版の何ページ?小見出しも教えてくれると助かる
812デフォルトの名無しさん:2011/02/06(日) 18:25:39
>>810
何ページくらい?
813デフォルトの名無しさん:2011/02/06(日) 18:30:08
>>811-812
第3版の第4章、4.1.5.2、p142-143
正規表現エンジンの判別による説明の件
814デフォルトの名無しさん:2011/02/06(日) 18:30:36
かぶってしまった
815デフォルトの名無しさん:2011/02/06(日) 18:37:04
今emacsでX\(.+\)+Xを試したけど
=XX===========
 マッチしない
=XhhhooogggeeeX===========
 hhhooogggeee にマッチ
=XすもももももももものうちX===========
 すもももももももものうち にマッチ
816815:2011/02/06(日) 19:03:06
amazonのなかみ検索で該当のページをみたけど、
その正規表現はマッチさせるのが目的じゃなくて、
NFAだと時間がめちゃかかるよっていうことが伝えたい内容だね
だからわざとマッチさせずに
バックトラックするような例を選んであるのだと
817デフォルトの名無しさん:2011/02/06(日) 19:25:59
>>810
なんとなくわかるレベルの漏れが言うのもなんだけど
4章全部読んで足りなければ
オートマトンの載ってる教科書も読んだ方がいいと思うよ

フクロウ本はDFA/NFAの話をしてるのに図を載せてないのがネック
818デフォルトの名無しさん:2011/02/06(日) 19:30:40
あれ一発でDFA/NFAが理解できたとか言ってるやつは、はったりだよなあ。
819デフォルトの名無しさん:2011/02/08(火) 18:28:41
正規表現の使用環境は秀丸です。
やりたいことは置換で、VBのソースを編集したいのが目的です。

例:
・Before
Dim s1, s2, s3 As String

・After
Dim s1 As String, s2 As String, s3 As String

上記のように、1行で複数の変数宣言を行っている箇所で
型の宣言を省略している箇所を、最後の型宣言で補いたいのですが
どのように指定してやればよいでしょうか?
820デフォルトの名無しさん:2011/02/08(火) 19:28:53
","を" As String,"
821デフォルトの名無しさん:2011/02/08(火) 19:39:22
型名はString固定じゃなく
Dim 識別子のリスト As 型名 → Dim 識別子1 As 型名, 識別子2 As 型名, ...
ってことじゃないか

識別子のリストの要素数が可変であれば
正規表現だけでやるのは厳しい気がするけどどうなんだろう
822デフォルトの名無しさん:2011/02/08(火) 19:50:06
言葉不足ですみません

>>821
その通りです
要素数も可変なんですが難しそうですか・・・
無理そうであればマクロを組もうかと思ってます
823デフォルトの名無しさん:2011/02/08(火) 20:19:30
プログラムで書いても相当むずかしそう・・・
824デフォルトの名無しさん:2011/02/08(火) 20:31:15
そうか?
825デフォルトの名無しさん:2011/02/08(火) 20:33:52
目視で直した方が安全だと思う。
826デフォルトの名無しさん:2011/02/08(火) 20:35:31
秀丸の正規表現かも、書式が正しいかもチェックしてないが
要素数が可変じゃないならこんな感じのやり方は。
可変といっても種類はせいぜい多くても10種類ぐらいだろうから
この考え方で数パターン書いて対応すれば

/([^,]*)(,)([^,]*)(,)([^,]*)(,)(\s*As\s*)([a-z]*)/\1 as \8,\3 as \8,\5 as \8,\7\8/
Dim s1, s2, s3,s4 As Stringを
(Dim s1)(,)( s2)(,)( s3)(,)(s4 As )(String)と分解
827デフォルトの名無しさん:2011/02/08(火) 20:47:19
>>826
なるほど、そういった感じの正規表現をプログラムで動的に
例えば2〜10までのようにして繰り返しで組み上げて制御すれば
実現できそうです
828デフォルトの名無しさん:2011/02/09(水) 15:07:12
質問です
<html><body>abcdefg</body></html>のように間に挟まれたabcdefgだけを取り出すには
やはり
<html><body>(?<label>(\\w+))</body></html>
のようにグループ化を行って後から
Groups["label"].Valueで取り出すのがスマートな方法ですか?

C#です

実際はもっと長い文字列から抽出します
何かもっといいアイディアがありましたらご教授願います
829デフォルトの名無しさん:2011/02/09(水) 18:04:26
C#なら、前方一致と後方一致があるよ。
これを使えば、マッチ部分全体の取得だけで、挟まれた箇所を取り出すこともできる。
830デフォルトの名無しさん:2011/02/09(水) 20:14:08
>>829
ありがとうございます。早速調べて見ます。
831デフォルトの名無しさん:2011/02/13(日) 00:50:36
質問です
C++をC#にするにはどうすればよいですか
832デフォルトの名無しさん:2011/02/13(日) 00:54:07
s/C\+\+/C#/
833デフォルトの名無しさん:2011/02/13(日) 04:23:23
●正規表現の使用環境
C

●説明
Apacheのログから一部分を抜き出して検索したい

●対象データ
host.ne.jp - - [11/May/2011:12:22:15 +0900] "GET /~akasata/index.xml?gat=tPFnlVCP8aUYq8jjPqA=&BSdebug=AV/w3.3r1.1/ HTTP/1.1"
200 6703 "https://server.ne.jp/" "Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"
(以上1行)
●希望する結果
1件目
host.ne.jp
2件目
/~akasata/index.xml

以上のような検索を実装しようとして、
regerror(regcomp(&preg, "(.+) - [^[] \\[.+\\] \"[^\" ]+ ((/~akasata/[^\"]+)\\?g.+)*([^\"]+) [^\" ]+\".+", REG_EXTENDED|REG_NEWLINE), &preg, errbuf, sizeof(errbuf));
以下のような正規表現を用いた(Cのエスケープが混じっているため見辛ければすいません)のですが、
後ほど検索対象を調べて一部不要な部分があったため
regerror(regcomp(&preg, "(.+) - [^[] \\[.+\\] \"[^\" ]+ ((/~akasata/[^\"]+)\\?g.+) [^\" ]+\".+", REG_EXTENDED|REG_NEWLINE), &preg, errbuf, sizeof(errbuf));
以下のように正規表現を変更したところ、同じ結果を返すのにもかかわらず
実行速度が4倍以上もかかるようになってしまいました。原因かわかる方教えていただけないでしょうか?
834デフォルトの名無しさん:2011/02/13(日) 18:53:26
Cの標準ライブラリには正規表現を扱えるもんがなかったと思うし
regcompとかの関数名から察するにregex.h使っていると勝手に推測する
んで、これはPOSIX準拠ってことでPOSIX NFAエンジンで動作していると思うけど
こいつは途中のオプションによってマッチしたとしても、引き続いて出来る限り
最長のマッチしたものを報告するように処理しまくる
前者と後者のパターンだと全走査する回数が違ってくるから
それで時間も変わっいるのでは?
835デフォルトの名無しさん:2011/02/13(日) 18:56:50
ああPOSIX準拠ってことで必ずしもPOSIX NFAエンジンって訳でもないんで
regex.hの内部動作が何なのかは推測の域はでないってことでご勘弁を
836デフォルトの名無しさん:2011/02/16(水) 18:09:45
●正規表現の使用環境
javascript(各種ブラウザ(javascriptに対応している携帯端末も)で動かしたいです)

●検索か置換か?
検索

●説明
<foo bar="HOGE" baz="PIYO"> (または <foo baz="PIYO" bar="HOGE"> )で
要素fooの属性barの値がHOGEの場合の属性bazの値(この場合PIYO)を得たいのですが
属性barと属性bazの順番が不定なのでよくわかりません
どう書けばいいですか?
DOMなら自分にもわかるのですが正規表現だと難しくて詳しい人に頼るしかありません

/<foo\s(?:bar="HOGE"\sbaz="([^"]*)"|baz="([^"]*)"\sbar="HOGE")>/
等とするとキャプチャする括弧が二つになってしまって正規表現の外側での処理が必要になってしまって・・・
正規表現一回だけで完結するように書きたいです

さらに <foo bar="HOGE" baz="PIYO" qux="FUGA"> みたいな感じに
要素fooの属性barの値がHOGEでさらに属性quxの値がFUGAの場合の属性bazの値(この場合PIYO)を得たいのですが(こっちが本命です)
どう書けばいいですか?(この場合も属性の順番は不定です)

●対象データ
<foo bar="HOGE" baz="PIYO"> (または <foo baz="PIYO" bar="HOGE"> )
さらに <foo bar="HOGE" baz="PIYO" qux="FUGA"> みたいなのも(それぞれ別々で)

<foo>の前後に何か文字が入っていたり大文字か小文字かが不定だったり
「<foo>」が「<foo />」となっていたり「"」が「'」だったり場合によってはなかったり
属性の前後のスペースが複数あったり改行が含まれていたりするかもしれませんがそのへんは自分でなんとかできると思います

●希望する結果
PIYO
(baz属性(仮)の値(この場合PIYO(仮)))
837デフォルトの名無しさん:2011/02/16(水) 18:25:04
なんでDOMで処理しないの?
838デフォルトの名無しさん:2011/02/16(水) 18:28:36
JavaScriptの正規表現ってlookbehindないのかー
839デフォルトの名無しさん:2011/02/16(水) 18:30:25
順不同な並びを正規表現で一発は無理じゃないかな。
javascript使うなら素直に複数に分けて処理したほうが楽だよ
840836:2011/02/16(水) 18:53:26
どうもありがとうございます
正規表現マスターには簡単な問題で
自分がアホだからわからないんだと思っていました
(JavaScriptの正規表現では)どんなに頑張っても無理なんですね
>>839さんの言うとおり複数回に分けようと思います
841デフォルトの名無しさん:2011/02/16(水) 19:12:40
正規表現の本を書いています
良書があれば教えてください
842デフォルトの名無しさん:2011/02/16(水) 19:27:11
843デフォルトの名無しさん:2011/02/16(水) 19:33:52
書いています!?
844デフォルトの名無しさん:2011/02/16(水) 19:40:20
参考書聞かなきゃ本が書けない奴の書いた本を買う消費者は哀れだな。
845デフォルトの名無しさん:2011/02/16(水) 22:17:49
正規表現クックブックってどんな感じ?
フクロウ本持っていれば必要ないかな
846デフォルトの名無しさん:2011/02/16(水) 23:56:37
練習問題集という感じがしますがどうでしょう。
847デフォルトの名無しさん:2011/02/17(木) 14:20:11
>>841
これはもちろん読んでいるんだろうな。
Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman (ISBN 0-201-10088-6)
848デフォルトの名無しさん:2011/02/17(木) 17:01:10
>>841
もう読んでるだろうけど「オートマトン言語理論計算論」。
849841:2011/02/17(木) 19:52:57
本当に親切にありがとうございます
早速買って読んでみます

なんか正規表現する人って然りげ無くてかっこいいよね
余計なことは言わない、普段は無口だけど発する言葉は真意を付いている
そんな感じ
850628:2011/02/17(木) 21:53:15
>>849
褒めてくれてありがとよ
851デフォルトの名無しさん:2011/02/20(日) 13:06:57.19
(i)
゜∪゜
852デフォルトの名無しさん:2011/02/20(日) 13:10:44.31
ピーターパンですね。わかります
853デフォルトの名無しさん:2011/02/21(月) 13:06:43.89
正規表現する do regualr expression
854デフォルトの名無しさん:2011/02/21(月) 15:08:09.00
正規表現刷る print regualr expression
855デフォルトの名無しさん:2011/02/21(月) 22:41:57.17
regexってみんなはどんな風に読んでる?
レジックス?レギックス?レゲックス?レジクス?
856デフォルトの名無しさん:2011/02/21(月) 22:47:41.73
レグエックス
857デフォルトの名無しさん:2011/02/21(月) 22:58:59.22
右に同じ
858デフォルトの名無しさん:2011/02/21(月) 23:24:27.38
もっとregexする!
859デフォルトの名無しさん:2011/02/22(火) 00:31:11.79
レゲェ・・・
860デフォルトの名無しさん:2011/02/22(火) 10:51:11.09
regex はともかく RegExp は読めない。
861デフォルトの名無しさん:2011/02/22(火) 16:52:04.42
れげくすぷ
862デフォルトの名無しさん:2011/02/22(火) 19:26:38.03
れげすぷ
863デフォルトの名無しさん:2011/02/22(火) 20:32:08.24
れぐいーえっくすぴー
864デフォルトの名無しさん:2011/02/23(水) 02:01:04.56
れじぇっくす、れぐえくすぷ
865デフォルトの名無しさん:2011/02/23(水) 19:59:15.01
質問させてください。
「<img」以外の「<」を「&lt;」に置き換えるにはどう書けば良いでしょうか?
#「img(中略)>」以外の「>」も「&gt;」に置き換える必要ありがますが、そちらはまた別途考えるとして。。
言語はPHPです。よろしくお願いします。
866デフォルトの名無しさん:2011/02/23(水) 20:26:52.60
<(?!img)
<
とりあえず正規表現はこれ
PHPでどうやるかはわからん
867デフォルトの名無しさん:2011/02/23(水) 20:29:14.89
おっと2行目は「<」ね
868デフォルトの名無しさん:2011/02/23(水) 20:29:54.53
あれ?半角で書くと勝手に変換されんのか
869865:2011/02/23(水) 20:38:31.16
>>866
できました! ありがとうございます。

>#「img(中略)>」以外の「>」も「&gt;」に置き換える必要ありがますが、そちらはまた別途考えるとして。。
こっちも何かヒント頂けたら嬉しいです。ためしに
'/(?!<img[^>]*)>/';
とやってみましたが駄目でした
870デフォルトの名無しさん:2011/02/23(水) 20:51:59.61
ほい
(?!img)(.*)(>)
\1&gt;
871865:2011/02/23(水) 22:06:05.47
>>870
/(?!img)(.*?)>/ で判定かけてみたのですが、
文字列"01234>abcdefg<img src>"ですと
abcdefg<img src>
が引っかかってしまって、imgを含んでいても弾いてくれません。

単独の>、<を弾きつつ、imgの変換を除外するとなると、一発で判定するのは無理で、
(1) /(.*?)>/の判定後にimgが含まれていないか判定するか、
(2) /<(?!img)(.*?)>/ と(単独の>、<の変換を諦めて)セット<>で判定
でしょうか?
872デフォルトの名無しさん:2011/02/23(水) 22:34:52.18
だめだわからん
ほかの人待ち
873デフォルトの名無しさん:2011/02/23(水) 22:44:01.15
> を全部&gt;に変えた後、img の次の&gt;を > に戻せばいい。
874デフォルトの名無しさん:2011/02/23(水) 22:44:38.74
<(.*?)>
875デフォルトの名無しさん:2011/02/23(水) 22:50:10.94
<(^o^)>
876デフォルトの名無しさん:2011/02/23(水) 22:54:25.37
>873
あ、なるほど
877デフォルトの名無しさん:2011/02/23(水) 23:10:16.82
>>873
それだと元から&gt;が合ったときに死ぬる

<img src="...&gt;..." />
         ↓
<img src="...&gt;..." /&gt;
         ↓
<img src="...>..." /&gt;

最初にアンパサンドを&amp;に変換して最後に戻すとかしないと
878デフォルトの名無しさん:2011/02/24(木) 00:03:15.27
>>875
syntax err
879デフォルトの名無しさん:2011/02/24(木) 03:43:12.62
>>865
preg系で
'/(?!<img )<([^>]*)>/i'
'&lt;\\1&gt;'
880デフォルトの名無しさん:2011/02/24(木) 04:19:37.11
被ってる部分と、文字クラスを修正
'/<(?!img )([^<>]*)>/i'
881デフォルトの名無しさん:2011/02/24(木) 04:47:19.41
駄目だ
ereg系(POSIX)も調べたけど、否定先読みが出来ない…orz
つー訳で、>>879-880のpreg系(PCRE)を使ってくれ
882872:2011/02/24(木) 14:24:33.92
これでどうかな
<((?!img)[^<>]*)>
883デフォルトの名無しさん:2011/02/24(木) 14:36:38.69
よくみたらすぐ上に同じやつ書いてあったわ(^p^)
884デフォルトの名無しさん:2011/02/24(木) 14:50:23.58
((<(img[^<>]*>|(?!img))|(?<=>))[^<>]*)>
\1&gt;

一応、"<"より先に変換することを想定。後でも基本的に問題ないが

<img <>     → マッチする
<img &lt;> → マッチしない

という違いがある
885デフォルトの名無しさん:2011/02/24(木) 16:09:25.08
Perl なら

s/<([^\s]+)([^>]*)>/$1 eq 'img' ? "<$1$2>" : "<$1$2>"/eg

とかできるけどPHPでは出来ねぇの?
886デフォルトの名無しさん:2011/02/24(木) 16:22:04.48
preg_replace_callback使えばできるよ
887デフォルトの名無しさん:2011/02/24(木) 16:22:04.76
preg_replace_callback使えばできるよ
888デフォルトの名無しさん:2011/02/24(木) 17:22:40.99
>>871
>が引っかかってしまって、imgを含んでいても弾いてくれません。
>単独の>、<を弾きつつ

>(2) /<(?!img)(.*?)>/ と(単独の>、<の変換を諦めて)セット<>で判定

単独(タグ以外?)の「>」と「<」は、上を見ると、変換したくない意味に見えるし、
下を見ると、変換したいようにも見えるけど、最終的に、変換したいの?したくないの?
889デフォルトの名無しさん:2011/02/24(木) 19:13:26.82
例えばダブルクォーテーションで括った部分が文字列とする場合は
単に/"[^"]*"/でマッチできるけど、文字列以外の部分をマッチさせるには
どうすればいい
890デフォルトの名無しさん:2011/02/24(木) 19:28:22.18
>>889
意味分かんない
891デフォルトの名無しさん:2011/02/24(木) 19:40:27.10
AB"CD"EF"とあったら、ABEF"の部分を欲しいと言ってるのかも。
892デフォルトの名無しさん:2011/02/24(木) 19:49:09.22
だったら文字列部分を空白に置換するだけじゃね?
893デフォルトの名無しさん:2011/02/24(木) 19:55:28.39
ルールが明確でなければ無理
>>891の場合、文字列は「CD」「EF」「CD"EF」のどれなのか分からん
894デフォルトの名無しさん:2011/02/24(木) 21:15:35.80
いや分かるだろ。
895デフォルトの名無しさん:2011/02/24(木) 21:33:17.32
文字列以外ってなんだよ
ダークマターでもひっかけるのか
896デフォルトの名無しさん:2011/02/24(木) 21:34:54.19
文字列といえば空だろうが何だろうが文字列でしょ。
むしろ正規表現が文字列以外の何にマッチするのかと。

というのは置いておいて、多分「文字列変数」のことなんだろうな。

それを踏まえて、「『文字列変数を囲むダブルクォーテーション』以外の
ダブルクォーテーションにマッチさせたい」とエスパーしてみたがどうか。
897デフォルトの名無しさん:2011/02/24(木) 21:47:02.96
>>892と同じことだけど

irb(main):001:0> 'AB"CD"EF"'.split(/"[^"]*"/)
=> ["AB", "EF\""]
898デフォルトの名無しさん:2011/02/25(金) 10:59:37.12
>>896
「文字列変数」は初めて聞いた。おらっちの地方では「文字列リテラル」って言うな。
899デフォルトの名無しさん:2011/02/25(金) 12:42:46.26
string型の変数に突っ込んでるの引っ張ってくるなら文字列変数でいいんでね?
で、コード上の定数操作ならリテラル
900デフォルトの名無しさん:2011/02/25(金) 12:47:45.34
そんな俺用語を導入されても困るだ
901デフォルトの名無しさん:2011/02/25(金) 13:26:47.64
リテラルって変数含まないじゃん
902デフォルトの名無しさん:2011/02/25(金) 18:28:37.60
まぁ待て
文字列リテラル→文字列定数→文字列の定数
文字列変数→文字列の変数
つまり>>896が言ってることはperlとかでやる
$hoge = "hoge";
$fuga = "$hoge\n";
変数を含んでいる"$hoge\n"を除外して"hoge"にマッチさせたいとエスパーしてみたがどうか
903デフォルトの名無しさん:2011/02/25(金) 22:37:32.42
俺も文字列変数って聞いたことないけど、どこら辺の言語で使われてんの?
904デフォルトの名無しさん:2011/02/25(金) 23:48:54.06
イメージとしてはString型変数のことなんかね?
905デフォルトの名無しさん:2011/02/26(土) 02:28:08.03
●実装しようとしている正規表現
^[1-9]\d{3}$

PHPのpreg_matchでいえば
preg_match (/^[1-9]\d{3}$/, $subject)

●正規表現の使用環境
PHP 5.2
●検索か置換か?
検索
●説明
4桁の西で0000のみを除外したい。
西暦1万年(10000)以上は考慮しない

0000 ×
1000〜9999 ○

●対象データ
説明の項を参照
●希望する結果
説明の項を参照
906デフォルトの名無しさん:2011/02/26(土) 02:31:13.63
●実装しようとしている正規表現
^[0][1-9]$|^[1-9]\d$

PHPのpreg_matchでいえば
preg_match (/^[0][1-9]$|^[1-9]\d$/, $subject)

●正規表現の使用環境
PHP 5.2
●検索か置換か?
検索
●説明
2桁の月で00のみを除外したい。

00   ×
01〜12 OK(13〜99は他の方法で除外しています)

●対象データ
説明の項を参照
●希望する結果
説明の項を参照
907デフォルトの名無しさん:2011/02/26(土) 02:34:13.55
>>905
>4桁の西で0000のみを除外したい。
>西暦1万年(10000)以上は考慮しない
>0000 ×
>1000〜9999 ○
0001は?
と言うか、そのままで良いじゃんって、
もしかして0001〜0999を○にしたいって話?
908デフォルトの名無しさん:2011/02/26(土) 02:37:41.92
●実装しようとしている正規表現
^(\d{1,6})(\.\d+)?$

PHPのpreg_matchでいえば
preg_match (/^(\d{1,6})(\.\d+)?$/, $subject)

●正規表現の使用環境
PHP 5.2
●検索か置換か?
検索
●説明
整数部が6桁までの数値を許可。
小数点を含む入力を許可。
小数点以下は特に制限しない(DB側の丸め処理に依存)

1234567  ×
123456.  ×
123456.1 _OK
1.1    OK
0.12・・89 _OK

●対象データ
説明の項を参照
●希望する結果
説明の項を参照
909デフォルトの名無しさん:2011/02/26(土) 02:39:09.32
>>907
いえ、実データは
0000、1990〜2010(+今年度以降の西暦)
なので、0000さえ除外できれば仕様を満たしています。
910デフォルトの名無しさん:2011/02/26(土) 02:43:15.50
>>909
だったら何を聞きたいの?
911デフォルトの名無しさん:2011/02/26(土) 02:47:08.82
>>905-906,908は問題無いかどうかを聞きたくて書きました。

web上で確認出来る以下のサイトでも期待した結果は得られましたが、
正規表現に不慣れなので漏れが無いかどうかを確認したくて書き込みました。

HiFi Regex Tester - Live JavaScript Regular Expression Tester
ttp://www.gethifi.com/tools/regex
Regex Tester ? RegexPal
ttp://regexpal.com/

洗練された書き方や、不備がある場合、指摘をいただければ幸いです。
912デフォルトの名無しさん:2011/02/26(土) 02:52:57.55
>>908
これも通るけどOK?
01.1
0.10
あと、これが通らないけどOK?
.5

まぁ対象がDBなら、変な値は返って来ないから、あまり問題にならないと思うけど
書き込みにも使うなら、気を付けた方が良いかも
913デフォルトの名無しさん:2011/02/26(土) 02:55:37.89
>>906
>^[0][1-9]$|^[1-9]\d$
除外してるなら良いのかも知れんが、わざわざ20〜99を通さなくても良いのでは?
914デフォルトの名無しさん:2011/02/26(土) 03:08:58.66
おー、やっぱり色々つっこみがあって嬉しいです。

>>912
通るパターン、通らないパターン、ともにOKです。
常に整数部が存在する数値です。
0.10もOKです。整数部が0である問題はありません。

>>913
確かにその通りですね。せっかく正規表現を使っているので以下のようにします
^[0][1-9]$|^[1][0-2]$
915871:2011/02/26(土) 11:20:10.31
>>888
お返事遅れてすみません
>下を見ると、変換したいようにも見えるけど、最終的に、変換したいの?したくないの?
単独の<、>は変換したいです。<img>のタグだけ変換せずに残しておきたいです。
916デフォルトの名無しさん:2011/02/26(土) 11:28:26.01
文字列"…中略…((AB:CD))…中略…"
から((AB:CD))を判定するには、
/[\(]{2}(.*?):(.*?)[\)]{2}/
でうまく行くのですが、これに\を使って例外を作りたいです。

文字列"…((AB:CD))…((EF\:GH))…"
からコロンの前の円マーク「\:」の組み合わせを除外して
((AB:CD))だけを判定するにはどのように記述すればよいでしょうか?
/[\(]{2}(.*?)(?!\\):(.*?)[\)]{2}/
ではうまく行きません。
917デフォルトの名無しさん:2011/02/26(土) 11:32:31.11
[\(]{2}(.*?)(?<!\\):(.*?)[\)]{2}
918916:2011/02/26(土) 12:31:51.78
>>917
ありがとうございます。うまく行きました
919デフォルトの名無しさん:2011/02/27(日) 12:25:47.70
ゼロ幅って人にうまく説明できないよね
自分で使うときもたまに間違う
920デフォルトの名無しさん:2011/02/27(日) 13:03:23.04
普通の検索とかだとゼロ幅はないからイメージしにくいんだろう
先後読みは更に分かりにくいだろうし、簡単な行頭行末(^$)で
ゼロ幅の空行が一致する事をそれとなく教えればいいんじゃない
921デフォルトの名無しさん:2011/02/27(日) 17:41:22.56
<p>text</p> を <h3>text</h3> に変換したいんです。

ただし text がない<p></p>はそのままで。

'/<p>(.+?)<\/p>/is', '<h3>$1</h3>'

ここから進まない… 助けて
922デフォルトの名無しさん:2011/02/27(日) 17:49:23.17
それだとどう進んでないのかを知りたい。
923デフォルトの名無しさん:2011/02/27(日) 18:20:54.14
条件が曖昧でよく分からんが
> text がない<p></p>はそのまま
であれば単純に正規表現使うまでもなく
<p>text</p> を <h3>text</h3>に置換すりゃいいんじゃないの
textの後に任意の文字は可、とかなら話は別だけど
924デフォルトの名無しさん:2011/02/27(日) 18:26:33.46
>>921を読んだら鍋を火にかけっぱなしにしてたのを思い出した
助かったぜ

textはリテラルではなく任意のテキストという意味かと
925921:2011/02/27(日) 18:44:52.20
火事に気をつけて…

そそ、定数じゃなくてタグを一気に変換させたいのね。

終了タグがない<p>や
中身(テキスト)のない<p></p>
はそのままにして置きたいの。

ちなみにPHPで
$str = preg_replace('/<p>(.+?)<\/p>/is', '<h3>$1</h3>', $str);
で数時間止まっている…
926デフォルトの名無しさん:2011/02/27(日) 18:46:40.07
[^<]+
927デフォルトの名無しさん:2011/02/27(日) 19:54:58.50
二回に分ければ?

1回目
<p>(?!</p>)
<h3>

2回目
(?<!<p>)</p>
</h3>
928デフォルトの名無しさん:2011/02/27(日) 20:04:00.53
<p>(((?!</p>).)+)</p>
929デフォルトの名無しさん:2011/02/27(日) 20:19:55.58
$str = <<<EOT
<p></p><p>ここまでは無難</p>
<p>閉じ忘れ段落<p>
</p><p> < を &lt; と書いてない段落も実はある</p>ブロック外文字列<p>

</p>
EOT;

もし元がこんなのだったらパースしそう。
930デフォルトの名無しさん:2011/02/28(月) 09:24:46.95
閉じ忘れ・閉じ過ぎを除外したいならこれで
<p>(((?!<\/?p>).)+)<\/p>
931デフォルトの名無しさん:2011/02/28(月) 21:29:39.35
【警察】警察官とヤクザが同質な件【暴力団】
http://kamome.2ch.net/test/read.cgi/police/1298822430/
932デフォルトの名無しさん:2011/03/02(水) 15:45:24.49
お知恵をお貸しください…!どうかお詳しい方よろしくお願いいたしますm(__)m

●正規表現の使用環境
VBScript

●検索か置換か?
検索

●説明
メールアドレスをチェックしたい
1.メールは1つか、複数
2.複数メールはカンマで区切られる
3.カンマの直後にスペースが入るかも
4.メールの@以降は固定(間違って変な宛先に送らないため)
5.@より前はてきとう

つづく
933デフォルトの名無しさん:2011/03/02(水) 15:45:37.70
つづき

●対象データ
[email protected] ←1つだけの場合
[email protected], [email protected], ...(以下、繰り返し) ←複数の場合


●希望する結果
True または False

●↓ここまでやって力尽きました。。orz
Function blnMailCheck(strMailAddress)
  Dim objRE
  Set objRE = new RegExp
  objRE.IgnoreCase = True
  '以下のパターンが今回質問したいところです
  'イメージとしては、メールが1回以上、各メール間に「,」を1つと直後にスペースを0回以上出現
  objRE.pattern = "^(.*@example.com),+$"
  blnMailCheck = objRE.Test(strMailAddress)
  Set objRE = Nothing
End Function
934デフォルトの名無しさん:2011/03/02(水) 17:41:31.90
>>932-933
・何をどこまでチェックしたいのか
・使用できる文字の範囲
によって変わってくると思うけど、なるべく単純にするとこんな感じ?
^([-.a-z0-9][email protected], *)*[-.a-z0-9][email protected]$

>5.@より前はてきとう
適当バージョン
^([^ @][email protected], *)*[^ @][email protected]$
935デフォルトの名無しさん:2011/03/02(水) 17:58:18.42
ありがとうございます。いただいたパターンを試してみます。

・何をどこまでチェックしたいのか

たとえば、以下のようにメールアドレスが入力された場合は、
個々のメールの@以下がすべて、「@example.com」であれば
Trueである、としたいです。

[email protected], [email protected]

しかし、実際はメールが1つしか入力されない場合や、
カンマの直後にスペースがあったりなかったりします。

・使用できる文字の範囲

@より前はなんでもいいです。(送信に失敗するだけなので)
@以降は、「@example.com」固定にしたいです。

よろしくお願いいたします。
936デフォルトの名無しさん:2011/03/02(水) 18:09:29.61
>>934

すみません、そのパターンは2つとも、
「-1」という結果が返ってきてしまいました。

引数は「[email protected]」のみです。

もう一度、明日確認してみます。m(__)m
937デフォルトの名無しさん:2011/03/02(水) 18:19:56.83
>>936
お前さんは何か勘違いしている
正規表現の前にvbsの使い方を覚えるぺき
938932:2011/03/02(水) 18:50:51.25
>>937

パターンを「.*」のようにすればtrueが返ってくるので、
あとは適切なパターンを指定してあげるだけかと思ったのですが…

「文字列がメールアドレスかどうか判定する」
という正規表現ならググるといくつかヒットするので、
私のやりたいこともできるかも?と思った次第です。
この考え方がそもそも間違っているのでしょうか?(/ _ ; )

もしよろしければ、どこらへんを勘違いしてるかを
指摘していただけると、とてもとても助かりますm(_ _)m
939934:2011/03/02(水) 18:56:16.94
>>936>>938
えーと、あなたのサンプルプログラムに>>934で挙げた正規表現をはめ込み、
MsgBox blnMailCheck("[email protected]")
みたいにしたら、Trueと出たけど?

VBScriptのリファレンスで、Regular Expression オブジェクトのTest メソッドを見ても、
>Test メソッドは、パターンに一致する文字列が見つかると True、見つからないと False を返します。
となってるし??
私にはこれ以上分かりませぬ。

一応…適当バージョンで@より前位置のカンマも不可ならこんな感じ。
^([^ ,@][email protected], *)*[^ ,@][email protected]$
940932:2011/03/02(水) 19:33:16.76
>>939

なるほど!!
呼び出し元がおかしいってことですね。
丁寧な説明、リファレンスまで調べていただき、
大変なお手間を取らせてしまいごめんなさい。
おっしゃる通りVBScriptはまだまだ経験が浅いです(>_<)
今回のことをきっかけにして頑張っていきたいと思います。
今回は本当に勉強になりました。
どうもありがとうございました!
941デフォルトの名無しさん:2011/03/02(水) 21:57:15.32
>>932
vbsで-1はTrueだ
覚えておくように
942デフォルトの名無しさん:2011/03/02(水) 23:26:48.73
単に,でSplitしてFor Eachで@example.com$チェックしていけば十分だと思うけど
それにしてもVBSってLike演算子ないのか
943932:2011/03/03(木) 06:04:41.74
>>941
!?(・_・;? -1はFalseだとばかり思い込んでました…
ご指摘ありがとうございます!

>>942
そんな方法もいけるんですね
もっと発想を柔らかくしないとなぁ
ご意見ありがとうございます(^-^)/
944934:2011/03/03(木) 06:29:13.17
>>943
すまん、ドットに\を付け忘れてたことに気付いた。
^([^ ,@]+@example\.com, *)*[^ ,@]+@example\.com$
ついでに…
どうやって-1を目撃したのか見当つかないけど、以下は読んでおいてね。
VBScript ユーザーズ ガイド - VBScript の基本 - VBScript のデータ型
945932:2011/03/03(木) 12:27:23.67
>>944
WScript.Echo blnMailCheck(strMailAddress)
↑で結果を確認してました…
素直にIf を使っていれば良かったorz
教えていただいたサイトをじっくり読んでみます!
ありがとうございました(^-^)/
946デフォルトの名無しさん:2011/03/04(金) 16:59:16.71
16進数を2桁づつに分解する正規表現って
例えば
'5d8ce34a7dbaab'

['5d', '8c', 'e3', '4a', '7d', 'ba', 'ab']
というリストにしたい場合
([0-9A-Fa-f]{2}){7}
じゃだめなんでしょうか?
947デフォルトの名無しさん:2011/03/04(金) 19:13:56.93
>>946
分解してないじゃん
948デフォルトの名無しさん:2011/03/04(金) 19:36:45.66
正規表現は文字列にマッチするかしないかだけだよ
リストに分割するとかそんな機能は持ってない

Pythonだったら
import re
re.findall(r'[0-9a-fA-F]{2}', '5d8ce34a7dbaab')

Rubyだったら
'5d8ce34a7dbaab'.scan(/[0-9a-fA-F]{2}/)
949946:2011/03/04(金) 21:39:54.16
>>947-948
ありがとうございます
wxRegEx を使っています

wxRegEx re("([0-9a-fA-F]{2}){7}", wxRE_ADVANCED | wxRE_ICASE);
re.Matches(str);
とやっても
re.GetMatchCount()
の数が変なんです

wxRegEx re("([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})", wxRE_ADVANCED | wxRE_ICASE);
re.Matches(str);
なら
re.GetMatchCount() == 7
になるみたいなのですが
そんなもんなんでしょうか?
950デフォルトの名無しさん:2011/03/04(金) 21:41:05.83
すみません
re.GetMatchCount() == 8
の間違いです
951デフォルトの名無しさん:2011/03/04(金) 21:48:02.43
wxRegExとか知らんけど、
[0-9a-fA-F] は [0-9a-f] にして i オプション使ったほうが見やすいと思う
952デフォルトの名無しさん:2011/03/04(金) 21:48:08.48
どこがおかしいんだ?
953デフォルトの名無しさん:2011/03/04(金) 22:11:16.32
>>949
http://docs.wxwidgets.org/stable/wx_wxregex.html#wxregexmatches

最低限のメソッドしかないみたいだから自前でループで回すしかないだろう
[0-9a-fA-F]{2}を文字列にマッチさせる
マッチした分だけ文字列へのポインタを先に進める
くりかえし
954デフォルトの名無しさん:2011/03/04(金) 22:30:48.27
>>953
ありがとうございます
思い違いをしていたみたいです
ループは自分でやらないといけないんですね
955デフォルトの名無しさん:2011/03/04(金) 23:17:30.13
>>953
これでうまくいったみたいです
ほんとうにありがとうございました

wxArrayString FindAll(const wxRegEx &re, const wxString &str)
{
  wxArrayString as;
  for(wxString s = str; re.Matches(s); s = s.Mid(re.GetMatch(s, 0).length()))
    for(size_t i = 1; i < re.GetMatchCount(); i++)
      as.Add(re.GetMatch(s, i));
  return as;
}

ちなみに exe ファイルのサイズは FindAll を使う前に比べて 512 バイト増えました
速度差は調べていません
956デフォルトの名無しさん:2011/03/05(土) 00:36:13.62
そりゃ3行程度で済む内容をいちいち関数呼んでたらサイズも大きくなるし速度も遅くなるだろうな
957デフォルトの名無しさん:2011/03/05(土) 00:45:20.51
>>956
スレ間違えてるぞ
958デフォルトの名無しさん:2011/03/05(土) 09:58:12.85
XXXとYYYの間を削除したくて、
javaで、replaceAll("XXX.*YYY", "")
このようなコードを書いてるんですが、対象が複数ある場合にうまくいきません。

AAAXXXBBBYYYCCCXXXDDDYYYEEE
AAACCCEEE ←このように変換したい 
AAAEEE ←こうなってしまう

最初のXXXと最後のYYYで認識されてしまってるようなんですが、どのようにすればよいでしょうか
959デフォルトの名無しさん:2011/03/05(土) 10:11:33.97
>>958
すみません。自己解決しました。
960デフォルトの名無しさん:2011/03/05(土) 16:30:42.26
欲張り、無欲に関する質問は定期的にあるのな
961デフォルトの名無しさん:2011/03/05(土) 17:47:01.88
強欲(possessive)というのもあるよね
962デフォルトの名無しさん:2011/03/06(日) 08:59:14.88
おまえらにぴったりな言葉だな
963デフォルトの名無しさん:2011/03/06(日) 13:42:42.28
まぁ過去を振り返ってもしょうがないしな
964デフォルトの名無しさん:2011/03/06(日) 14:08:17.33
過去は振り返るものじゃない
しがみつくものだ
965デフォルトの名無しさん:2011/03/06(日) 14:52:12.70
過去を振り返ることができるからずっと先に向かって歩いていけるのさ
966デフォルトの名無しさん:2011/03/07(月) 22:00:02.04
ギップルさん召喚の儀式か?
967デフォルトの名無しさん:2011/03/11(金) 08:15:56.22
過去こそが眼前にあるものであって、背後にあるものは未来である
968デフォルトの名無しさん:2011/03/14(月) 19:06:44.98
●正規表現の使用環境
Perl

●検索か置換か?
置換

●説明
重複する文字列と区切り文字を削除したい

●対象データ
aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい

●希望する結果
aaa;bbb;ccc;あああ;いいい

よろしくお願いします
969デフォルトの名無しさん:2011/03/14(月) 19:20:50.55
区切りごとに分割して、ソートで重複を除く
970デフォルトの名無しさん:2011/03/14(月) 19:27:38.40
uniqもねーのかこの言語
my $a = 'aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい';
my %a;
$a =~s/([^;]+);?/$a{$1}++==0?$&:''/ego;
971デフォルトの名無しさん:2011/03/14(月) 19:45:47.43
>>968
区切り文字が削除されていない。
972デフォルトの名無しさん:2011/03/14(月) 20:54:16.83
>>969-970
ありがとうございます
やってみます
>>971
説明が間違ってました
●希望する結果のほうであってます
973デフォルトの名無しさん:2011/03/15(火) 12:10:55.80
正規表現にこだわらなければ、>>969-970の合わせ技も

my $s = "aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい";
my %seen;
$s = join ";", grep { !$seen{$_}++ } split /;/, $s;
974デフォルトの名無しさん:2011/03/15(火) 15:15:44.19
●正規表現の使用環境
linux コマンドラインの grep

●検索か置換か?
検索

●説明
末尾が一致していて途中が違う文字列のうち、特定のパターンを除去した集合を取得したい

●対象データ
aaabbbcccあああいいい
aaabbbcccううういいい
aaabbbcccえええいいい

●希望する結果
aaabbbcccううういいい
aaabbbcccえええいいい

「説明」がうまく書けないのですが。
よろしくお願いします
975デフォルトの名無しさん:2011/03/15(火) 15:23:30.71
grep 'いいい$' | grep -v 'あああ'
976974:2011/03/15(火) 15:38:21.24
なるほど。
助かりました。ありがとう。
977デフォルトの名無しさん:2011/03/15(火) 17:34:57.18
>>968
これと同じ事をBREGEXP DLLを使った正規表現置換でやりたいのですが可能でしょうか?
978デフォルトの名無しさん:2011/03/19(土) 19:03:20.06
>>977
>>970>>973もマッチだけでは完結してない
つまり正規表現を使う何らかのプログラミング言語のコードが必要
979デフォルトの名無しさん:2011/03/22(火) 23:58:13.69
tes
980デフォルトの名無しさん:2011/03/23(水) 00:02:06.70
ファイルから読んだ文字列の中に正規表現があるとして
それを展開して処理することはできますか?

$moji = "123";
$hoge = "12\d";
if($moji =~ /$hoge/){
  print "一致";
981デフォルトの名無しさん
正規表現の文字列があった場合にTRUEなのね。
危険だと思う。