[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/12 05:03 / Filesize : 104 KB / Number-of Response : 412
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現 Part7



1 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:16:48 ]
正規表現(Regular Expression)スレです。

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

【 前スレ 】 正規表現 Part6
pc12.2ch.net/test/read.cgi/tech/1241537764/

2 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:18:08 ]
◆関連サイト
正規表現メモ
www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
www.sixnine.net/regexp/
正規表現パズル
oraclesqlpuzzle.hp.infoseek.co.jp/regex/
詳説 正規表現
www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
【 初心者 】 正規表現 【 入門 】
funcchan.blog16.fc2.com/

3 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:19:04 ]
◆関連スレ
[UNIX板] 正規表現
pc12.2ch.net/test/read.cgi/unix/1039165754/
[WebProg] 正規表現道場
pc11.2ch.net/test/read.cgi/php/1168450843/

◆前スレ
[1] pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] pc11.2ch.net/test/read.cgi/tech/1186030400/
[5] pc12.2ch.net/test/read.cgi/tech/1212498448/
[6] pc12.2ch.net/test/read.cgi/tech/1241537764/

4 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:25:47 ]
スルーされにくい質問のテンプレと例

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

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

5 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 21:49:45 ]
>>1

6 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 01:07:35 ]
>>1

7 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:52:09 ]
>>1

8 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 13:34:45 ]
>>1
カツカレー

9 名前:デフォルトの名無しさん [2010/03/21(日) 22:59:00 ]
googleのRE2ってどうなの?

10 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 09:31:52 ]
速いと思うけど、大きい正規表現に長い文字列を食わせるときじゃないとあまり違い分からないかも



11 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 10:40:44 ]
WzやMIFESの置換で、行頭から何文字かを削除する正規表現を教えてください。

15 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:06:37 ]
>>14
WzやMIFESが正規表現を使えるかどうか知らんが、削除したい文字数が判っているなら"^..."などでできるだろ。

16 名前:14 mailto:sage [2010/03/24(水) 19:29:29 ]
できました。...が字数なんですね。ありがとうございます。
無知な私にはネットで調べても不明でした。

17 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:58:06 ]
全然わかってないんだなw
わからんなら正規表現なんて使わなきゃいいのに

18 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:14:41 ]
俺も最初はこんなもんだったが?

19 名前:デフォルトの名無しさん [2010/03/25(木) 00:22:06 ]
>>17
ご自分は"えきすぱあと"なおつもりでいらっしゃるようにお見受けしますが、
全員えきすぱあと な訳がないし、
別にいいじゃねぇか、そういうスレなんだし。



20 名前:デフォルトの名無しさん [2010/03/25(木) 00:23:41 ]
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /




21 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:31:06 ]
>>17は生後すぐに言葉を発し「我は神なり」と言って自分で産湯に浸かったそうだ。
産湯でサッパリした彼はおもむろにビールを飲み干しPCに向かい正規表現を操っていた。

そんな夢のような夢を見たのだろうw

22 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:38:08 ]
でも小学生のころの俺でもなんとなく使いこなしてたんだから、ぐぐって理解できないってのはなんかおかしいだろう

23 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:59:21 ]
>>22
>でも小学生のころの俺でもなんとなく使いこなしてたんだから
性器表現の話はスレ違い

24 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:13:03 ]
それ面白い?

25 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:17:14 ]
うん

26 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:21:00 ]
>>24
お前のツッコミがつまらなさすぎる件
NSCで修行してこい


27 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:29:46 ]
それ面白い?

28 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:33:28 ]
うん

29 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:42:45 ]
不満しか口から出ない子は視野が極端に狭いんだよ。
こういう>>17のような子は

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

家族すら見放しているので誰も注意しない、本人にも自覚が無いから抜け出せない。
唯一の捌け口が2chで暴言を吐くこと。

30 名前:17 mailto:sage [2010/03/25(木) 02:04:40 ]
ファビョっちゃったかwww
本当に調べて、調べた上で全く判らなかったっていうなら、
正規表現に手を出すには時期尚早じゃね?って親切心だったんだけどな。



31 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 02:07:33 ]
絶望的ですね

32 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 02:41:07 ]
>>30
恐ろしい程の馬鹿だなお前w

33 名前:デフォルトの名無しさん [2010/03/25(木) 16:52:35 ]
              い   フ
          鮮  い   ァ
         人  じ   ビ
      に . だ.  ゃ   っ
      だ . も  な   て
      を . の  い . も
      圖     か

          .∧_∧
         ∩#`Д´>'')
         ヽ    ノ

34 名前:デフォルトの名無しさん [2010/03/25(木) 16:57:42 ]
正規表現を高速に調べたいデス。こつをおしえてください

35 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 17:10:59 ]
これをブックマーク
www.google.com/search?num=100&lr=lang_ja&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE

36 名前:デフォルトの名無しさん [2010/03/25(木) 17:30:02 ]

     _ _, ,_
  (  ´)`Д) )) < ハァハァ こんな所でダメェ
  /  つ つ  < 大丈夫だって,こんな糞スレ誰も来ねえよ
(( (_(_  ノ ノ
  し∪ ∪
     _, ,_  _, ,_
 Σ( ゚д゚ )゚д゚)
  /  つ つ
  (_(_  ノ ノ
  し∪ ∪
    _, ,_  _, ,_
  ( ゚д゚ )゚д゚)
  /  つ つ
(( (_(_  ノ ノ
  し∪ ∪


37 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:08:13 ]
つかここム板なんだし基本的な調査能力は大前提でないかえ?

テンプレの初心者用正規表現サイトで演算子一覧見てたら質問するまでもない
自分で理解する気ゼロでそのままズバリの解答だけ欲しいってのが丸見え
「行頭から何文字かを削除する正規表現」で検索してもそりゃ出てこないだろうよ

38 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:10:59 ]
まだやってるのか>17

39 名前:デフォルトの名無しさん [2010/03/26(金) 16:24:11 ]
>>37
    /: : /:: : : / : : : !:: : : : !: : !: : : ヽ:: : : : : ',
   /: : /: : : 斗--、 :|: : : : :|: : | ,ィT: ',: : :ヽ : !
   |: : |: : : : : |: /  \: : /|:.ィ: :ヽ: : :.|.: : : ト、:|
   |: : |: : : : /!/ ⌒ヽ| :/ |:./⌒ヽV: |.: : : | V
  < : _: : : / 〈  {} |/  レ  {} }|:./ヽ: : |
  <:: |. 小{   _,,.. -    、-.,_  レ{: :.|ヽ:|    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   厶ヘ ハ         、     {ハ/ V   | いい加減にしてくれよっ!
      \_!      _ '     !         | 正直言って気持ち悪い!!
        ヽ    /   `t   /      <
      ___,r| \  {    / /         \____________
    /:/::::| \  ヽ `_⌒ ィ ´            (⌒)
  /::::::/::::::|  \   ´ ∧>、         ノ ~.レ-r┐、
/:::::::::::/::::::::|    \  /  !\::`ー- 、  ノ__  | .| | |




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

クソスレア・ゲルナー[xoslair Gellner]
(1914〜1989 イギリス)




41 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:28:35 ]
.netのregexです(prel5互換?)

Controlという文字をReplaceしたいのですがControlsを除外したい場合どのように書けばいいのでしょうか?

42 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:34:42 ]
>>37
気に入らないor答えられないならスルーしておけ。
おれみたいにな。

43 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:44:52 ]
/Control(?!s)/
.netはずいぶん使ってないから間違ってるかも

でもそのレベルなら
・"Control"の出現位置を調べて次の文字が"s"以外なら部分上書きする
・/Control(s)?/でマッチをかけてコールバック内で$1を元に条件分岐
みたいな地道で理解しやすいアプローチをお勧めする

44 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:28:56 ]
>>43
ありがとうございます。
できました。

45 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:30:33 ]
リテラルでいいんですかね?
""で囲まれた文字などをヒットさせたいんですが

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

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

あとコメントやリテラルの中に日本語があった場合はどうかければいいんでしょうか?

46 名前:デフォルトの名無しさん [2010/03/26(金) 20:36:31 ]
"[^"]*"

47 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:39:09 ]
>>46
ありがとうございます

48 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:46:20 ]
ちょっと待て。
言語が何か知らんけど、ダブルクォートがエスケープされて入ってるとかは考えなくて良いのか?


49 名前:デフォルトの名無しさん [2010/03/26(金) 20:55:44 ]
も、申し訳ございませんでした ><

"(?:[^"\\]|\\.)*"

50 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:58:32 ]
>>48
基本的な書き方できればそこからなんとか^^



51 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 21:45:26 ]
ソースをネットに公開するのにIDE上の色分けするのって面倒ですね・・・

52 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 22:03:33 ]
>>51
codepadとかvcviewとかgoogle codeとか

53 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 22:06:41 ]
vcviewじゃなくてviewvcだった
CVS and Subviersion viewer

54 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 22:10:30 ]
Ideone.com | Online IDE & Debugging Tool
ttp://ideone.com/



55 名前:51 mailto:sage [2010/03/26(金) 23:18:47 ]
結構いろいろあるんですね

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

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

viewvcはSubviersionの系統ですか

簡単なツール作ったけど結局正規表現のパターンに左右されてしまう・・・

56 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 02:38:13 ]
コードハイライトなんて腐るほどライブラリあるからそれつかえよ

57 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 03:11:11 ]
>>56
コードハイライトっていうのか
code.google.com/p/syntaxhighlighter/
いいのがあった
助かりました

58 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 13:01:36 ]


59 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 20:37:33 ]
葡萄
バナナ
apple
これらのどれかが含まれる場合にのみマッチするようにする記述を教えてください

60 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 20:40:20 ]
(葡萄|バナナ|apple)



61 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:25:25 ]
>>60がbest answerだな。後は文字コードに注意するだけ。
一応言ってみるけど、果物に分類されるものにマッチすることを望んでいるなら、正規表現以前の問題

62 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 11:44:36 ]
うーむww

これはダサいww

(if )(condition)([ ])([^e][^n][^d])

65 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:05:58 ]
いやconditionは任意の文字列らしいよ
end, endifが行末か

66 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:12:58 ]
任意がどういう文字がくるかわからんのでとりあえず

(if )([a-zA-Z0-9]+)( )([^e][^n][^d])

67 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:33:52 ]
それだと、例えば
if hoge add
がマッチしない

68 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:37:18 ]
そういうパターンもあるなら先に言えよ

69 名前:デフォルトの名無しさん [2010/03/30(火) 12:40:51 ]
>>68
???
マッチしたいものにマッチする、マッチさせたくないものにはマッチしない

が基本だろ。

70 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:41:22 ]
(if )([a-zA-Z0-9 ]+)( )([^e][^n][^d])



71 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:41:26 ]
>任意の文字列

72 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:42:08 ]
>>70
>>67

73 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:45:50 ]
uproda.2ch-library.com/230999vmx/lib230999.png
するけど

74 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 12:48:07 ]
>>72
スペース入ったの見てる?
2chの文字だけで判断するなよ

75 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 13:00:33 ]
>>63
if.+(?!end)$
これって何でテストしてみたの?
perl5互換の.netの正規表現だとif hoge addしかかからないぞ

76 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 13:23:14 ]
/.+/が末尾までマッチするから無理だろ
perl5.8って戻り読み使えないんだっけ?

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

○ if endend
○ if hoge end fuga
× if end

でいいんだよな?

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

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

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

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

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

プログラム的に

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

一度抽出して結果を交えてどうにかするならいけそうだが

78 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 14:26:24 ]
>>62
正規表現にポリモフィズムが導入されれば可能になるだろうな

79 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 15:42:19 ]
英数字の単語をマッチさせたいが、すべて大文字のものは除く

○ abc
○ Bbc

× ABC

みたいな正規表現はどうなりますか?


80 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 21:15:08 ]
>>63

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

>>79

(?=.*[a-z])[A-Za-z]+




81 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 21:57:29 ]
>>63
^if .*(?<! end(if)?)$

>>80 1つ目
それだと、ifhoge とかもマッチしちゃう

82 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 22:00:21 ]
まだやってんのかw
完璧な正解求めて時間浪費しすぎだろ

end endif含めたパターン抽出して結果からend endif含むところだけリプレースか何かで
潰しちゃえばすむことなのに

83 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 23:22:21 ]
>>80
回答する側はずいぶんいい加減でもいいんですねw

84 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 23:37:59 ]
質問する側も条件がいい加減なんだからどっちもどっち。

85 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 00:22:23 ]
>>81

それ、Perlじゃ通らん。

Variable length lookbehind not implemented in regex m/^if .*(?<! end(if)?)$/


86 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 00:37:27 ]
^if .*(?<! end)(?<! endif)$


87 名前:デフォルトの名無しさん mailto:sage [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>の形式で、タグ形式で終了します。

88 名前:87 mailto:sage [2010/03/31(水) 17:01:33 ]
Perl互換でお願いします。

89 名前:デフォルトの名無しさん mailto:sage [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>
というのもアリ?


90 名前:87 mailto:sage [2010/03/31(水) 17:42:29 ]
>>89
レスありがとうございます。
ネストは全く考えていませんでした。
ネストするとかなりややこしくなってしまいますね。
とりあえずなしでお願いします。



91 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 18:43:30 ]
正規表現クックブック
www.oreilly.co.jp/books/9784873114507/

出るらしい

92 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 06:31:50 ]
xxyxxyxxy
で'y'を','などのリテラルに置換するのは簡単ですが、
xx,xx,xx,
制御コードに置換するにはどうするのでしょうか。
xx
xx
xx
ソースコード整形でよく使うのでとくにy -> \nとy -> \r\n の置換をお願いします。
当方javaですが他のでも一応理解できます。

93 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 06:59:29 ]
"\n"

94 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 14:31:34 ]
それだと
xxnxxnxxn
になります。replaceでも言語やソフトが制御コードの出力をサポートしていればいいのですが、
ただの"\n"や
\n
\\n
などは'\' 'n' に置き換えられるので他の方法はないでしょうか。

95 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 14:43:26 ]
意味がわからん

96 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 15:26:20 ]
>>94
そんなはずがねえだろかす

97 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 22:41:17 ]
>>94
コードを示んだ。どこか間違えているから。


98 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 08:21:49 ]
Javaの話かと思ったらエディタの置換機能かよ!


100 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 08:57:48 ]
テキストファイルもバイナリエディタでみると16進数の集まりなので
そっちで置換するのもいいかもねw

エスケープシーケンスなんて使わなくても制御コードそのまんまで置換できるし



101 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 09:00:56 ]
というかJava使えるならバイト読みして自分で置換すればいいんじゃないの?

102 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 10:33:04 ]
とすると、置換の場合はアプリの方が制御コード出力をサポートしてないと改行やタブに置換する方法ないのでしょうか?

103 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 16:22:45 ]
当り前だろ

104 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 11:47:36 ]
つ[man tr]

105 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 15:44:13 ]
coolstuff.jp/regexp/
www.mnet.ne.jp/~nakama/
どっちが元祖なんだろう

107 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 23:22:44 ]
[^\\]+ が hogehoge.txt にマッチしてるだけでは?

110 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 23:23:15 ]
ちょっと前にまったく同じのがあったぞ

量指定子が全部食い尽くすから、("" != ".txt") は真



111 名前:デフォルトの名無しさん mailto:sage [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の用に先読みが位置アンカーとしか動作しないことをよく考えるべきなのかなかな?

113 名前:108=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 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 19:02:56 ]
>けど量指定子が全部食うなら [^\\]+(?=\.txt) でおkな理由もよく分からんし

おkに決まってるだろ
あほか

115 名前:デフォルトの名無しさん mailto:sage [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〜となるのでしょうか?

コード表
www.unicode.org/charts/PDF/U3040.pdf

117 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 10:08:13 ]
>>113

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

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

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

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



119 名前:116 [2010/04/14(水) 12:49:27 ]
>>117サン
>U+3041はUTF-8だと\xe3\x81\x81
レスありがとうございます
そういうのって、どういう法則なんでしょうか。
任意の文字の\xnn\xnn\xnn形式に変換するには、どーすれば。。

120 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 23:50:50 ]
>>119
自分で調べようよ…
Googleで「UTF-8 仕様」で検索してみるとかさ。




121 名前:116 [2010/04/15(木) 14:49:27 ]
判りやすいのがなくって・・(涙
全然、わかんないです。

122 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 14:59:08 ]
UTF-8でぐぐれば上の方にあるだろうウィキペディアのUTF-8の
「エンコード体系」に書いてある内容でわからなければ、そもそも
プログラミングや文字コードの基礎が足りないので勉強しろとしか
いえないな。

123 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 15:11:31 ]
>>120
あんた馬鹿?
自分が調べたらええやん


125 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 16:13:52 ]
>>123
あんた馬鹿?

なんで乞食に餌与えるのよ

126 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 16:18:20 ]
>>125
あんた馬鹿?
いつまでスレ違いの話を続けるのよ。

127 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 18:58:09 ]
>>126
あんた馬鹿?
ネタに釣られるなんて

128 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 06:24:26 ]
キモッ

129 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 11:30:52 ]
>>124-127
これをあぼーんするNGEXは

^(あんた)*(馬鹿|バカ)?.+(ええやん)*

130 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 21:36:05 ]
s/(\/\w\w)(\.htm)/$10$2/で、$1の直後に0を付けたいのですがどうも$10と解釈しているようで
うまくいきません。これの回避方法を教えてください。



131 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 21:40:02 ]
>>130
あ〜出来ました。いちど別の文字にしてから0に変えました。

132 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:03:22 ]
>>129
それ試してみたんだけど、必ずマッチが成功してしまうのだ。
これじゃあぼーんできないよ。。

133 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:30:16 ]
>>132
^[\s ]*<a\shref=.+>>\d.+<br>[\s ](あ[んな]た|おいら)*(馬鹿|バカ)[??]?.+(ええやん)*

134 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 19:49:05 ]
現在地球上で最も優れた正規表現の実装はどこにありますか?

135 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 19:50:39 ]
自前で実装すれば、boostもperlも遅いからな・・・

136 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 20:15:59 ]
鬼車


137 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 18:12:57 ]
>>130
普通に${1}0ってしろよ。

138 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:47:51 ]
正規表現クックブックが出たな

139 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:52:46 ]
>>137
thx

140 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:00:01 ]
なんでこんなにややこしいことになってるの?
もうすこし表現が簡単になればいいのに

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





141 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:37:07 ]
ではあなたの考える分かりやすくて便利な性器表現をここで披露してみてくださいな

142 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:40:37 ]
>>141
凹凸 これでいいか

143 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:41:11 ]

正規表現で選民意識かよきめえw


144 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:47:42 ]
  ♀
 ♂

145 名前:デフォルトの名無しさん [2010/04/26(月) 19:41:28 ]
>>138
ふくろう本あればもう他はいらなくね?


時々>>140みたいな香具師が開発チームにいて
「正規表現は可読性が落ちるから使うな」とか抜かすが、
そこは「お前の知識が浅いだけじゃん」とCoolに決めて黙らす
相手は団塊爺PGだったりするんだが昔は正規表現嫌われてたのかね

146 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 19:58:40 ]
イット業界
こわいお(;_;)

147 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:00:30 ]
当たり前のように使うようになったのは、Unixの文化だねぇ。
Unixへの憧れなしでパソコンユーザーだったおっさんとか、
メインフレーム屋やオフコン屋は拒否反応を示すのかも。

148 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:26:07 ]

偉い偉い
その優秀な頭脳でい仕事してくださいね!

149 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:36:37 ]
誰に対しての反応なのかわからないよ。
時間的にもおかしくない?

150 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:41:27 ]

偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!




151 名前:145 [2010/04/26(月) 21:08:58 ]
>>147
なるほどねー
パンチカード世代のUNIX系知らない団塊は毛嫌いするって事か
まぁ今更勉強しろとは言わないけど最低限読めるように頑張れよ>>150


152 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:51:58 ]

偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!

153 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:53:57 ]
2・3日前くらいからいろんなスレでキチガイを見かけるが同一人物か?

154 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 00:46:11 ]
今時、正規表現のロジックが理解できない奴は新しいコードなんて書けない
既存の古いコードのメンテでもやってればいい

155 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 00:48:52 ]

偉い偉い
その優秀な頭脳で新しいコードいっぱい書いてくださいね!

156 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:37:23 ]
否定先読みなんかはどうも感覚と一致しなくてバグが潜んでたりするなぁ

157 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:44:59 ]

偉い偉い
その優秀な頭脳でバグのないコードいっぱい書いてくださいね!


158 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:45:25 ]
最近いろんなブラウザでJavaScriptのエンジン開発やってるけど
正規表現の後読みが使えるブラウザって存在するの?

どっかのブラウザが対応したらその流れでIE9でも対応しないかなと期待してるんだけど。

159 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:07:53 ]
正規表現エンジンは、どのブラウザも全く同じ。
基本的に、コアの実装はIEでさえ標準に準拠してる。
ブラウザ間の差があるのは、「クライアントサイドJavaScript」の部分。


160 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:22:28 ]

偉い偉い
その優秀な頭脳で後読みが使えるブラウザを書いてくださいね!



161 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:18:15 ]
'20100427' を (\d\d\d\d)(\d\d)(\d\d) でマッチさせると2番目は '04' となります。
このようなときに、先頭の0を取り除いて4を切り出すということは正規表現だけで実現できるでしょうか?


162 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:34:06 ]
(\d\d\d\d)0(\d)(\d\d)

163 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:42:13 ]
すみません、もちろん仮定は「同時に '20101203' が 2010, 12, 3 と切り出せること」です。


164 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:47:59 ]
(\d\d\d\d)0?(\d?\d)0?(\d?\d) だと、
20100403 の時に変なことになるし、
たぶんできない。

165 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:55:32 ]
(\d\d\d\d)(?:0|([1-9]))(\d)(?:0|([1-9]))(\d)

と1桁ずつキャプチャしてつなげるとか?

166 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 16:54:53 ]

偉いなあお前らは
俺はワイルドカードも使えないがせいぜい頑張ってな

167 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 17:03:00 ]
単一のキャプチャの(...)でこの2つの場合を区別するのは
ムリだろ。入り口が有限状態オートマトンの1状態にしか
対応させられないから1桁とるべき場合か2桁取るべき場合
かの情報の持ちようがない。

168 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 19:32:05 ]
>>161
(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)

169 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 19:33:09 ]
すまん間違えた

(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)

170 名前:168=169 mailto:sage [2010/04/27(火) 19:34:30 ]
二重に間違えてるし…吊ってくるorzorz

^(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)$



171 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 19:53:14 ]
あー、^はいらないか
後ろが行末じゃない場合にも対応するならこうかな

(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)(?!\d)

172 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 20:17:03 ]
正規表現一本でなんでもかんでもやろうとするのって
PerlやRubyで一行野郎と変わらない阿呆だな

173 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:01:58 ]

偉いなあお前は
優れたツール使って頑張ってな

174 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:33:41 ]
レベル低いな

175 名前:デフォルトの名無しさん [2010/04/27(火) 22:34:36 ]
>>172
正規表現一本も読めない奴が、このスレで何してんの?

176 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:27:25 ]

優秀なんだな君は
俺はワイルドカードも使えないが正規表現で頑張ってね


177 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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=任意

182 名前:181 mailto:sage [2010/04/28(水) 13:42:54 ]
自己解決
sage忘れすまん

183 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 15:30:15 ]
教わっといて自己解決かよw

184 名前:181 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 02:04:27 ]
>>186
ありがとうございます。
これをよく見て勉強します。

188 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:11:51 ]
>>187
こういう解法もある

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

eオプションが使えると色々応用が効くよ

189 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:25:13 ]
Perlならね。

190 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 02:26:32 ]
ありがとうございます。
これをよく見て勉強します。

頑張ってください




191 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 10:06:13 ]
正規表現 欲張り

194 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:36:16 ]
{A},{B}
という文字列に下記正規表現はマッチすると思うのですが
\{(.+)\} *, * \{(.+)\}
マッチしません。どこがまずいのですか?

195 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:44:04 ]
\{(.+)\} *, *\{(.+)\}

196 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:46:07 ]
>>195
ありがとうございます。
スペースが入っていましたねw
気づきませんでした。

197 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:31:14 ]
(V)o¥o(V)

198 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 18:24:33 ]
そりゃ工業高校なんかで最低限の技能をなにか一つ身に付けてる奴なら年齢が最強の武器になるよ
何となく大学院まで行ったような学生よりよっぽど将来有望だ
でも3年間何もせずただ学校に通ってただけってんじゃ駄目だろ
何もしてないどころか勉強ばっかりやって3年間無駄に歳だけ喰って
社会じゃ役に立たない能書きだけ一人前になってたんじゃしょうがないだろ
だから普通科の高卒は中卒以下だって言ってんだよ

199 名前:デフォルトの名無しさん [2010/05/05(水) 22:01:58 ]
前に、このすれで、()の中身を配列に入れていく正規表現があった。
(())でも、それぞれの中身を入れていく優れものだった。
あれの発展版で、文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9
のそれぞれの文章を配列に入れれる正規表現はできないものだろうか?

200 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:25:37 ]
日本語でおk



201 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:34:50 ]
>>199
その正規表現って
((o)(o))ってあってもちゃんと乳首取れる?

ていうか言語クラス違うくね?できるもんなのか。

202 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:35:51 ]
近所が自転車盗まれたても、相当離れてるけどジュース置いたら逮捕w
姉はそれでおっぱい触られたって。
これひどくね?友達の姉の実話な。

203 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:48:00 ]
入れ子になってても順番にキャプチャできる
123456789 に対して 1(2(3)4)5(6(7)8)9 としたら
キャプチャ結果は 234, 3, 678, 7 になる
>>199が何を求めてるのかいまいちよくわからんが

204 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 12:35:18 ]
>ていうか言語クラス違うくね?できるもんなのか。
日本語でOK。

206 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 15:17:54 ]
>>205
正規表現であって、文脈自由文法じゃないけどできるものなの?
ってことだよ。俺の理解不足だったらすまないが。

207 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 15:47:52 ]
>>204
たしかにネストなんか気にせずに'('と')'を区切り記号としてsplitするだけでいいな。
さすがロシア。

208 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:01:02 ]
確かに、わざわざ正規表現で処理する内容じゃないなw

209 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 19:39:38 ]
>>213
NAME[\s ]?(?.+)\nEND

215 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 07:33:29 ]
いい加減な回答だなw

216 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:29:45 ]
正規表現で、"あ(い(う)え(おか)き)くけ" から一番外側の()の中身を取得するにはどうすればよいですか?


217 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:33:54 ]
言語による

218 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:38:27 ]
\1

219 名前:デフォルトの名無しさん [2010/05/20(木) 22:14:10 ]
●正規表現の使用環境 Perl5
●検索か置換か? 検索
●説明
りんごにマッチする文字列を検索。
青りんごは対象外としたい。

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

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

お願いします


220 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:45:52 ]
(?<!青)(りんご)



221 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:46:36 ]
>>219
/\bりんご\b/

222 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 02:16:16 ]
>>220
りんごの括弧はいらないだろ。

>>221
蜜りんごは?ねぇ、俺の大好きな蜜りんごは?

223 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 05:39:03 ]
www.youtube.com/watch?v=h-mxZ-ijPs8
www.youtube.com/watch?v=yWZWWKOp9qU
www.youtube.com/watch?v=657bBDalKQo
www.youtube.com/watch?v=Fi_YvuAPdNg
www.youtube.com/watch?v=zzNZz590adI
www.youtube.com/watch?v=U3HqWCALUNs
www.youtube.com/watch?v=gUZj2i6U-aw
www.youtube.com/watch?v=iq9s9FJMk_c
www.youtube.com/watch?v=qTemVhatInQ

224 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 07:53:34 ]
>>220-221
ありがとうございます。


225 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 09:08:55 ]
★青葉りんご彡☆

226 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 19:33:34 ]
Javaで鬼車使うには、ランタイムを再コンパイルするしかないの?


227 名前:デフォルトの名無しさん mailto:sage [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)

続きを書きます。

228 名前:277 mailto:sage [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;

229 名前:277 mailto:sage [2010/05/22(土) 01:06:01 ]
実際には、Webサイトにある更新日 (Update:2010/04/30) という
文字の色を変えるのに使いたいです。※更新”されていない”ものは赤で表示。

TCP Monitor Plus (OGA'sさんのサイト)
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;


どうかよろしくお願いいたします。

230 名前:277 mailto:sage [2010/05/22(土) 01:07:27 ]
説明が下手ですみません。

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

よろしくお願いします。



231 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 01:23:34 ]
>>230
本文読んでないけど、メタ文字をエスケープ出来れば済むのならjavascript quotemetaでぐぐるんだ

232 名前:277 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:43:12 ]
グローバルフラグを付けなくてもいいようなケースにもグローバルフラグを付けた場合
どれだけ無駄になりますか?とてつもなく無駄ですか?微々たるものですか?

234 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:52:06 ]
検索対象の文字列長による。
グローバルフラグをつけさえしなければ、
最初のマッチング位置以降の文字列は読み込まないので。

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

もう作っちゃったなら、性能問題出てから考えたら。

235 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:55:32 ]
>>234
どうもありがとうございます。特に何も感じなかったら気にしないことにします

236 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:04:43 ]
強欲マッチってどういう時使うの?

239 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:13:50 ]
例えば文中の全ての数字の並びを抽出したいときに
/(\d+?)/g
とかやると切ないことになる

240 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:29:59 ]
じゃ手放さない(バックトラックしない)強欲マッチは?



241 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:43:24 ]
パフォーマンスだろ。

242 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 01:31:28 ]
よくわかりません。

243 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 08:06:13 ]
鬼車の欲張りと強欲の違いがわからない
ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt

244 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 12:12:44 ]
手放さない欲張りマッチを使って失敗するような場合はあるんですか?

245 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 10:32:38 ]
javascriptです
aiueo
aiue
iueo
にはマッチするけどiueにはマッチしないってどう書けばいいですか?
/a?iueo?/
だとiueにもマッチしてしまって
/a?iueo|aiueo?/
だと期待通りにはなるのですが
重複する記述があるのでまとめられるならまとめたいです
共通する部分がiueじゃなくてもっと複雑になった場合など

246 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:08:31 ]
245
自己レスです
/a?(iue)o|a\1o?/
こうかな・・・

247 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:26:17 ]
>>246
僕もそう思った。

248 名前:デフォルトの名無しさん [2010/06/06(日) 10:57:14 ]
質問です
javascriptです。

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



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

("00000000" + "12").substr("12".length);

250 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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)

260 名前:259 [2010/06/11(金) 23:08:36 ]
>>259
すみません。例では「\1」が1個多すぎました。
× (?<!\1)(^.+\n)\1\1(?!\1)
○ (?<!\1)(^.+\n)\1(?!\1)

…どっちみちダメな例ですが、いちおう。。



261 名前:デフォルトの名無しさん mailto:sage [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"
}


263 名前:259 [2010/06/12(土) 13:32:11 ]
>>262
どうもありがとう! それで上手くいきました。

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

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

○ (?:\A|(^.+\n)(?!\1))((^.+\n)\3)(?!\3)
×  (\A|(^.+\n)(?!\1))((^.+\n)\4)(?!\4)

264 名前:259 [2010/06/12(土) 13:43:31 ]
>>263
cf.
無理矢理ほんの少しだけ見やすくしてみました。

○ --- (?: \A|(^.+\n)(?!\1) )  ( (^.+\n)\3 ) (?!\3)
× ---  ( \A|(^.+\n)(?!\1) )  ( (^.+\n)\4 ) (?!\4)

265 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:03:18 ]
( \A|(^.+\n)(?!\2) )  ( (^.+\n)\4 ) (?!\4)

266 名前:259 mailto:sage [2010/06/12(土) 14:50:02 ]
>>265
!!!!!!
!!!!!!

…かなり長時間悩んでいたので、信じられないくらいすっきりした。
ありがとう。

267 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 09:25:15 ]
((^.+¥n)¥2)(?<!^¥2¥2¥2)(?!¥2)

というのを試してみたら可変長戻り読みでエラーになっちゃった。
これ戻り読みするときには¥2は確定してるんだからなんとかならん
のかなぁ。

268 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:14:38 ]
まぁまぁ初心者なんだが、
/aaa/ ・ /aaa bbb/ と2回やるのと、/aaa( bbb)[0,1]/ とまとめるのでは、
一般的に言ってどっちが速い・軽い・負担少ないの?
対象データとの兼ね合いもあるだろうが、どっちの方が好ましいの?

269 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:18:12 ]
後者じゃないの。
10万回くらい回すテストプログラム作ってみたらいいと思う。

あと、/aaa( bbb)[0,1]/じゃなくて/aaa( bbb){0,1}/ね。
もっと言うと/aaa( bbb)?/の方が簡潔。

270 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:19:36 ]
訂正
×: /aaa( bbb)[0,1]/
○: /aaa( bbb){0,1}/



271 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:21:17 ]
おっとすれ違った。ありがとう

>/aaa( bbb)?/
なるほど!

272 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/19(土) 15:19:55 ]
>>272
| を使えばまあ1つにはできるだろうけど

275 名前:デフォルトの名無しさん mailto:sage [2010/06/19(土) 21:03:30 ]
>>272
^use\s+(encoding\s+)(?(1)["']|)(.*?)\2;$

こうですか?分かりません><

276 名前:デフォルトの名無しさん mailto:sage [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]

277 名前:276 mailto:sage [2010/06/23(水) 05:15:20 ]
どなたか >>276 についてアドバイスをいただけないでしょうか。
宜しくおねがいいたします。

278 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:06:03 ]
\[tag(1|2)\]

279 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:50:32 ]
[tag1] と [tag2] 両方含む行を拾いたいんじゃまいか

>>276
(?=.*\[tag1\])(?=.*\[tag2\])
ただ秀丸の正規表現が先読みに対応してないと動かない

280 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 00:09:27 ]
>>279
ありがとうございます。試してみたところ、秀丸では動きませんでした。
先読みには対応しているようなので、何か別の工夫がいるのかもしれません。
秀丸スレで質問してみます。



281 名前: ◆/91kCCQXBo mailto:sage [2010/06/25(金) 00:53:42 ]
((.*tag2.*)(.*tag1.*))|((.*tag1.*)(.*tag2.*))

282 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 18:11:55 ]
正規表現じゃ無理。StrConvでググリなさい。

285 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 18:17:06 ]
ていうかマルチポストしてんならそう書きなさい。
あと死んでください。

Excel VBA 質問スレ Part15
pc12.2ch.net/test/read.cgi/tech/1271261239/692

286 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 20:53:29 ]
/&.*//

288 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 21:04:22 ]
一行にURLだけしか入ってなければそれでもいいのだが

289 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 12:21:22 ]
秀丸エディタとかでちょっと正規表現使った置換とかしたい時に
\fで区切ってたんだけど、要素が10以上になるとうまく指定できない……

290 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:35:23 ]
自己解決



291 名前:デフォルトの名無しさん [2010/07/04(日) 23:25:25 ]
●正規表現の使用環境
JavaScript

●検索か置換か?
置換

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

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

●希望する結果
つまり、サーバのあれこれ
しかしサーバーサイドのなんたら
なお、サーバー設定は云々


292 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 23:59:32 ]
サイドと設定以外のサーバーを全部サーバにするってことかな?

.replace(/サーバー(?!(サイド|設定))/g,"サーバ")

293 名前:デフォルトの名無しさん [2010/07/05(月) 08:15:02 ]
>>292
そうです。ありがとうございました!

梟で勉強します!

294 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 14:04:37 ]
梟より最近出た料理本の方があんたのような人間には良いんじゃないか。

295 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 15:59:11 ]

こういう皮肉を言う人間にはなりたくないな。

296 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 16:37:34 ]
どこが皮肉なんだろ?
おれも >>291 にはクックブックの方がいいと思うけど。

297 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 18:12:56 ]
>>1は料理本が出る前のテンプレだよなあ。
このスレの質問は、初心者ばかりだから、梟じゃわけわからんことが多いだろう。

298 名前:293 [2010/07/05(月) 19:29:54 ]
おっしゃる通り、初心者です
梟本は持ってるんですが、確かに難解で中々身についてる感じがしないです
専門書と言うか辞書を読んでる感覚で頭で分かったつもりになるだけと言うか…

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



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

いろんな実例が載ってるから便利でいいと思うよ。

300 名前:298 [2010/07/05(月) 20:53:05 ]
>>299
買いました!
これのが易しそうですね
ありがとうございます

皆さんはハンドブックやクイックリファレンスみたいなの持ってますか?



301 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 22:33:53 ]
持っていない。
料理本も他人に推奨しながらまだ買ってないし、梟も2版だけどね。

3版で2版にない良いところがあったら教えてほしいとこr。

302 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 22:37:51 ]
フクロウ本で否定の先読みが出てくるのって2章じゃないか
難解とかいう以前に読んでないんだろう

303 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:49:53 ]
質問です
●正規表現の使用環境
JavaScript

●検索か置換か?
置換

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

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

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


(!(バレンタインチョコレート|板チョコレート)チョコレート),チョコ/g
…ダメです。やっぱ難しいです。

304 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:04:27 ]
(?<!板)(?<!バレンタイン)チョコレート

305 名前:276 mailto:sage [2010/07/07(水) 00:36:58 ]
久しぶりに戻ってきて、続きのコメントがあったことに気付きました。
>>282 さんがおっしゃる通りでした。0 文字マッチで動いてたんですね。
結局最後のものを使わせていただきました。
ありがとうございました。

306 名前:303 [2010/07/07(水) 12:28:01 ]
>>304
上手くいきません
「<」って、どう言う意味なんですか?



307 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 13:14:47 ]
この先生き残る、の逆verかw

308 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 17:39:20 ]
行頭のひとつ、または連続するスペースの
それぞれひとつひとつを全て検索対象にする
(連続したものをひとまとまりとして扱うのではなく。そして文中のスペースは対象にしない)
には、どう書けばいいですか?

310 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:33:14 ]
自己解決しました



311 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:46:20 ]
どんな風に解決したか書いてくれよ。

312 名前:309 mailto:sage [2010/07/07(水) 19:30:22 ]
>>310は自分じゃないけど
でも実際自己解決しました
解決って、その通りのことができたわけじゃないんだけど
やろうとした目的は果たせたんで、おkとします

>>310さん、せっかくすばらしい人間性を披露してくださったのに
あなたがワクワク期待してたような反応してあげられなくて、ごめんなさい

313 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 19:34:21 ]
つか報告だけなら来なくていいよ。

314 名前:デフォルトの名無しさん [2010/07/08(木) 09:42:56 ]
>>308
動かないっす(;´Д`)
ブラウザはFF

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

これって、やろうとしてる事は前方参照否定になるんですかね?

315 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 13:16:00 ]
>>314
x s..replace
o s.replace

316 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 07:36:38 ]
最近、正規表現ってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?

318 名前:314 [2010/07/09(金) 08:25:23 ]
>>308,315
ありがとう!
でも正規表現だけだと、無理って事?


>>317
君は知る必要ないね
一般事務職でも使うケースはあるけど
ワイルドカードだけ取り敢えず覚えておいては?
と、正規表現初心者の俺が(ry

319 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 10:43:04 ]
MS-DOS時代の人間なんで
ワイルドカード(*、?だけですけど)の使い方は分かってます。

320 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 11:22:26 ]
正規表現を使うソフトと出会ったら勉強すればいい。
出会ってもないのに知る必要はないと思う。



321 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 15:36:10 ]
正規表現とワイルドカードを一緒くたにすると
怖いお兄さん(お姉さんも可)に怒られるからよい子は注意な

322 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 18:26:02 ]
心配するな。
ここで正規表現って騒いでるやつも知らないから。
その証拠にワイルドカードぐらいしか言えないだろ?w

323 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 20:39:02 ]
ドロー4!

324 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 09:01:52 ]
最近、SQLってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?

325 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 09:03:32 ]
最近、HTMLってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?

326 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 18:51:05 ]
最近、クラウドコンピューティングってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいに頭がクラウドな香具師は知らなくても無問題でしょうか?

327 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 20:53:00 ]
企業がマスゴミをだますときに使う

っつーかスレ違い

328 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:49:10 ]
正規表現を導入することでミッション クリティカルなシステムから
モバイル アプリケーションまで対応できる高い信頼性を備えた
アプリケーションを構築することができます。
正規表現で企業内に存在する多数のデータを統合し、全社員がデータを活用できる
ビジネス インテリジェンス基盤として堅牢で実績のあるハイパーバイザーを構築し
不要なリスクやオーバヘッドを回避できます。
正規表現の仮想インフラストラクチャ機構にはデータを安定して管理するさまざまな機能はもちろん、
データを活用・分析する機能まで、すべての機能がオールインワンで備わっているます。
高いスケーラビリティとバランスのとれたトータルクオリティーを活用することにより
あなたの快適ライフをサポートします。

329 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/10(土) 21:58:55 ]
OBICの中の人乙

330 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 09:29:54 ]
>>328
ユーのランゲージはファンタスティックね



331 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 10:15:52 ]
ルー柴乙

332 名前:デフォルトの名無しさん [2010/07/14(水) 22:16:49 ]
●環境
vb.net

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

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

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


ってのを正規表現でやるのは無理でしょうか・・・

333 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 00:06:01 ]
例文3) 阿修羅像と筋肉バスターと阿修羅バスターとジェットコースター

こういうときはどういう結果になって欲しいの
処理系側に頼るにしてもあんまりロジック考えたくない

334 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 00:54:48 ]
>>332
英語ならともかく日本語じゃ無理じゃないか
形態素解析 単語 頻度 なんかでぐぐるといいかも

335 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 03:49:25 ]
>>333
>  阿修羅像と筋肉バスターと阿修羅バスターとジェットコースター

「阿修羅」
「バスターと」
じゃね?

336 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 04:52:36 ]
部屋とYシャツと私

337 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 07:44:51 ]
ヘアとワイセツとタワシ

338 名前:デフォルトの名無しさん [2010/07/15(木) 08:16:33 ]
女子高生と機関銃と私

339 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 09:16:17 ]
中国と韓国と北朝鮮

340 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 10:14:07 ]
>>316
phpならsplit("\]\]\[\[", str)で配列に分割して
最初と最後の要素から"[["と"]]"を取り除いた方が早いんじゃない?
正規表現にこだわる理由は何だろう

>>339
処理結果:特定アジア



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

というわけで preg_match_all に "\[\[(.*?)\]\]" を渡すとかどうだろ
PHP知らないんで適当だが

342 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 12:05:18 ]
>316です。
ありがとうございます。
実際には
[[hoge]]今日は[[fuga]]いい[[tenk]]天気です
みたいに間に文字は入るので、正規表現でしか出来ない(効率の面で)と判断しました。
この中のhoge、fuga、tenkiのみを配列の中に入れたかったのです。
結局preg_match_allで "/\[{2}[0-9A-Za-z]*\]{2}/"とする事で解決しました。

343 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 02:24:03 ]
>>335
「スター」は抽出しないのか?

344 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 02:30:15 ]
>>343
それを抽出するなら「スターと」「ターと」も必要じゃないか?

345 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 02:38:40 ]
ちゃんと作ったらもっと色々でてきそうだなw

346 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 18:08:06 ]
/**
 コメント
**/
// コメント

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

____↓
_____↓
____↓
_______↓

347 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 18:12:00 ]
/\/[\/*].+(\n|*\/)/_/s

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

正規表現といっても使い方はエディタや言語によって
違うので何を使ってやりたいかを決めてそっちのスレで
聞いたほうがいいかも。

349 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 19:09:53 ]
>>349
ありがとうございます。
正規表現だけではできないですかね…



351 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 19:15:36 ]
正規表現ってマッチするだけだからねー。

352 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 10:00:25 ]
>>351
あ、すみません。
正規表現とリプレイスの組み合わせでできないですかね?

以前どこかのサイトで見かけたことがあったのですが、
場所忘れ&これを実現した正規表現だったか覚えていなくて…

353 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 11:45:54 ]
>>347
これだと1コメントで「_」になってしまいます。
コメントが10文字ある場合は「_」も10個ほしいです。
先読み、戻り読みを駆使してうまくやっていたような気がしたんですが、
すみません、思い出せないです。

354 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 12:01:28 ]
PHPならpreg_replaceとかあるが・・・。

355 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 12:09:56 ]
検索にひっかからなくするという目的なら1文字になっちゃってもいいと
思うんだけどね。不必要に問題を複雑にしてるような。

356 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 14:23:36 ]
(//|\G).+?(?=.*$)でうまくいくと思ったがちょっとおかしい

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

なぜ\Gが行頭に引っかかるのだ!
ちなみにjavaです

357 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 19:15:52 ]
いや \G は文字列先頭にもマッチするもんだろう。

358 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 11:52:25 ]
>>346
「コメントを省いてからソース検索」するのが目的なのに
「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
他に目的があるのなら全部書き出して最終的に何がしたいか明示すべき

359 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 13:23:24 ]
>>358
そうですねf^^;

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

かなり前にこのスレッドで答えをもらったと思うのですが、それを忘れてしまいまして

360 名前:デフォルトの名無しさん mailto:sage [2010/08/02(月) 17:24:38 ]
>>359
> その際、検索結果の行番号を元のソースに合わせたいです。

「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない



361 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 15:50:50 ]
仕様がわからない状態でコーディングはできない

362 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 17:33:47 ]
自分が何をしたいのか、を他人にうまく伝えられない人

363 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 17:40:10 ]
>「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
わからんのなら、おとなしくすっこんでろよw
仕様は>>346で明確に示してあるだろ。これ読んでもわからんの?
わかる人が答える。わからない人は指をくわえて黙って見ている。
これが掲示板の作法だろ。

364 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 17:45:16 ]
>>346だけ読んで理由がわかったらエスパーすぎる

行番号を維持するだけでなく桁数/文字数も維持したいのだろう

365 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 20:10:42 ]
エスパーも何も、これ以上わかりやすい説明は無いと思うが

366 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 20:47:16 ]
せめて文字列リテラル中にコメントと紛らわしい文字列は
ないぐらいは仮定しないととんでもなく難しい気がするな。

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

// hogehoge /* hogehoge
/* hogehoge
// hogehoge */ hogehoge

367 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 07:41:17 ]
>>362
むしろ自分が何をしたいのかさえ自分で理解できていないレベル

368 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 07:48:43 ]
>>366
コメントについてはネストしたものを正規表現だけで取り扱うのは不可能と
「詳説 正規表現」に書いてあるけどな
その例はネストしていないけど

369 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 11:49:47 ]
>>368
そんなもん複数行モードで(/\*.*?\*/|//.*$)だろ…
ここで質問した俺が馬鹿だった
それじゃ一生答えが導けないよ

370 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 11:56:56 ]
/* ここからコメント /* ネスト */ ここもコメント */

こういうのをなんとかするのは普通の正規表現の範囲では無理。



371 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 12:02:01 ]
文字列中に改行があってもマッチさせることは正規表現で可能でしょうか?

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

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

使っている言語はJAVAですが、
他の言語の正規表現でもできるかどうか教えてもらえると助かります。


372 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 07:56:23 ]
>>369
要求仕様を先に確認しろ

>>371
処理系のよっては改行文字を無視するモードがある
Javaはどうだったかな

374 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 09:10:16 ]
>>371
perlなら
undef $/
だったかな

375 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 10:42:50 ]
ふざけないでください

377 名前:デフォルトの名無しさん mailto:sage [2010/08/10(火) 22:29:01 ]
Perlで前方一致の中に正規表現を使うことってできますか?
/(?<=.*_number=)\d*/のような感じでやりたいのですが・・・

378 名前:デフォルトの名無しさん mailto:sage [2010/08/10(火) 23:25:35 ]
>>377
やって見りゃVariable length lookbehind not implementedになるのはすぐわかるだろ。
この例だと.*は余計なので取り除いて /(?<=_number=)¥d*/ にすればいいと思うが。



379 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 06:32:21 ]
>>378
ありがとうございます、できないんですね・・・
では、/(?<=x_.*_number=)\d*/のように書きたい場合は他に書き方はあるでしょうか?

380 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 07:10:06 ]
\d*を見つけられればいいって感じなら
/(x_.*_number=)(\d*)/
みたいにすれば?



381 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 07:17:20 ]
>>380
ありがとうございます。
\d*を見つけるだけでなく、$&に取り出したいです。

382 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 08:39:22 ]
perlなら¥K使えば?

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




383 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 13:52:06 ]
$&じゃなきゃダメなの?数字欲しいだけなら
/x_.*_number=(\d*)/
で$1見るのが楽チンな気がするんだけど。

384 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 20:18:38 ]
>>382
>>383
数字だけ取り出せれば良かったので$1を使うことにしました。
ありがとうございました。

385 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 17:59:53 ]
●正規表現の使用環境
.net Framework 2.0 - 3.5 (C#)

●検索か置換か?
検索

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

●対象データ
Artist - Title

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

よろしくおねがいします。

386 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 18:44:28 ]
正規表現の詳しいサイトとか知りませんでしょうか?
ずぶの素人なので、どこのサイトで勉強したら良いのか分りません。


387 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 18:55:38 ]
適当なテキストエディタ入れて適当な正規表現解説サイト見て
適当に入力して試してたら数分で理解できるよ

388 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 19:12:44 ]
>>387
適当厨ww

389 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 19:16:28 ]
右も左もわからないんならテンプレのここでいいんじゃないか
funcchan.blog16.fc2.com/

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

using System.Text.RegularExpressions;
...
string[] words = Regex.Split("Artist - Title", " - ");
string artist = words[0];
string title = words[1];

390 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:04:02 ]
>>389
Artist, Album, Titleが含まれている文字列からそれらを正規表現で抽出したいです。
例えば
山田耕筰 - 赤とんぼ

(?<artist>.*?) - (?<title>.*?)
みたいな感じで。
元の文字列がどういう形式か不定なので、Splitはあまり使いたくないのですが・・・



391 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:18:42 ]
Artist や Title に ' - ' が含まれたりする形式だと困るよね。

392 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:44:27 ]
うん、" - " がフィールドの区切りとして使えないのなら無理じゃない?
それぐらいは保証されてると思って>>389を書いた

自分だったら " - " が文字列に2つ以上入ってたら不正な入力として受け付けないか
許される状況であれば脇によけておいて後で手作業で処理するよ

393 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:44:49 ]
それは人間が見ても判別困難ですし、考慮していません。
とりあえず
(?<artist>.*) - (?<title>.*?)
にしたところ希望の動作は得られましたが、
Artist - Title
そのものがグループ(グループ名なし)として抽出されています。
これは解決できますか?

394 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:47:02 ]
よくわかんないから C# のコード貼ってちょ

395 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:47:19 ]
おっと、>>393>>391宛です。

396 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 21:47:59 ]
>>393
解決って何よ
希望の動作したならそれで十分でしょ

397 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 22:03:03 ]
>>397
全体へのマッチはグループ指定してないからグループ名なしのマッチでいいじゃん

399 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 22:26:13 ]
それは仕様ですか?それともexpressionのせいでしょうか?

400 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 23:03:41 ]
>>400
なるほど、仕様なのですね。
確かに(?<title>.*?) は該当箇所が空の場合でもマッチしてます。
該当箇所が空の場合マッチさせないようにするには
(?<artist>.*) - (?<title>.*)
とすればOKでしょうか?

402 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 23:07:29 ]
*を+にすればいいんじゃね?

403 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 23:26:07 ]
>>402
(?<artist>.+) - (?<title>.+)
にしたらマッチしなくなりました。

動作上はこれで問題ありませんので、これにしようと思います。
今回は大変勉強になりました。
>>389-402のみなさん、ありがとうございました。

404 名前:デフォルトの名無しさん mailto:sage [2010/08/14(土) 06:50:19 ]
質問があります。

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

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

そこで、正規表現をつかって、うまく対処する方法を教えてください。

405 名前:デフォルトの名無しさん mailto:sage [2010/08/14(土) 06:59:32 ]
stylesheet

406 名前:デフォルトの名無しさん mailto:sage [2010/08/14(土) 09:06:17 ]
>>404
<title>(.*?)</title> で title のテキストを検索
あとは <body> を検索して <body><h1>$1</h1> に置換

わけわかんなかったら親切な人がスクリプト貼ってくれるのを祈る

407 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/08/15(日) 14:26:57 ]
拙い質問で申し訳ないのですが
現在、改行コードを含めた任意の文字列を"[\s\S]*"としているのですが
ブラケット中の最初の文字がマッチした場合、それ以降は評価しないとしたら
一般的な文章では"\s"よりも"\S"にマッチする文字の方が多いことを考えて
この場合"[\S\s]*"と直した方が速度は上がると考えて良いのでしょうか?
よろしくお願いします。

409 名前:デフォルトの名無しさん mailto:sage [2010/08/15(日) 15:12:35 ]
実際に試してみた方が早いんじゃね?と言ってみる

410 名前:408 mailto:sage [2010/08/15(日) 15:18:56 ]
そうですか。
他で質問してみます。どうもありがとうございました。



411 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 09:20:33 ]
>>410
正規表現エンジンの動作を理解した方が早道






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

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<104KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef