スルーされにくい質問のテンプレと例
●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
9 :
デフォルトの名無しさん:2010/03/21(日) 22:59:00
googleのRE2ってどうなの?
速いと思うけど、大きい正規表現に長い文字列を食わせるときじゃないとあまり違い分からないかも
/ // / // ______ / // /
/ // /| 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日 クソスレにて
>>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' ゙'':::::::::::::::::::::::}
WzやMIFESの置換で、行頭から何文字かを削除する正規表現を教えてください。
>>14 WzやMIFESが正規表現を使えるかどうか知らんが、削除したい文字数が判っているなら"^..."などでできるだろ。
16 :
14:2010/03/24(水) 19:29:29
できました。...が字数なんですね。ありがとうございます。
無知な私にはネットで調べても不明でした。
全然わかってないんだなw
わからんなら正規表現なんて使わなきゃいいのに
俺も最初はこんなもんだったが?
19 :
デフォルトの名無しさん:2010/03/25(木) 00:22:06
>>17 ご自分は"えきすぱあと"なおつもりでいらっしゃるようにお見受けしますが、
全員えきすぱあと な訳がないし、
別にいいじゃねぇか、そういうスレなんだし。
20 :
デフォルトの名無しさん:2010/03/25(木) 00:23:41
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ <こいつ最高にアホ
彡、 |∪| /
/ __ ヽノ /
(___) /
>>17は生後すぐに言葉を発し「我は神なり」と言って自分で産湯に浸かったそうだ。
産湯でサッパリした彼はおもむろにビールを飲み干しPCに向かい正規表現を操っていた。
そんな夢のような夢を見たのだろうw
でも小学生のころの俺でもなんとなく使いこなしてたんだから、ぐぐって理解できないってのはなんかおかしいだろう
>>22 >でも小学生のころの俺でもなんとなく使いこなしてたんだから
性器表現の話はスレ違い
それ面白い?
うん
>>24 お前のツッコミがつまらなさすぎる件
NSCで修行してこい
それ面白い?
うん
不満しか口から出ない子は視野が極端に狭いんだよ。
こういう
>>17のような子は
友達が出来ない > 社会生活が送れない > ゲームに耽る > 更に孤立する > 常に不満を抱える
家族すら見放しているので誰も注意しない、本人にも自覚が無いから抜け出せない。
唯一の捌け口が2chで暴言を吐くこと。
30 :
17:2010/03/25(木) 02:04:40
ファビョっちゃったかwww
本当に調べて、調べた上で全く判らなかったっていうなら、
正規表現に手を出すには時期尚早じゃね?って親切心だったんだけどな。
絶望的ですね
33 :
デフォルトの名無しさん:2010/03/25(木) 16:52:35
い フ
鮮 い ァ
人 じ ビ
に . だ. ゃ っ
だ . も な て
を . の い . も
圖 か
.∧_∧
∩#`Д´>'')
ヽ ノ
34 :
デフォルトの名無しさん:2010/03/25(木) 16:57:42
正規表現を高速に調べたいデス。こつをおしえてください
36 :
デフォルトの名無しさん:2010/03/25(木) 17:30:02
_ _, ,_
( ´)`Д) )) < ハァハァ こんな所でダメェ
/ つ つ < 大丈夫だって,こんな糞スレ誰も来ねえよ
(( (_(_ ノ ノ
し∪ ∪
_, ,_ _, ,_
Σ( ゚д゚ )゚д゚)
/ つ つ
(_(_ ノ ノ
し∪ ∪
_, ,_ _, ,_
( ゚д゚ )゚д゚)
/ つ つ
(( (_(_ ノ ノ
し∪ ∪
つかここム板なんだし基本的な調査能力は大前提でないかえ?
テンプレの初心者用正規表現サイトで演算子一覧見てたら質問するまでもない
自分で理解する気ゼロでそのままズバリの解答だけ欲しいってのが丸見え
「行頭から何文字かを削除する正規表現」で検索してもそりゃ出てこないだろうよ
まだやってるのか>17
39 :
デフォルトの名無しさん:2010/03/26(金) 16:24:11
>>37 /: : /:: : : / : : : !:: : : : !: : !: : : ヽ:: : : : : ',
/: : /: : : 斗--、 :|: : : : :|: : | ,ィT: ',: : :ヽ : !
|: : |: : : : : |: / \: : /|:.ィ: :ヽ: : :.|.: : : ト、:|
|: : |: : : : /!/ ⌒ヽ| :/ |:./⌒ヽV: |.: : : | V
< : _: : : / 〈 {} |/ レ {} }|:./ヽ: : |
<:: |. 小{ _,,.. - 、-.,_ レ{: :.|ヽ:| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
厶ヘ ハ 、 {ハ/ V | いい加減にしてくれよっ!
\_! _ ' ! | 正直言って気持ち悪い!!
ヽ / `t / <
___,r| \ { / / \____________
/:/::::| \ ヽ `_⌒ ィ ´ (⌒)
/::::::/::::::| \ ´ ∧>、 ノ ~.レ-r┐、
/:::::::::::/::::::::| \ / !\::`ー- 、 ノ__ | .| | |
,.-'" `'''-、
/ ヽ
/ l
| ヽ / |
rl 〉 __ ___ 〈 /-,
|゙i| <.(・)` i '´(・)> .!/il
ヽl ..:| |_ノ
l /ヽ___ハ l
ヽ ヽ ー==‐ ' / /
_/| ヾ、 /|ヽ、
::::::l ` --- ' l:::::::::ヽ、__
クソスレア・ゲルナー[xoslair Gellner]
(1914〜1989 イギリス)
.netのregexです(prel5互換?)
Controlという文字をReplaceしたいのですがControlsを除外したい場合どのように書けばいいのでしょうか?
>>37 気に入らないor答えられないならスルーしておけ。
おれみたいにな。
/Control(?!s)/
.netはずいぶん使ってないから間違ってるかも
でもそのレベルなら
・"Control"の出現位置を調べて次の文字が"s"以外なら部分上書きする
・/Control(s)?/でマッチをかけてコールバック内で$1を元に条件分岐
みたいな地道で理解しやすいアプローチをお勧めする
リテラルでいいんですかね?
""で囲まれた文字などをヒットさせたいんですが
(")([.\/a-zA-Z0-9]+)(")
とかやってみたのですがかかってくれません
あとコメントやリテラルの中に日本語があった場合はどうかければいいんでしょうか?
46 :
デフォルトの名無しさん:2010/03/26(金) 20:36:31
"[^"]*"
ちょっと待て。
言語が何か知らんけど、ダブルクォートがエスケープされて入ってるとかは考えなくて良いのか?
49 :
デフォルトの名無しさん:2010/03/26(金) 20:55:44
も、申し訳ございませんでした ><
"(?:[^"\\]|\\.)*"
>>48 基本的な書き方できればそこからなんとか^^
ソースをネットに公開するのにIDE上の色分けするのって面倒ですね・・・
>>51 codepadとかvcviewとかgoogle codeとか
vcviewじゃなくてviewvcだった
CVS and Subviersion viewer
55 :
51:2010/03/26(金) 23:18:47
結構いろいろあるんですね
google codeはじめ方がわからんw
codepad、Ideone.comは似たようなサービスですよね
C#のコードなので色分けが対応してないのが残念
viewvcはSubviersionの系統ですか
簡単なツール作ったけど結局正規表現のパターンに左右されてしまう・・・
コードハイライトなんて腐るほどライブラリあるからそれつかえよ
あ
葡萄
バナナ
apple
これらのどれかが含まれる場合にのみマッチするようにする記述を教えてください
(葡萄|バナナ|apple)
>>60がbest answerだな。後は文字コードに注意するだけ。
一応言ってみるけど、果物に分類されるものにマッチすることを望んでいるなら、正規表現以前の問題
(果物)
63 :
デフォルトの名無しさん:2010/03/30(火) 11:26:32
if condition
という行にはマッチするけど、
if condition end
if condition endif
などの行にはマッチしない正規表現を教えてください。
condition のところには任意の文字列がくるとします。
とりあえず、処理系は Perl5.8 で。
if.+(?!end)$
などとしてみたけど、"if condition end" にマッチしてしまう。
うーむww
これはダサいww
(if )(condition)([ ])([^e][^n][^d])
いやconditionは任意の文字列らしいよ
end, endifが行末か
任意がどういう文字がくるかわからんのでとりあえず
(if )([a-zA-Z0-9]+)( )([^e][^n][^d])
それだと、例えば
if hoge add
がマッチしない
そういうパターンもあるなら先に言えよ
69 :
デフォルトの名無しさん:2010/03/30(火) 12:40:51
>>68 ???
マッチしたいものにマッチする、マッチさせたくないものにはマッチしない
が基本だろ。
(if )([a-zA-Z0-9 ]+)( )([^e][^n][^d])
>任意の文字列
>>72 スペース入ったの見てる?
2chの文字だけで判断するなよ
>>63 if.+(?!end)$
これって何でテストしてみたの?
perl5互換の.netの正規表現だとif hoge addしかかからないぞ
/.+/が末尾までマッチするから無理だろ
perl5.8って戻り読み使えないんだっけ?
あと、「任意の文字列」には空文字列、end、endifも含まれるんだが
○ if endend
○ if hoge end fuga
× if end
でいいんだよな?
正規表現単独って結構厳しくないか?
(if)(.+)(endif|end)
だときっちりターゲット絞れるからと思って
(if)(.+)(?!end)
こうすると見事に駄目になるしな
プログラム的に
(if)(.+)(endif|end)
これの否定を検索みたいなことができなければ一度でやるのは無理じゃね?
一度抽出して結果を交えてどうにかするならいけそうだが
>>62 正規表現にポリモフィズムが導入されれば可能になるだろうな
英数字の単語をマッチさせたいが、すべて大文字のものは除く
○ abc
○ Bbc
× ABC
みたいな正規表現はどうなりますか?
>>63 ^if.+(?<!\send)(?<!\sendif)$
>>79 (?=.*[a-z])[A-Za-z]+
>>63 ^if .*(?<! end(if)?)$
>>80 1つ目
それだと、ifhoge とかもマッチしちゃう
まだやってんのかw
完璧な正解求めて時間浪費しすぎだろ
end endif含めたパターン抽出して結果からend endif含むところだけリプレースか何かで
潰しちゃえばすむことなのに
>>80 回答する側はずいぶんいい加減でもいいんですねw
質問する側も条件がいい加減なんだからどっちもどっち。
>>81 それ、Perlじゃ通らん。
Variable length lookbehind not implemented in regex m/^if .*(?<! end(if)?)$/
^if .*(?<! end)(?<! endif)$
<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:2010/03/31(水) 17:01:33
Perl互換でお願いします。
>>87 <b:iii e="</b:iii></b:iii></b:iii>"/>
<c:jjj>yah<c:jjj>oo</c:jjj></c:jjj>
というのもアリ?
90 :
87:2010/03/31(水) 17:42:29
>>89 レスありがとうございます。
ネストは全く考えていませんでした。
ネストするとかなりややこしくなってしまいますね。
とりあえずなしでお願いします。
xxyxxyxxy
で'y'を','などのリテラルに置換するのは簡単ですが、
xx,xx,xx,
制御コードに置換するにはどうするのでしょうか。
xx
xx
xx
ソースコード整形でよく使うのでとくにy -> \nとy -> \r\n の置換をお願いします。
当方javaですが他のでも一応理解できます。
"\n"
それだと
xxnxxnxxn
になります。replaceでも言語やソフトが制御コードの出力をサポートしていればいいのですが、
ただの"\n"や
\n
\\n
などは'\' 'n' に置き換えられるので他の方法はないでしょうか。
意味がわからん
>>94 コードを示んだ。どこか間違えているから。
xxyxxyxxy なら
replac "xxy", "xx\n" で普通ならマッチの類推で改行するように思いますがnetbeansのエディタだと
xxnxxnxxn なんです。
マッチのときと違い、置換のときの \ はエスケープ機能固定で、'\n'のとき'n'と解釈のようです。
replac "xxy", "xx\\n" なら \ n になり
xx\nxx\nxx\n で一行のままです。そういうアプリ(モジュール)のようです。
他のエディタならエスケープで無く制御コード出力の解釈で改行になるようですけど。
つまり質問のように置換のとき制御コード(0x0Aなど)を出すにはどうすればよいでしょうか。
Javaの話かと思ったらエディタの置換機能かよ!
テキストファイルもバイナリエディタでみると16進数の集まりなので
そっちで置換するのもいいかもねw
エスケープシーケンスなんて使わなくても制御コードそのまんまで置換できるし
というかJava使えるならバイト読みして自分で置換すればいいんじゃないの?
とすると、置換の場合はアプリの方が制御コード出力をサポートしてないと改行やタブに置換する方法ないのでしょうか?
当り前だろ
つ[man tr]
>>63 戻り読み無しなら
/^if +(?!end)(?!endif)(\w{0,4}|\w{1,2}(?! end)\w{4}|\w+(?! endif)\w\w(?! end)\w{4}) *$/
戻り読みありなら
/^if +\w+(?<! endif)(?<! end) *$/
自分では、なにか抜けがありそうで怖くて使わないだろうけど
エディタで使うとかじゃない限りは
一度にマッチさせようとせず、別条件で除外するのが普通ですよね
先読みの (?!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」もマッチする理由がさっぱりなのです。
どなたかお願いします
[^\\]+ が hogehoge.txt にマッチしてるだけでは?
ちょっと前にまったく同じのがあったぞ
量指定子が全部食い尽くすから、("" != ".txt") は真
この場合、量指定子は関係ないんじゃないの?
・「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」じゃない場所を探す→たくさんのヒットの中から「.」があるところを検索→それより前の部分で[^\\]+ =ファイル名
はあ大分スッキリしました。結局先読みを「^」や「$」と同じように考えればいいんですね、多分
答えくれた方々ありがとやんした!
>けど量指定子が全部食うなら [^\\]+(?=\.txt) でおkな理由もよく分からんし
おkに決まってるだろ
あほか
結果が出た後に批判だけするのダサイからやめとけ
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
U+3041はUTF-8だと\xe3\x81\x81
U+309EはUTF-8だと\xe3\x82\x9e
UTF-8の3バイトめは\x80-\xbf
>>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形式に変換するには、どーすれば。。
>>119 自分で調べようよ…
Googleで「UTF-8 仕様」で検索してみるとかさ。
121 :
116 :2010/04/15(木) 14:49:27
判りやすいのがなくって・・(涙
全然、わかんないです。
UTF-8でぐぐれば上の方にあるだろうウィキペディアのUTF-8の
「エンコード体系」に書いてある内容でわからなければ、そもそも
プログラミングや文字コードの基礎が足りないので勉強しろとしか
いえないな。
>>121 あんた馬鹿?
「u+3042 e3 81 82 あ」でぐぐって2番目にヒットしたサイトに解説があるんだけど。
曰く、
firstByte = 0xe0 | (ucs2 >> 12);
secondByte = 0x80 | ((ucs2 >> 6) & ((1 << 6) - 1));
thirdByte = 0x80 | (ucs2 & ((1 << 6) - 1));
とあるね。
>>123 あんた馬鹿?
なんで乞食に餌与えるのよ
>>125 あんた馬鹿?
いつまでスレ違いの話を続けるのよ。
キモッ
>>124-127 これをあぼーんするNGEXは
^(あんた)*(馬鹿|バカ)?.+(ええやん)*
s/(\/\w\w)(\.htm)/$10$2/で、$1の直後に0を付けたいのですがどうも$10と解釈しているようで
うまくいきません。これの回避方法を教えてください。
>>130 あ〜出来ました。いちど別の文字にしてから0に変えました。
>>129 それ試してみたんだけど、必ずマッチが成功してしまうのだ。
これじゃあぼーんできないよ。。
>>132 ^[\s ]*<a\shref=.+>>\d.+<br>[\s ](あ[んな]た|おいら)*(馬鹿|バカ)[??]?.+(ええやん)*
現在地球上で最も優れた正規表現の実装はどこにありますか?
自前で実装すれば、boostもperlも遅いからな・・・
鬼車
正規表現クックブックが出たな
なんでこんなにややこしいことになってるの?
もうすこし表現が簡単になればいいのに
便利に使うための記述じゃないの?
ではあなたの考える分かりやすくて便利な性器表現をここで披露してみてくださいな
↑
正規表現で選民意識かよきめえw
♀
♂
145 :
デフォルトの名無しさん:2010/04/26(月) 19:41:28
>>138 ふくろう本あればもう他はいらなくね?
時々
>>140みたいな香具師が開発チームにいて
「正規表現は可読性が落ちるから使うな」とか抜かすが、
そこは「お前の知識が浅いだけじゃん」とCoolに決めて黙らす
相手は団塊爺PGだったりするんだが昔は正規表現嫌われてたのかね
イット業界
こわいお(;_;)
当たり前のように使うようになったのは、Unixの文化だねぇ。
Unixへの憧れなしでパソコンユーザーだったおっさんとか、
メインフレーム屋やオフコン屋は拒否反応を示すのかも。
↑
偉い偉い
その優秀な頭脳でい仕事してくださいね!
誰に対しての反応なのかわからないよ。
時間的にもおかしくない?
↑
偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!
151 :
145:2010/04/26(月) 21:08:58
>>147 なるほどねー
パンチカード世代のUNIX系知らない団塊は毛嫌いするって事か
まぁ今更勉強しろとは言わないけど最低限読めるように頑張れよ
>>150
↑
偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!
2・3日前くらいからいろんなスレでキチガイを見かけるが同一人物か?
今時、正規表現のロジックが理解できない奴は新しいコードなんて書けない
既存の古いコードのメンテでもやってればいい
↑
偉い偉い
その優秀な頭脳で新しいコードいっぱい書いてくださいね!
否定先読みなんかはどうも感覚と一致しなくてバグが潜んでたりするなぁ
↑
偉い偉い
その優秀な頭脳でバグのないコードいっぱい書いてくださいね!
最近いろんなブラウザでJavaScriptのエンジン開発やってるけど
正規表現の後読みが使えるブラウザって存在するの?
どっかのブラウザが対応したらその流れでIE9でも対応しないかなと期待してるんだけど。
正規表現エンジンは、どのブラウザも全く同じ。
基本的に、コアの実装はIEでさえ標準に準拠してる。
ブラウザ間の差があるのは、「クライアントサイドJavaScript」の部分。
↑
偉い偉い
その優秀な頭脳で後読みが使えるブラウザを書いてくださいね!
'20100427' を (\d\d\d\d)(\d\d)(\d\d) でマッチさせると2番目は '04' となります。
このようなときに、先頭の0を取り除いて4を切り出すということは正規表現だけで実現できるでしょうか?
(\d\d\d\d)0(\d)(\d\d)
すみません、もちろん仮定は「同時に '20101203' が 2010, 12, 3 と切り出せること」です。
(\d\d\d\d)0?(\d?\d)0?(\d?\d) だと、
20100403 の時に変なことになるし、
たぶんできない。
(\d\d\d\d)(?:0|([1-9]))(\d)(?:0|([1-9]))(\d)
と1桁ずつキャプチャしてつなげるとか?
↑
偉いなあお前らは
俺はワイルドカードも使えないがせいぜい頑張ってな
単一のキャプチャの(...)でこの2つの場合を区別するのは
ムリだろ。入り口が有限状態オートマトンの1状態にしか
対応させられないから1桁とるべき場合か2桁取るべき場合
かの情報の持ちようがない。
>>161 (\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)
すまん間違えた
(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)
二重に間違えてるし…吊ってくるorzorz
^(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)$
あー、^はいらないか
後ろが行末じゃない場合にも対応するならこうかな
(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)(?!\d)
正規表現一本でなんでもかんでもやろうとするのって
PerlやRubyで一行野郎と変わらない阿呆だな
↑
偉いなあお前は
優れたツール使って頑張ってな
レベル低いな
175 :
デフォルトの名無しさん:2010/04/27(火) 22:34:36
>>172 正規表現一本も読めない奴が、このスレで何してんの?
↑
優秀なんだな君は
俺はワイルドカードも使えないが正規表現で頑張ってね
↑
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
179 :
デフォルトの名無しさん:2010/04/28(水) 07:42:31
(a + b)(a - b) = b(a - b)
a + b = b
0でわるな
181 :
デフォルトの名無しさん:2010/04/28(水) 12:26:37
JavaScriptです
「xxxx=任意&yyyyyyy=任意&zzzzzz=任意」
と言う文字列から任意の値を各々取るにはどうしたらいいでしょうか?
xyzの文字は各々固定で、任意には何文字入るかわかりません
0文字もあります
欲しい結果は3つ
xxxx=任意
yyyyyyy=任意
zzzzzz=任意
182 :
181:2010/04/28(水) 13:42:54
自己解決
sage忘れすまん
教わっといて自己解決かよw
184 :
181: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>
頑張ってみたけど、先読みを使うと、\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";
}
>>186 ありがとうございます。
これをよく見て勉強します。
>>187 こういう解法もある
s/(.)(\r\n|\n)/$1 eq '>' ? "$1$2" : "$1<br>$2"/sge;
eオプションが使えると色々応用が効くよ
Perlならね。
ありがとうございます。
これをよく見て勉強します。
↑
頑張ってください
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=ギリシア|}}
のように置換したいのです。
正規表現 欲張り
{A},{B}
という文字列に下記正規表現はマッチすると思うのですが
\{(.+)\} *, * \{(.+)\}
マッチしません。どこがまずいのですか?
\{(.+)\} *, *\{(.+)\}
>>195 ありがとうございます。
スペースが入っていましたねw
気づきませんでした。
(V)o¥o(V)
そりゃ工業高校なんかで最低限の技能をなにか一つ身に付けてる奴なら年齢が最強の武器になるよ
何となく大学院まで行ったような学生よりよっぽど将来有望だ
でも3年間何もせずただ学校に通ってただけってんじゃ駄目だろ
何もしてないどころか勉強ばっかりやって3年間無駄に歳だけ喰って
社会じゃ役に立たない能書きだけ一人前になってたんじゃしょうがないだろ
だから普通科の高卒は中卒以下だって言ってんだよ
199 :
デフォルトの名無しさん:2010/05/05(水) 22:01:58
前に、このすれで、()の中身を配列に入れていく正規表現があった。
(())でも、それぞれの中身を入れていく優れものだった。
あれの発展版で、文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9
のそれぞれの文章を配列に入れれる正規表現はできないものだろうか?
日本語でおk
>>199 その正規表現って
((o)(o))ってあってもちゃんと乳首取れる?
ていうか言語クラス違うくね?できるもんなのか。
近所が自転車盗まれたても、相当離れてるけどジュース置いたら逮捕w
姉はそれでおっぱい触られたって。
これひどくね?友達の姉の実話な。
入れ子になってても順番にキャプチャできる
123456789 に対して 1(2(3)4)5(6(7)8)9 としたら
キャプチャ結果は 234, 3, 678, 7 になる
>>199が何を求めてるのかいまいちよくわからんが
>文章(文章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 を使った
>ていうか言語クラス違うくね?できるもんなのか。
日本語でOK。
>>205 正規表現であって、文脈自由文法じゃないけどできるものなの?
ってことだよ。俺の理解不足だったらすまないが。
>>204 たしかにネストなんか気にせずに'('と')'を区切り記号としてsplitするだけでいいな。
さすがロシア。
確かに、わざわざ正規表現で処理する内容じゃないなw
さくらエディタを使っていて
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
こうしたいんですが、正規表現でできるもんなんでしょうか
できるとしたら答えを貰えるのが一番ですが、どこら辺を調べればいいのかヒントをもらえないでしょうか
>>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に変えてね)
多分
>>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
>>213 NAME[\s ]?(?.+)\nEND
いい加減な回答だなw
正規表現で、"あ(い(う)え(おか)き)くけ" から一番外側の()の中身を取得するにはどうすればよいですか?
言語による
\1
219 :
デフォルトの名無しさん:2010/05/20(木) 22:14:10
●正規表現の使用環境 Perl5
●検索か置換か? 検索
●説明
りんごにマッチする文字列を検索。
青りんごは対象外としたい。
●対象データ
1,いちご、青りんご、みかん
2,いちご、青りんご、りんご
3,いちご、りんご、みかん
●希望する結果
2と3がマッチ
お願いします
(?<!青)(りんご)
★青葉りんご彡☆
Javaで鬼車使うには、ランタイムを再コンパイルするしかないの?
●正規表現の使用環境
JavaScript2.0? ※Firefox3.5.9+Greasemonkey 0.8.20100408.6+WindowsXP Pro SP3
●検索か置換か?
置換
●説明
( と ) ※括弧と括弧閉じを含む文字列を置換したい。
●対象データ
(Update:2010/01/02)
●希望する結果
(Update:2010/02/03)
続きを書きます。
228 :
277: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: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;
どうかよろしくお願いいたします。
230 :
277:2010/05/22(土) 01:07:27
説明が下手ですみません。
変数の値に直接エスケープ文字を入れたくないという事です。
よろしくお願いします。
>>230 本文読んでないけど、メタ文字をエスケープ出来れば済むのならjavascript quotemetaでぐぐるんだ
232 :
277: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" );
これで出来ました!
夜遅くにどうもありがとうございました!
グローバルフラグを付けなくてもいいようなケースにもグローバルフラグを付けた場合
どれだけ無駄になりますか?とてつもなく無駄ですか?微々たるものですか?
検索対象の文字列長による。
グローバルフラグをつけさえしなければ、
最初のマッチング位置以降の文字列は読み込まないので。
ただし、検索対象の文字列の中にマッチングする対象が無い場合は
グローバルフラグをつけた場合と同じぐらいコストがかさむ。
もう作っちゃったなら、性能問題出てから考えたら。
>>234 どうもありがとうございます。特に何も感じなかったら気にしないことにします
●正規表現の使用環境
C# 3.0
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
{ と } に囲まれた文字列を検索したい
●対象データ
Memo[0]{
[Text] 対象データ
}
●希望する結果
[Text] 対象データ
よろしくお願いします
237 :
デフォルトの名無しさん:2010/05/30(日) 10:50:00
>>216 亀レスだけど、
\(.*\)
で最長一致検索すれば、一番外側の()である
(い(う)え(おか)き)
にマッチする
ちなみに、\(.*?\)で最短一致検索すれば
"(い(う)"と"(おか)"の2箇所にマッチする
強欲マッチってどういう時使うの?
例えば文中の全ての数字の並びを抽出したいときに
/(\d+?)/g
とかやると切ないことになる
じゃ手放さない(バックトラックしない)強欲マッチは?
パフォーマンスだろ。
よくわかりません。
手放さない欲張りマッチを使って失敗するような場合はあるんですか?
javascriptです
aiueo
aiue
iueo
にはマッチするけどiueにはマッチしないってどう書けばいいですか?
/a?iueo?/
だとiueにもマッチしてしまって
/a?iueo|aiueo?/
だと期待通りにはなるのですが
重複する記述があるのでまとめられるならまとめたいです
共通する部分がiueじゃなくてもっと複雑になった場合など
245
自己レスです
/a?(iue)o|a\1o?/
こうかな・・・
248 :
デフォルトの名無しさん:2010/06/06(日) 10:57:14
質問です
javascriptです。
IMG00123123.jpgというような文字列が配列に大量にある。
そんな中で、例えばIMG00000012.jpgを検出したい。
そのものずばりで検索すれば、何も問題はないのですが、
不精をして、12だけで、マッチさせたい場合、どう考えればよいでしょう?
JavaScriptってsprintfないんだな。意外だ
("00000000" + "12").substr("12".length);
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だ");
}
おおよそこんな処理になるでしょうか?
正規表現もだけど、それ以外のところがボロボロだから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番ということですか?
こんな使い方が出来るとは知りませんでした。
この手法だと、直接値を比較できますね。
ありがとうございました!!
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)
…どっちみちダメな例ですが、いちおう。。
捕獲集合より前に参照使おうとしてるからダメ。
鬼車では
>>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)
( \A|(^.+\n)(?!\2) ) ( (^.+\n)\4 ) (?!\4)
266 :
259:2010/06/12(土) 14:50:02
>>265 !!!!!!
!!!!!!
…かなり長時間悩んでいたので、信じられないくらいすっきりした。
ありがとう。
((^.+¥n)¥2)(?<!^¥2¥2¥2)(?!¥2)
というのを試してみたら可変長戻り読みでエラーになっちゃった。
これ戻り読みするときには¥2は確定してるんだからなんとかならん
のかなぁ。
まぁまぁ初心者なんだが、
/aaa/ ・ /aaa bbb/ と2回やるのと、/aaa( bbb)[0,1]/ とまとめるのでは、
一般的に言ってどっちが速い・軽い・負担少ないの?
対象データとの兼ね合いもあるだろうが、どっちの方が好ましいの?
後者じゃないの。
10万回くらい回すテストプログラム作ってみたらいいと思う。
あと、/aaa( bbb)[0,1]/じゃなくて/aaa( bbb){0,1}/ね。
もっと言うと/aaa( bbb)?/の方が簡潔。
訂正
×: /aaa( bbb)[0,1]/
○: /aaa( bbb){0,1}/
おっとすれ違った。ありがとう
>/aaa( bbb)?/
なるほど!
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+
>>272 | を使えばまあ1つにはできるだろうけど
>>272 ^use\s+(encoding\s+)(?(1)["']|)(.*?)\2;$
こうですか?分かりません><
●正規表現の使用環境
秀丸 または 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:2010/06/23(水) 05:15:20
どなたか
>>276 についてアドバイスをいただけないでしょうか。
宜しくおねがいいたします。
\[tag(1|2)\]
[tag1] と [tag2] 両方含む行を拾いたいんじゃまいか
>>276 (?=.*\[tag1\])(?=.*\[tag2\])
ただ秀丸の正規表現が先読みに対応してないと動かない
>>279 ありがとうございます。試してみたところ、秀丸では動きませんでした。
先読みには対応しているようなので、何か別の工夫がいるのかもしれません。
秀丸スレで質問してみます。
((.*tag2.*)(.*tag1.*))|((.*tag1.*)(.*tag2.*))
>>280 (?=.*\[tag1\])(?=.*\[tag2\])
でも
^(?=.*\[tag1\])(?=.*\[tag2\])
で動いたぞ。ただ、実際に0文字にマッチしているので、
範囲としては見えない。分かりやすいのがよければこれだな:
^(?=.*\[tag1\])(?=.*\[tag2\]).*
283 :
デフォルトの名無しさん:2010/06/27(日) 22:26:13
●正規表現の使用環境
VBScript
●検索か置換か?
置換
●全角英数字を全て半角英数字にしたい
1文字1文字Case文でそれぞれを置換するしか方法ないですかね?
正規表現じゃ無理。StrConvでググリなさい。
/&.*//
一行にURLだけしか入ってなければそれでもいいのだが
秀丸エディタとかでちょっと正規表現使った置換とかしたい時に
\fで区切ってたんだけど、要素が10以上になるとうまく指定できない……
自己解決
291 :
デフォルトの名無しさん:2010/07/04(日) 23:25:25
●正規表現の使用環境
JavaScript
●検索か置換か?
置換
●説明
「サーバー」を「サーバ」に置換したい
「サーバーサイド」「サーバー設定」は除外したい
●対象データ
つまりサーバーのあれこれ
しかしサーバーサイドのなんたら
なお、サーバー設定は云々
●希望する結果
つまり、サーバのあれこれ
しかしサーバーサイドのなんたら
なお、サーバー設定は云々
サイドと設定以外のサーバーを全部サーバにするってことかな?
.replace(/サーバー(?!(サイド|設定))/g,"サーバ")
293 :
デフォルトの名無しさん:2010/07/05(月) 08:15:02
>>292 そうです。ありがとうございました!
梟で勉強します!
梟より最近出た料理本の方があんたのような人間には良いんじゃないか。
↑
こういう皮肉を言う人間にはなりたくないな。
どこが皮肉なんだろ?
おれも
>>291 にはクックブックの方がいいと思うけど。
>>1は料理本が出る前のテンプレだよなあ。
このスレの質問は、初心者ばかりだから、梟じゃわけわからんことが多いだろう。
298 :
293:2010/07/05(月) 19:29:54
おっしゃる通り、初心者です
梟本は持ってるんですが、確かに難解で中々身についてる感じがしないです
専門書と言うか辞書を読んでる感覚で頭で分かったつもりになるだけと言うか…
料理本、よろしければURLか正式タイトル教えて頂けませんか?
300 :
298:2010/07/05(月) 20:53:05
>>299 買いました!
これのが易しそうですね
ありがとうございます
皆さんはハンドブックやクイックリファレンスみたいなの持ってますか?
持っていない。
料理本も他人に推奨しながらまだ買ってないし、梟も2版だけどね。
3版で2版にない良いところがあったら教えてほしいとこr。
フクロウ本で否定の先読みが出てくるのって2章じゃないか
難解とかいう以前に読んでないんだろう
質問です
●正規表現の使用環境
JavaScript
●検索か置換か?
置換
●説明
「チョコレート」を「チョコ」に置換したいです
でも「板チョコレート」「バレンタインチョコレート」はヒット(置換)させたくないです
●対象データ
やはり板チョコレートよりも
バレンタインチョコレートよりも
自分で買うチョコレート!
●希望する結果
やはり板チョコレートよりも
バレンタインチョコレートよりも
自分で買うチョコ!
(!(バレンタインチョコレート|板チョコレート)チョコレート),チョコ/g
…ダメです。やっぱ難しいです。
(?<!板)(?<!バレンタイン)チョコレート
305 :
276:2010/07/07(水) 00:36:58
久しぶりに戻ってきて、続きのコメントがあったことに気付きました。
>>282 さんがおっしゃる通りでした。0 文字マッチで動いてたんですね。
結局最後のものを使わせていただきました。
ありがとうございました。
306 :
303:2010/07/07(水) 12:28:01
>>304 上手くいきません
「<」って、どう言う意味なんですか?
この先生き残る、の逆verかw
行頭のひとつ、または連続するスペースの
それぞれひとつひとつを全て検索対象にする
(連続したものをひとまとまりとして扱うのではなく。そして文中のスペースは対象にしない)
には、どう書けばいいですか?
自己解決しました
どんな風に解決したか書いてくれよ。
312 :
309:2010/07/07(水) 19:30:22
>>310は自分じゃないけど
でも実際自己解決しました
解決って、その通りのことができたわけじゃないんだけど
やろうとした目的は果たせたんで、おkとします
>>310さん、せっかくすばらしい人間性を披露してくださったのに
あなたがワクワク期待してたような反応してあげられなくて、ごめんなさい
つか報告だけなら来なくていいよ。
314 :
デフォルトの名無しさん:2010/07/08(木) 09:42:56
>>308 動かないっす(;´Д`)
ブラウザはFF
JavaScriptに限らずVBscriptでも動けばいいと思ったんですが
厳しそうですね…
これって、やろうとしてる事は前方参照否定になるんですかね?
>>314 x s..replace
o s.replace
●正規表現の使用環境
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
よろしくお願いします。
最近、正規表現ってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?
318 :
314:2010/07/09(金) 08:25:23
>>308,315
ありがとう!
でも正規表現だけだと、無理って事?
>>317 君は知る必要ないね
一般事務職でも使うケースはあるけど
ワイルドカードだけ取り敢えず覚えておいては?
と、正規表現初心者の俺が(ry
MS-DOS時代の人間なんで
ワイルドカード(*、?だけですけど)の使い方は分かってます。
正規表現を使うソフトと出会ったら勉強すればいい。
出会ってもないのに知る必要はないと思う。
正規表現とワイルドカードを一緒くたにすると
怖いお兄さん(お姉さんも可)に怒られるからよい子は注意な
心配するな。
ここで正規表現って騒いでるやつも知らないから。
その証拠にワイルドカードぐらいしか言えないだろ?w
ドロー4!
最近、SQLってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?
最近、HTMLってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいにパンピーは知らなくても無問題でしょうか?
最近、クラウドコンピューティングってことばをよき聞きますが
これってどんな人がどんな時に使うんでしょうか?
ぐぐって調べてもイマイチ意味が分かりませんし
いったいどんな人が使ってるのか疑問です。
自分みたいに頭がクラウドな香具師は知らなくても無問題でしょうか?
企業がマスゴミをだますときに使う
っつーかスレ違い
正規表現を導入することでミッション クリティカルなシステムから
モバイル アプリケーションまで対応できる高い信頼性を備えた
アプリケーションを構築することができます。
正規表現で企業内に存在する多数のデータを統合し、全社員がデータを活用できる
ビジネス インテリジェンス基盤として堅牢で実績のあるハイパーバイザーを構築し
不要なリスクやオーバヘッドを回避できます。
正規表現の仮想インフラストラクチャ機構にはデータを安定して管理するさまざまな機能はもちろん、
データを活用・分析する機能まで、すべての機能がオールインワンで備わっているます。
高いスケーラビリティとバランスのとれたトータルクオリティーを活用することにより
あなたの快適ライフをサポートします。
OBICの中の人乙
>>328 ユーのランゲージはファンタスティックね
ルー柴乙
332 :
デフォルトの名無しさん:2010/07/14(水) 22:16:49
●環境
vb.net
●したいこと
3文字以上の繰り返し表現を抽出
●サンプル
例文1)死にたい死にたい死にたい死にたい死にたい
結果1)死にたい
例文2)筋肉バスターと阿修羅バスター
結果2)バスター
ってのを正規表現でやるのは無理でしょうか・・・
例文3) 阿修羅像と筋肉バスターと阿修羅バスターとジェットコースター
こういうときはどういう結果になって欲しいの
処理系側に頼るにしてもあんまりロジック考えたくない
>>332 英語ならともかく日本語じゃ無理じゃないか
形態素解析 単語 頻度 なんかでぐぐるといいかも
>>333 > 阿修羅像と筋肉バスターと阿修羅バスターとジェットコースター
「阿修羅」
「バスターと」
じゃね?
部屋とYシャツと私
ヘアとワイセツとタワシ
338 :
デフォルトの名無しさん:2010/07/15(木) 08:16:33
女子高生と機関銃と私
中国と韓国と北朝鮮
>>316 phpならsplit("\]\]\[\[", str)で配列に分割して
最初と最後の要素から"[["と"]]"を取り除いた方が早いんじゃない?
正規表現にこだわる理由は何だろう
>>339 処理結果:特定アジア
'[[hoge]] fuga [[piyo]]' みたいな入力に弱いのと直感的じゃないからじゃまいか
できれば「文字列を左から走査していき「[[ と ]] に囲まれた文字列」を
すべて拾い上げる」ように書きたいところ
というわけで preg_match_all に "\[\[(.*?)\]\]" を渡すとかどうだろ
PHP知らないんで適当だが
>316です。
ありがとうございます。
実際には
[[hoge]]今日は[[fuga]]いい[[tenk]]天気です
みたいに間に文字は入るので、正規表現でしか出来ない(効率の面で)と判断しました。
この中のhoge、fuga、tenkiのみを配列の中に入れたかったのです。
結局preg_match_allで "/\[{2}[0-9A-Za-z]*\]{2}/"とする事で解決しました。
>>343 それを抽出するなら「スターと」「ターと」も必要じゃないか?
ちゃんと作ったらもっと色々でてきそうだなw
/**
コメント
**/
// コメント
上記のコメント箇所で、コメント内の各一文字を「_」に置き換える方法はあるでしょうか?
コメント行を削除せずに、一度コメントを省いてからソース検索をしたいと思っておりまして。
____↓
_____↓
____↓
_______↓
/\/[\/*].+(\n|*\/)/_/s
実際のプログラムだと運がよければできるぐらいだな。
コメントかどうか判断がつきにくい文字列リテラルとか
あるんで病的なケースに完全に対応するのは難しい。
多少誤爆があってよければ適当にやりゃできるだろ。
正規表現といっても使い方はエディタや言語によって
違うので何を使ってやりたいかを決めてそっちのスレで
聞いたほうがいいかも。
>>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);
}
>>349 ありがとうございます。
正規表現だけではできないですかね…
正規表現ってマッチするだけだからねー。
>>351 あ、すみません。
正規表現とリプレイスの組み合わせでできないですかね?
以前どこかのサイトで見かけたことがあったのですが、
場所忘れ&これを実現した正規表現だったか覚えていなくて…
>>347 これだと1コメントで「_」になってしまいます。
コメントが10文字ある場合は「_」も10個ほしいです。
先読み、戻り読みを駆使してうまくやっていたような気がしたんですが、
すみません、思い出せないです。
PHPならpreg_replaceとかあるが・・・。
検索にひっかからなくするという目的なら1文字になっちゃってもいいと
思うんだけどね。不必要に問題を複雑にしてるような。
(//|\G).+?(?=.*$)でうまくいくと思ったがちょっとおかしい
a // b で
a ____ になると思ったが
______ になってしまう
なぜ\Gが行頭に引っかかるのだ!
ちなみにjavaです
いや \G は文字列先頭にもマッチするもんだろう。
>>346 「コメントを省いてからソース検索」するのが目的なのに
「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
他に目的があるのなら全部書き出して最終的に何がしたいか明示すべき
>>358 そうですねf^^;
やりたいことはソース中の文字列で日本語コメントを抽出です。
その際、検索結果の行番号を元のソースに合わせたいです。
複数行コメントをカットしてしまうとずれが生じるので、全てスペース(改行は変換せず)を考えています。
かなり前にこのスレッドで答えをもらったと思うのですが、それを忘れてしまいまして
>>359 > その際、検索結果の行番号を元のソースに合わせたいです。
「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
仕様がわからない状態でコーディングはできない
自分が何をしたいのか、を他人にうまく伝えられない人
>「コメントが10文字ある場合は「_」も10個ほしい」理由がわからない
わからんのなら、おとなしくすっこんでろよw
仕様は
>>346で明確に示してあるだろ。これ読んでもわからんの?
わかる人が答える。わからない人は指をくわえて黙って見ている。
これが掲示板の作法だろ。
>>346だけ読んで理由がわかったらエスパーすぎる
行番号を維持するだけでなく桁数/文字数も維持したいのだろう
エスパーも何も、これ以上わかりやすい説明は無いと思うが
せめて文字列リテラル中にコメントと紛らわしい文字列は
ないぐらいは仮定しないととんでもなく難しい気がするな。
あとこういうのを間違わずにやろうとすると結構大変。
// hogehoge /* hogehoge
/* hogehoge
// hogehoge */ hogehoge
>>362 むしろ自分が何をしたいのかさえ自分で理解できていないレベル
>>366 コメントについてはネストしたものを正規表現だけで取り扱うのは不可能と
「詳説 正規表現」に書いてあるけどな
その例はネストしていないけど
>>368 そんなもん複数行モードで(/\*.*?\*/|//.*$)だろ…
ここで質問した俺が馬鹿だった
それじゃ一生答えが導けないよ
/* ここからコメント /* ネスト */ ここもコメント */
こういうのをなんとかするのは普通の正規表現の範囲では無理。
文字列中に改行があってもマッチさせることは正規表現で可能でしょうか?
例えば something を検索したいとすると
some\nthing、so\nmething, someth\ning などもマッチした、と判定したいんです。
今はこんな感じで処理しています。
「改行の位置を記憶→改行を全削除→文字列のマッチ→改行をもう一度挿入」
これが正規表現でできると楽になるので方法がわかる方いたらどうか教えてください。
使っている言語はJAVAですが、
他の言語の正規表現でもできるかどうか教えてもらえると助かります。
>>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;
}
>>369 要求仕様を先に確認しろ
>>371 処理系のよっては改行文字を無視するモードがある
Javaはどうだったかな
>>371 perlなら
undef $/
だったかな
>>371 s\n?o\n?m\n?e\n?t\n?h\n?i\n?n\n?g
ふざけないでください
Perlで前方一致の中に正規表現を使うことってできますか?
/(?<=.*_number=)\d*/のような感じでやりたいのですが・・・
>>377 やって見りゃVariable length lookbehind not implementedになるのはすぐわかるだろ。
この例だと.*は余計なので取り除いて /(?<=_number=)¥d*/ にすればいいと思うが。
>>378 ありがとうございます、できないんですね・・・
では、/(?<=x_.*_number=)\d*/のように書きたい場合は他に書き方はあるでしょうか?
\d*を見つけられればいいって感じなら
/(x_.*_number=)(\d*)/
みたいにすれば?
>>380 ありがとうございます。
\d*を見つけるだけでなく、$&に取り出したいです。
perlなら¥K使えば?
perl -e '"x_hoge_number=100"=~/x_.*_number=¥K¥d*/ and print $&'
$&じゃなきゃダメなの?数字欲しいだけなら
/x_.*_number=(\d*)/
で$1見るのが楽チンな気がするんだけど。
>>382 >>383 数字だけ取り出せれば良かったので$1を使うことにしました。
ありがとうございました。
●正規表現の使用環境
.net Framework 2.0 - 3.5 (C#)
●検索か置換か?
検索
●説明
artist, titleの各グループの文字列を取得したい
●対象データ
Artist - Title
●希望する結果
artist = Artist
title = Title
よろしくおねがいします。
正規表現の詳しいサイトとか知りませんでしょうか?
ずぶの素人なので、どこのサイトで勉強したら良いのか分りません。
適当なテキストエディタ入れて適当な正規表現解説サイト見て
適当に入力して試してたら数分で理解できるよ
右も左もわからないんならテンプレのここでいいんじゃないか
http://funcchan.blog16.fc2.com/ >>385 こういうこと?
違ってるならもっと具体的な入力データとほしい結果の例を挙げて
using System.Text.RegularExpressions;
...
string[] words = Regex.Split("Artist - Title", " - ");
string artist = words[0];
string title = words[1];
>>389 Artist, Album, Titleが含まれている文字列からそれらを正規表現で抽出したいです。
例えば
山田耕筰 - 赤とんぼ
を
(?<artist>.*?) - (?<title>.*?)
みたいな感じで。
元の文字列がどういう形式か不定なので、Splitはあまり使いたくないのですが・・・
Artist や Title に ' - ' が含まれたりする形式だと困るよね。
うん、" - " がフィールドの区切りとして使えないのなら無理じゃない?
それぐらいは保証されてると思って
>>389を書いた
自分だったら " - " が文字列に2つ以上入ってたら不正な入力として受け付けないか
許される状況であれば脇によけておいて後で手作業で処理するよ
それは人間が見ても判別困難ですし、考慮していません。
とりあえず
(?<artist>.*) - (?<title>.*?)
にしたところ希望の動作は得られましたが、
Artist - Title
そのものがグループ(グループ名なし)として抽出されています。
これは解決できますか?
よくわかんないから C# のコード貼ってちょ
>>393 解決って何よ
希望の動作したならそれで十分でしょ
>>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"]について同様
>>397 全体へのマッチはグループ指定してないからグループ名なしのマッチでいいじゃん
それは仕様ですか?それともexpressionのせいでしょうか?
>>400 なるほど、仕様なのですね。
確かに(?<title>.*?) は該当箇所が空の場合でもマッチしてます。
該当箇所が空の場合マッチさせないようにするには
(?<artist>.*) - (?<title>.*)
とすればOKでしょうか?
*を+にすればいいんじゃね?
>>402 (?<artist>.+) - (?<title>.+)
にしたらマッチしなくなりました。
動作上はこれで問題ありませんので、これにしようと思います。
今回は大変勉強になりました。
>>389-402のみなさん、ありがとうございました。
質問があります。
私は、HTMLでホームページを作ったのですが、
titleタグをちゃんといれて作ったのですが
h1タグを入れるのを忘れてしまっていました。
そこで、各ページのh1タグに、それぞれのtitleタグと同じものを入れたいのですが
ホームページのページ数が1000以上なので、
多過ぎて大変です。
そこで、正規表現をつかって、うまく対処する方法を教えてください。
stylesheet
>>404 <title>(.*?)</title> で title のテキストを検索
あとは <body> を検索して <body><h1>$1</h1> に置換
わけわかんなかったら親切な人がスクリプト貼ってくれるのを祈る
<?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);
}
}
?>
拙い質問で申し訳ないのですが
現在、改行コードを含めた任意の文字列を"[\s\S]*"としているのですが
ブラケット中の最初の文字がマッチした場合、それ以降は評価しないとしたら
一般的な文章では"\s"よりも"\S"にマッチする文字の方が多いことを考えて
この場合"[\S\s]*"と直した方が速度は上がると考えて良いのでしょうか?
よろしくお願いします。
実際に試してみた方が早いんじゃね?と言ってみる
410 :
408:2010/08/15(日) 15:18:56
そうですか。
他で質問してみます。どうもありがとうございました。
>>410 正規表現エンジンの動作を理解した方が早道
●正規表現の使用環境
サクラエディタ
●検索か置換か?
検索
●説明
下記の条件で色分けのための選択をしたい
●対象データ
99999ACB コメント;以降構文
●希望する結果
行頭から10文字は半角数字もしくは文字
11と12は半角スペース
以降コメント(任意文字列)のあとにセミコロン
13桁目からセミコロンまでを指定したい。
(?<=.{13}).*;
かと思ったんだけどダメでした。
どう書けば良いんでしょうか…。
ありがとうございます、できました。
たださっきまで適当に試行錯誤していて何故か
(?<=.{12}).*(?<=;)
でも出来ました。
いまいち意味を理解できずにできてしまったんですが
?; は最短マッチで一番早い;までという意味ですよね。
(?<=)
は検索しても全然わからないんですがマッチした文字より後ろ、という意味であってますか?
(?<=.{12}).*(?<=;)
だと12文字より後ろから何文字でも、のあとどういう意味になるんでしょう。
> ?; は最短マッチで一番早い;までという意味ですよね。
最短マッチなら+?;や*?;
あと、(?<=)というか先読み・後読みは文字ではなく「場所にマッチ」
(?<=.{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;(マッチ結果)
おお、なるほど場所にマッチという考え方なんですね。
ありがとうございます!
●正規表現の使用環境
秀丸 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
宜しくお願いします。
色分けの正規表現で文字数を全角を2文字とカウントすることはできますか?
例えば
前50文字が数字であれ半角スペースであれ全角スペースであれ漢字であれ
51桁目からを色分けしたい場合
(?<=.{50}).*$
では全角文字があった場合その分51桁目よりもっと後ろが色分けされますよね?
すみません、誤爆というかサクラエディタスレに書き込もうとして
やっぱりこっちにしようと思って文章修正し忘れしました。
●正規表現の使用環境
サクラエディタ
●検索か置換か?
検索
●説明
行の51ケタ目(51文字目ではない)からを色分けしたい
を付け加えて読んで下さい。
全角文字の文字クラスと半角文字の文字クラスを50桁分並べた全ての順列を|で
並べれば原理的には可能だと思うけど、多分そんな大きな正規表現は扱えない
だろうなぁ。
ほい
(?<=.{51}).+
ごめん。書き込んだ瞬間に気づいた。
全半角を考慮しろってことね。
全角と半角の文字幅を考慮して数える特別な書き方が用意されてないと
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だと相当でかい。
もっとうまい書き方はあるだろうか?
2バイト文字を考慮しないLANGで50文字マッチさせればいいんじゃない?
って書いてからサクラエディタ限定質問であることに気付いた_/ ̄|○
正規表現で行うべきことでないのはたしか
文字幅なんて概念はないんだから
ですよね、そもそも正規表現とは考え方が違うとは思ったんですが、
バイト数カウントみたいなものがもしあればと思って。
色々考えてもらってありがとうございます。
utf-8なんかだとバイト数もあてにできんけど
EOFまでのすべての文字をキャプチャしたいのですが、よろhしくお願いします。
(.*)$だと改行が含まれないとのことで・・
>>428 「.」が改行含むかどうかって実装とかオプションで違うから何使ってるか
言わないとなんともいえんね。使ってる物の専用スレに行った方が
いいかもしれん。
使ってるのはVBScriptです。そうですか、仮に改行\nを含まないと仮定すると
正規表現はどうすればいいんでしょうか。((.|\n)*)$こんな感じ?
専用スレ探してみます。
MultiLine = False かな
おお、MultiLineですか。
ありがとうございます。そのようなスマートな方法を探してたんです。
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;
となりますが、何故最初の表現がこうなってしまうのか解りません
最短一致表現の直後に (〜|) がある場合、空の部分の方が先に処理されてしまうのでしょうか??
>>433 | が解釈される順番が違う
1番目の表現は .*? を探した後に | の左にある ;b を探して、なければ右にある空文字列を探す
→.*?は文字数0でもマッチするので文字列先頭の空文字列にマッチ
3番目の表現は最初に | の左にある .*?;b を探して、なければ右にある空文字列を探す
→"a;b"にマッチ
自分が正規表現エンジンになったつもりで文字列の「最初から」マッチさせていくとわかりやすい
訂正:
.*?は文字数0でもマッチ → .*?は文字数0にもマッチ
436 :
433:2010/09/09(木) 15:07:36
なるほど ありがとうございます。
よく解りました。
使用言語はjavascript。
独自のタグ(<A#...#A>)が設定されたテキスト行から、このタグを取り除きたい。
テキスト行中にタグが複数出てくることもあり。
置換前 : あいうえお <A#かきくけこ#A> さしすせそ <A#たちつてと#A> なにぬねの
置換後 : あいうえお さしすせそ なにぬねの
どうやったらいいですかあああああボスケテーーー!!!
438 :
437:2010/09/09(木) 19:00:10
while((string = string.replace(/<A#.*#A>/, '')) == false){};
結果 : あいうえお なにぬねの
イケるかと思ったらダメだったでござる。
gオプションを付けなかったら、左から一致した一個を置換だと思ってたのに…
.*じゃ全部食われちゃうだろ。.*?にすればいいと思う。
440 :
437: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じゃなくて置換後の文字列だったよ…
g付けなよ、一発でできるから
442 :
437:2010/09/09(木) 19:52:23
おあああああ!.*? にしてgを付ければいいのか!
?の使い方をイマイチよくわかってなかった
str = str.replace(/<a%.*?%a>/g, '')
こうですね!!!
タグがネストすることがなければいいんだけど
すみません。コメント削除用に正規表現を書きたいのですがどなたか助けてください。
local test1 = 0 -- comment
例えば上記のluaコードであれば、 --.*\n で問題なく文末コメントを選択出来るのですが
local test2 = "A--B" -- comment
このように、文字列中にコメント記号が存在する場合は
文字列中のものはマッチさせず、文末コメントだけマッチさせるようにしたいのです。
どのように書けばよいのでしょうか?
>>444 --[^"]*\n とかは?
local test2 = "A--B" -- "hoge"
とかは削除できんけど
447 :
デフォルトの名無しさん:2010/09/10(金) 12:56:14
質問いいですか?vb.netで開発してます。正規表現で全角半角カナと半角英数のみ許可するという正規表現教えてください。
許可ってなんだ?
[A-Za-z0-9ア-ンアーン]+
450 :
デフォルトの名無しさん:2010/09/10(金) 14:37:26
表現が悪くてすみません。[A-Za-z0-9ア-ンアーン]+ でいけそうです!
ほんとありがとうございました。
452 :
デフォルトの名無しさん:2010/09/10(金) 14:52:42
すいません。さっきの正規表現ではいけませんでした。。。。
^[A-Za-z0-9ア-ンアーン]+$
質問者さんにとってのカタカナに記号類がどこまで含まれるのかが
わからないとどうしようもないだろう。
俺も ヴァ〜 とか通らない例を書きたくなるし。
^[\d\Lu\Ll\p{IsHiragana}\p{IsKatakana}]+$
ありゃ。ひらがなじゃなくて半角カタカナがほしいのか。
>>454 そこらへんは
>>447が勝手に追加するでしょ
vb.netわかんねーけど
if(str =~ /[^許可する文字列の集合]/){ エラー処理
とかでいいんじゃね
n文字目にXがあって、そこから更にr文字開けて、ブランクかY以外の行
というのはどう書けばいいでしょう。
^.{6}(X).{5}^( |Y).*$
かと思ったのですがダメでした。
間違えた、6とか5は適当に入れてしまったけど、そこがnとrって意味です。
すみません。
[^ Y]
\sのほうがよくね
464 :
462:2010/09/10(金) 17:11:50
>>463 \sって処理系によっては改行含むんじゃなかったっけ?
むしろ含まない処理系ってあるの?
●正規表現の使用環境
.net(C#3.0)
●検索か置換か?
検索
●説明
空白をデリミタとして、最初の文字列を取得したい
空白は半角全角両方あり、複数連続することもあり得る
ただし、()や[]で囲まれる文字列はスルー(空白として処理する)
正規表現一発で抜き出したいです
下記例の各行は全て「山田太郎」だけ抽出されるようにしたいです
山田太郎 39才
山田太郎 39才
(A社) 山田太郎 39才
(A社)山田太郎 39才
(A社 B課)山田太郎 39才
山田太郎(A社)39才
一発抜きたい、だけ読んだ。
カッコのネストをちゃんと扱わなければいけないなら
正規表現では無理、というのは有名な話なわけだが。
(A社)山田太郎[B課]39才
[A社]山田太郎(B課)39才
まで正しく扱えるようにするのは厄介。
正規表現って役に立たないんだね
向いてない仕事に対して役に立たないと言ってしまうのは如何なものか。
一発にこだわるからおかしなことになる
二発目三発目でなにが問題か
474 :
467:2010/09/15(水) 12:48:52
なるほど難しいのですか…
そりゃ自分で分からんわけだ
>>473 「抜き出すための正規表現を入力」みたいなGUIだったので…
まぁ無理なら諦めます
ネストなしでよければ
^([ ]|\(.*?\)|\[.*?\]|(.*?)|[.*?])*(.*?)[ \(\[([]
・括弧はネストしない
・括弧は対応が取れている
・括弧は4種のみ(大小括弧、全半角)
という条件なら、さほど難しいお題ではないな
逆に言うと、この条件から外れるのであれば正規表現向きではないと
>>475 空白も括弧もなく末尾に達するのは考慮しなくても良いのかな
トークンの部分を ([^ \(\[([]*) とするのに一票
C#2.0で正規表現を使用して
半角英数字+半角カナ+半角の()
のみの入力であることを調べたいのですがうまくいきません。
([A-Za-z0-9アーン]|[゙゚]|)+
478 :
477:2010/09/16(木) 10:16:18
途中で送信してしまいました。
改めて
C#2.0で正規表現を使用して
半角英数字+半角カナ+半角の()
のみの入力であることを調べたいのですがうまくいきません。
([A-Za-z0-9アーン]|[゙゚]|[\(\)])+
としても
半角の
タ
ハ
がマッチしてくれないようなのですが、なにがおかしいかわかりません。
お分かりになられるようでしたらお教え願えませんか?
テストに使用した文字は
アダパン09azAZ()
です
可能であれば半角sペースも許可したいのですが・・・
よろしくお願いいたします。
あーん?
音引きちょっと楽しい。あーん。
^[A-Za-z0-9ヲ-゚\(\) ]+$
481 :
477:2010/09/16(木) 11:08:29
ありがとうございます。
問題なく動きました。
+やら他の部分は理解できるのですが
何故半角カナの判定が ヲ-゚ で正常に判定できるのでしょうか??
もしかしてShift-JISとUnicodeで変わらないかなそれ。
Unicodeの半角カナって0201と同じ並びになってるんだっけ?
気になる人は全部羅列するといいよ!俺はやらんけど。
486 :
477:2010/09/16(木) 12:12:16
>>482-485 コード表見て納得しました。
まだまだ勉強が足りないようで恥ずかしい限りです。
精進したいと思います。
ありがとうございました。
488 :
477:2010/09/16(木) 15:27:25
>>487 少し勉強してみました。
アーン
の部分の
-
あるべきところを
ー
のようにしてしまっていたことですよね?
この部分に関しては完全なこちらの記述ミスだったと思っております。
でも言われるまで単純に気がつきませんでした・・・
長音符(ちょうおんぷ) or 音引き(おんびき)だと。
逆の誤変換はたまーに見るよね。
ガ−ベジコレクションとか。
それを言うなら「ガベージコレクション」だろ
カタカナで書いたことがないのでわかりません
ガーベジコレクション 約 247,000,000 件
ガベージコレクション 約 251,000,000 件
ガーベージコレクション 約 250,000,000 件
ガベッジコレクション 約 110,000 件
ガベジコレクション 約 13,200 件
ガベコレ 約 23,300 件
"ガベージコレクション" 約 94,800 件 (0.14 秒)
"ガーベジコレクション" 約 39,500 件 (0.14 秒)
"ガベージコレクション" -"ガーベジコレクション" 約 357,000 件 (0.24 秒)
"ガーベジコレクション" -"ガベージコレクション" 約 24,100 件 (0.09 秒)
スレ違いうぜぇ
制服コレクションの方が好きです
死ね
ゴミ集め。
エリザベートとエリーザベトの違いみたいなもん
表記揺れ含めると長ウンコになって
なんというか日本語の柔軟性と正規表現て相性ワルイなと
ガー?[べビ][ーッ]ジ・?コレクション
ガー?[べビ][ーッ]?ジ・?コレクション|ガベコレ
秀丸ですが、指定の文字列が無い行全てを削除したいです。
以下の様な複数行のターゲットがあって、zyzの文字列が有る行のみ
残したいのです。
.+[^(zyz)].+\n じゃダメだったし、力不足でニッチもサッチもいきませんorz
どなたかHELP ME・・・・・
AAABBBzzyCCDDDEEEAAA
AAABBBDDzyzEEEAAA
AAABBBCCzyzEEEAAA
AAABBBCCDDDAAA
AAACCDDDEEEAA
AzyzAABBBCCDDDEEEAAA
有り難うございました m(_ _)m
質問です.
「
int int1=10;
int int2=20;
」
の文字列から任意のユーザ定義語(例えばint1, int2)だけ取り出したいのですが
どんな風に書けばよいでしょうか?
ちなみにC#のRegexでマッチさせたいと考えてます.
>>506 int[12]
という冗談はさておき、厳密にやろうとしたら正規表現では無理。
yacc(bison)でも使ったら?
厳密にやるのは正規表現じゃ無理なのは確かだが、
int¥s+(¥w+)¥s+=
ぐらいでいけそうだけどな。自分用ならyaccのたぐいを
持ち出すよりはお手軽だ。うまくいかなかったら調整
すればいいし。
人様に使わせるものならそういうわけにもいかないけど。
>507,508
ありがとう
正規表現で
語(予約語+ユーザ低語)は
[a-zA-Z_][a-zA-Z_0-9]*
で多分抜き出せると思うが,
抜き出した結果がintとかswitchとか予約後の場合
マッチングの結果から取り除く,というのを正規表現だけで
表現できませんか?
>>509 だからそういうのは正規表現向きじゃないって。
C#なら、予約語リストを用意しておいてそれとマッチするかチェックすればいいじゃん。
# 予約語をDBに入れたら検索も手抜きできるけど、そこまでするかどうかは別の問題
511 :
デフォルトの名無しさん:2010/09/26(日) 01:05:10
javascriptです。
(hoge|omg)|poo,muu
例えばこんな文字列で、()に囲まれた|は無視して、|を見つけるとかはできるんでしょうか?
\|
正規表現は数を数えられない→括弧の対応をとることはできない
括弧は必ず正しく対応してるという前提で。
\|(?![^\(]*\))
どうして正規表現=有限オートマトンにはできないことを
やらせたがる奴が後を絶たないのだろう。ちょっとは
まじめに勉強しろよ。そう難しい話じゃないんだからさ。
最近の拡張ではできちゃったりするからw
嫁がおとといから家に帰ってこないんです。
いままでこのようなことはありませんでした。
外泊するときはかならず一言あったのですが。
いま、嫁がどこにいるのか検索できないでしょうか。
スレ違いだと思うけど
1.GPS機能のついたケータイを持たせる(認知症の老人などで実績あり)
2.腕や足にGPS機能のついた発信器を付ける(元犯罪者の監視で実績あり、米国)
3.嫁に首輪を付けて、常に自分がハーネスを持っているようにする
4.自分に首輪を付けて、常に嫁にハーネスを握っていて貰う
5.夢から覚める
正規表現は数を数えられない→人物の同定はできない
数を数えられないと人物の同定は出来ないの間が飛躍しすぎで
どうしてそれがいえるのかさっぱりわからない。
あと数は数えられないわけじゃなくてあらかじめ数えたい数までの
状態を用意しておく必要があるだけだよw
つまりトンネル効果は実際の電子が移動してる訳じゃなくて
ドミノ倒し式に電子が飛び出すって話だろう
●正規表現の使用環境
PHP5.29
●検索か置換か?
検索
●説明
:より前の記号部分を取得したい。
●対象データ
5789:石鹸
w555-2:タオル
Zxcvb:ハンガー
●希望する結果
5789
w555-2
Zxcvb
^(\w+)(?=:)
ありがとうございます!
http://(.*)/ でマッチして $1 で後方参照
使ってる言語にあわせて適当に変えてね
ありがとす
(^ω^)/
A3AACD9ABD377E716127E010FEAC9EBE のような半角英数字32文字の取得はどう書けばいいんでしょうか?
>>529 あとこれで数字は入ったり入らなかったりする場合にもマッチさせたいのです。
[A-Z0-9]{32}
[A-F0-9]{32}
[A-Fa-f0-9]{32}
>>533 お前の眼は節穴か?小文字がどこにあるというんだ?
半角英数字と指定してるのにサンプルだけ見て16進数だと勘違いしてるのもアレだが
ということで真の正解は
[A-Za-z0-9]{32}
>>537 入る文字列がA-Z0-9であった場合、その中にA-F0-9以外の文字が現れる確率を求めなさい
確率の問題なのか?
確率で言うと0か0以外かの問題だな
AFO 9
543 :
デフォルトの名無しさん:2010/10/09(土) 00:57:47
すいません
>>738は解決したのでももういいです
546 :
デフォルトの名無しさん:2010/10/10(日) 09:04:59
>>548 URL置換出来ました
ありがとうございましたm(_ _)m
550 :
デフォルトの名無しさん:2010/10/10(日) 10:09:32
\w+になってるところを[\w-]+にすればたぶん動くよ
動かなかったら[\w\-]
[\w\-] は [\w\-]+ の間違い
553 :
デフォルトの名無しさん:2010/10/10(日) 11:17:35
>>551-552 おかげさまで動きました。
個人的に非常に使えるスクリプトを作ることが出来ました。
ありがとうございました。
ただ猫画像を貼りたかっただけじゃん。大歓迎だけど。
シェルの中で入力ファイル名から出力ファイル名を生成しています。
特定の文字列・記号を正規表現でリネームしたいのですが思いつきません。
ファイル名前半部が異なるファイルが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
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リンクパーサは動きません(涙
<
559 :
557:2010/10/13(水) 16:27:18
なるほど、<>の二つは「.」に含まれないのですね
「id="select_item1">([\r\n\t\f]*)<(.*)>(.*)</option>([\r\n\t\f]*)<option value="([1-9]*)">」
の5番目を引っ張ることでなんとか取得出来ました。
・・・もう少しスマートな方法があるような気がとってもするのですが(汗、
わかりやすくはあるのでよしとしておきます。
アドバイス、ありがとうございました!
>>559 違うw
[.]はピリオドそのものを表してる
JMeter は知らないけど
id="select_item"[^<]*<option[^>]*?value="([^"]*)"[^>]*>[^<]*<option[^>]*?value="([^"]*)"[^>]*>
とかでいけるんじゃね?
ああしくじった
id="select_item"[^<]*<option[^>]*?value="([^"]*)"[^>]*>[^<]*<\/option>[^<]*<option[^>]*?value="([^"]*)"[^>]*>[^<]*<\/option>
かな
>>561 そんな文字列があるのは想定外
じゃあこう
id="select_item"[^<]*<option\s[^>]*value="([^"]*)"[^>]*>[^<]*<\/option>[^<]*<option\s[^>]*value="([^"]*)"[^>]*>[^<]*<\/option>
本当はこう書きたいところ
<select\s[^>]id="select_item">[^>]*(?:<option\s[^>]*value="([^"]*)"[^>]*>[^<]*</option>[^>]*)*</select>
564 :
557:2010/10/13(水) 18:37:18
>>560 >違うw
>[.]はピリオドそのものを表してる
おっと、それは失敬。なるほど、このせいで動かなかったのですね。
例題の提示もしていただいて本当にありがとうございます。
上記のとおり今回は分かりやすさを優先しておきますが、リファレンス片手に読み解いてみます。
勉強させていただきますね(拝
っPowerShell
っbash
質問です。
テキストの中の<location></location>で囲まれた行のみ処理対象にして、
1.<location></location>を残す。
2../(ピリオドとスラッシュ)を追加。
3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。
という正規表現を教えてください。
例
<location>file:///(ドライブ名):/(フォルダ名)/(フォルダ名)/(フォルダ名)/(フォルダ名)/(ファイル名)</location>
という行がテキストファイル内に存在したら
<location>./(ファイル名)</location>
という内容に変更したい。フォルダ名とファイル名に規則性無し。
特に、8個目の/(スラッシュ)以降の文字列を残す方法が全くワカリマヘン。
現状レベル
昨日から丸1日正規表現に取り組んで、近づいてる様な近づいてない様な抽出実験してるレベルです。
因みに今回のテキストファイルは、VLCのプレイリストのxspfファイルです。
ファイルを移動した時、プレイリストが絶対アドレスで定義されてるので、リンクが切れてしまいます。
今回の変更で、相対アドレスになりある程度のファイル移動が可能になる。まあ仕事じゃない趣味のレベルです。
宜しくお願いします。
>>568 s/<location>.*?([^\/]+)<\/location>/<location>./$1<\/location>/
570 :
568:2010/10/19(火) 14:26:12
>>570 >>569のs〜ってのはsedとかviとかperlでの置換(Substitution)命令
s 区切り文字 正規表現 区切り文字 置換文字列 区切り文字
で、正規表現を置換文字列に置換する
後はサクラエディタのヘルプ調べればわかるはず
572 :
sage: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>
573 :
572:2010/10/19(火) 15:31:38
tableは複数あるかも知れませんが、全て一括で同様の処理がしたいです。
よろしくお願いします!
574 :
デフォルトの名無しさん:2010/10/19(火) 15:59:25
575 :
568:2010/10/20(水) 15:00:18
先頭から3文字にマッチする表現を教えてください
577 :
576:2010/10/20(水) 15:29:50
^...
これでいけました
>>575 > / と \/ ではナゼ同じなのでしょうか?
エスケープ不要な文字にいちいち \ つけるんじゃねーよという文句も言わずに
「本当は要らないのに」と内心思うぐらいで粛々と作業してくれる処理系が多いのです。
見出しと任意文字列の間にtabを挿入したいのですが、そうした置換は可能でしょうか?
サクラエディタを使っています。
幼稚な質問をお許し下さい
見出し1=任意文字列1
見出し2=任意文字列2=任意文字列3
見出し3=任意文字列4=任意文字列5=任意文字列6
【こうしたい】
見出し1= 任意文字列1
見出し2= 任意文字列2=任意文字列3
見出し3= 任意文字列4=任意文字列5=任意文字列6
>>578 perlはどの記号が\いるかいらないかいちいち人が覚えるのは大変だから
特に正規表現として特別な意味がない記号でも全部\つけたらその文字
自身を表すってことにしちゃったんだよね。
[-abc]の - そのものって \ 必要だったかな、わかんないや、とりあえず \ つけとけ
みたいにすることはよくある
>>579 ^(.*?=) で検索して $1\t で置換
エスケープシーケンスを有効にする、みたいな項目があったらチェックして置換してね
サクラエディタ持ってないからうまくいかなかったらスルーで
582 :
579:2010/10/20(水) 21:50:34
ありがとうございました。
583 :
568:2010/10/21(木) 15:13:16
ナルホドー 結構柔軟なモンなんですね。ありがとうございます。
VBScriptのRegular Expressionオブジェクトにtr///(y///)に相当するメソッドはありますか?
585 :
デフォルトの名無しさん:2010/10/23(土) 20:07:02
2桁の英数字にはマッチするけど3桁にはマッチしない正規表現はどう書けば良いんでしょうか?
(^|[^0-9A-Za-z])[0-9A-Za-z][0-9A-Za-z]([^0-9A-Za-z]|$)
>>586 ありがとうございます
後方不一致とか色々やってみたけど結局うまくいかなかった・・・
処理系にもよるし厳密ではないが、 \b\w{2}\b は?
"A"にはマッチするけど"ABC"にはマッチしない正規表現お願いします
否定先読みが使えるなら
A(?!BC)
特定の文字だけで構成される行 にマッチする正規表現をお願いします。
あああああああ
wwwwwwwwwww
HHHHHHHHHHHHH
のような行です。
すみません、特定の文字、というか、同じ文字だけで構成される行、でした。
わかりにくくてすみません。
^(.)\1*$
【】で囲まれた任意の同一文字列(文字数可変)が2回続いた場合にマッチする正規表現をお願いします
【AAA】【AAA】はマッチ
【AAA】【BBB】はマッチしない
という感じです
もうちょっとやりたい事を具体的に書くと
【AAA】【AAA】 → 【AAA】
のように置き換えたいと思ったのですが
マッチの部分で躓いてしまいました
(【.*?】)\1
>>598 ありがとうございます
勉強になりました
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
「いっぱい」の「い」を「お」に変えてごらん
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱお!おっぱお!
└─┘ おっぱお!おっぱお!
韓ドラみたいになったお・・・
行の最初から最後 → 文章の最初から最後 に対象範囲を広く変更するのですが・・・
^.*=(.+?)$ → \A.*=(.+?)\z に修正しましたが上手く動きません。
文章の最初と最後の記述は >\A >\z 以外に何を記述すれば良いのでしょうか?
尚、今回訂正する文法の参考と動作確認したのはコチラです
ttp://www.rubular.com/ 因みに RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" ) で使用します。
宜しくお願いします。
改行
>>604 試行錯誤の末、漸く改行の意味が分かりました。たぶんw
\n も含めて文字列と解釈する様に訂正しました。
\A(.|\n)*=(.+?)\z にすると
ttp://www.rubular.com/ では上手く行きました。
ご指摘ありがとうございます。
>>604 様
但し RegExReplace( ClipBoard, "\A(.|\n)*=(.+?)\z", "$2" ) に入れると、
考えてる様には動かない様なので RegExReplace の記述を再度調べてみます。
>>605 使えるメタ文字(\Aとか)は正規表現ライブラリによって変わるよ
確認してるとこはRubyだし
RegExReplaceとやらのヘルプ調べてみては?
どの処理系かわかんないけどドットが改行にマッチするオプション指定で片づくんじゃないのかな。
PCREなら /pattern/s って s 修飾子つければ元のパターンのまま
期待通りの動作になってくれるようなの。
>>606 >ライブラリによって変わる なるホド!違うのはナントナ〜ク分かってましたがそういう事でしたか。
RegExReplace を発見したので熟読してみます。
>>610 >オプション
>パターンの最初に )で区切ってオプションを指定する。
>s .で改行文字もマッチするようにする
をそれなりに解釈して修正してみました。
RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" ) の "^.*=(.+?)$", と解釈。変えてみましたが、$1と$2は空白でした。
)s^.*=(.+?)$
^.(*)s=(.+?)$
^(.*)s=(.+?)$
申し訳ありませんが >パターンの最初に )で区切ってオプションを指定する。 とは、こういう意味なんでしょうか?
アホですみません。
)s^.*=(.+?)$
↓
)
s^.*=(.+?)$
↓
s)^.*=(.+?)$
613 :
603:2010/11/02(火) 06:47:15
614 :
デフォルトの名無しさん:2010/11/04(木) 05:36:24
615 :
デフォルトの名無しさん:2010/11/04(木) 05:38:32
620 :
デフォルトの名無しさん:2010/11/04(木) 07:22:03
621 :
デフォルトの名無しさん:2010/11/04(木) 08:42:08
さてと、そろそろ各サイト宛にDoS攻撃しかけている馬鹿がいるって通報しておくか。
つーか、少しでも勉強する気があるならいい加減自力でできてていい頃合いだろ。
クレクレ相手にするのも程々にしておかないと切りがないぞ。
623 :
デフォルトの名無しさん:2010/11/04(木) 10:56:21
自力でやってできないから聞いてるんだが
何がDoS攻撃だよ通報したけりゃ勝手にやれば?どこにするのか知らんが
てか、人の足引っ張って楽しいか?無能の癖に他人の邪魔だけは一人前だな
624 :
デフォルトの名無しさん:2010/11/04(木) 11:04:37
>>621 ( 4 ) は自力でできたのでもういいです
ほほぉ、「自力でやってできないから聞いてるん」じゃなかったのかい?w
「丸投げしたけど揶揄されたから自力でやってみたらできた」って素直に認めちまえよw
626 :
デフォルトの名無しさん:2010/11/04(木) 11:55:22
( 5 )もできたのでもういいです
つか622のおかげで自力でできたなw
627 :
デフォルトの名無しさん:2010/11/04(木) 19:53:58
>>624>>626 「自力でできたのでもういいです」なんてセリフを言われちゃ
本当は自分で出来ることを他人にやらせようとしてただけと感じちゃう
それじゃせっかくボラしてくれてる人も萎えちまうぞ
今まで教えてくれた人に報いる気があるなら、
せめて「〜としてみたらできました」と報告しようぜ
自分で出来る自信がつきましたので
これからはこのスレでボラの皆さんと一緒に活躍したいと思いますのでヨロシク!
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)$ でもダメでした
よろしくお願いします
A=0[12]\n
^A=\d+$
>>630 レスありがとうございます
ですがマッチしませんでした
>>631 ありがとうございます
マッチいたしました
皆さんお世話になりました。
どういうことだよ
>>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
のみにマッチさせることができた、ということです
\nは必ず行末にマッチしたっけ?
そもそもお題が複数行対象じゃなくて複数の例を列挙してるだけじゃないの。
まぁ提示された条件が曖昧だから答えもあってるんだかどうかわからんわな。
638 :
デフォルトの名無しさん:2010/11/15(月) 16:45:54
最短一致のない悲しい環境で使うための
a(.*?)b
という文字列を渡すと
a([^b]*)b
という最短一致を排除した形式に変換してくれるスクリプトかなんかないかな。
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
です。
スレチ
C++言語の関数プロトタイプにマッチする正規表現教えてください
自分がやるとif文とかwhile文までマッチしちゃいます。
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は除外しない」というルールを教えていただきたいです。よろしくお願いします
なぜそこで文字クラスが出てくるのかがわからない
それなら、
^test\.abc+\.ne\.jp$
でマッチさせて、マッチしたら除外でいいんじゃね?
あぁabc+はabcの間違いね
書けないことはないけど否定の正規表現は鬼門なのでおすすめしない。
例えば^abc$の否定は
^(|.|..|[^a]..|[a[^b].|ab[^c]|....*)$
なので似たようなことをすればOK。君の問題のはめんどくさくて書く気
しないから自分で頑張れ。
>>638 sed -e 's/\(.*\)(.*?)\(.*\)/\1([^\2]*)\2/'
>>643 ごめんなさい・・おっしゃってる意味がよく・・・
勉強中なもので・・お恥ずかしい
>>644 test.abcdef.ne.jp
test.ztv.ne.jp
だけを一気に検索できたら便利だなぁって思いまして。確かにおっしゃることはもっともなんですけど、アナログかなぁ・・って
>>646 >否定の正規表現は鬼門なのでおすすめしない。
そうなんですか!自分も(?!)とかは参考サイトで勉強したんですけどほんと難しかったです
そうだったんですね・・・鬼門でしたか。
みなさんレスありがとうございます。正規表現ってむつかしいですねやっぱり。
なぜそれでアナログになるのか分からない
>>649 一度にパッてやりたいじゃないですか。パッて検索したり置換したり
自分いまだに後方参照ってものをモノにしてなくて正規表現を含む文字列の置換はいまだに手でチマチマとやってるんですよ・・だから手作業でやるのはアナログだなぁって。
正規表現でマッチさせて除外するのに手作業は必要ないと思うが
あれ、
>>644氏のおっしゃってることって、
^test\.abc\.ne\.jp$でマッチさせて、マッチしたらそれを手作業で消して、ってことじゃないんですか?
正規表現はある具体的な文字列にマッチするかしないかの
抽象的なパターンでしかないので
スクリプト言語と組み合わせて
ファイルから各行を読み込む
各行について正規表現 ^test\.abc\.ne\jp$ とマッチするなら
除外
しないなら
なんらかの処理
とかしたほうがいいと思うんだけど、それとは話が別なんだろうか
>>653 ^test\.abc\.ne\jp$
の条件に合致したものが除外・選択、という処理がなされるということですね
漏れはエディタに各文字列を入力してそれを単に検索してるだけです
自分はプログラムとかはサパーソなんですけど、正規表現については便利だなぁって思いまして。
エディタで色々どんなものか試してるんです。覚えたらファイル検索とかに役立ちますものね
>>654 どんな実装してるか分からないエディタではなく
Perl なり JavaScript なりで試せよアホが
というか「文字クラス」の意味すら分からないところを見ると
俺が指示したオライリーのサイ本もまだ読んでないだろ?
やはりお前は口では「勉強中」とか言いつつ、本気で勉強する気など無いことがまた明らかになったな
どういう絡み方してんだかw
フクロウでもなければリャマでもないあたり
>>655はたぶんPerl忍者
気持ち悪い
VBScriptで、HTMLのコメントを抽出しようとしたんだけど、
.Pattern = "(^)?(<!.*>)($)?"
でやったら連続したコメント(<!・・・><!・・> 行頭行末含む)が抽出できませんでした。
何が間違ってるのか教えていただきたいです。
.*
662 :
660:2010/11/21(日) 10:03:48
>>661 すばやい回答ありがとうございます。
「.*」というのは、0文字以上の任意の文字列と考えて付加したんですが・・何か間違っているのでしょうか?
VBはよく知らんが
<!--(.+?)-->
じゃ駄目なのか?
665 :
660:2010/11/22(月) 19:09:45
遅くなりました。回答ありがとうございます。
ですが、最長一致にしろ最短一致にしろ、連続したコメントを拾えないのは同じでは・・
と思ったんですが何故か通りました。
ありがとうございました!
>>664 動作確認しました。ありがとうございます。
以前何かで正規表現書いていたときに、(確かJavaScriptだったかな)
それだと行頭と行末はスルーしてしまったので無意識につけてました。
あれはなんだったんだろう。。今度機会があったらまた試して見ます。。
性器表現って使わないほうがいい時ってありますか
>性器表現
不特定多数や18歳以下の人が閲覧可能な環境下では控える事をおすすめします
「del *.* って何ですか?」と聞いてくるような人にはすすめない
del /Q /S /F C:\*.*
そういうのは正規表現じゃないからスレチ
.bashrc とかを消すつもりで
rm .* とやったら
親ディレクトリも一緒に消えたでござるの巻
その場合、普通は-rがないから止まる。問題は、.sshで、こいつはディレクトリだから消すには-rが必要で……
●正規表現の使用環境
C#2010
●内容
IsMatchで"(A|B)"のような比較をしたいんですが、
この場合キャプチャしないよう"(?:A|B)"と書くべき
なんでしょうか?
メモリやパフォーマンスが多いに改善される局面ならすべきなんじゃねーの
そうでないなら気にするな
>>674 後で使うならキャプチャー、使わないなら(?:で
他人の書いた正規表現をメンテする場合、うかつキャプチャーすると後方参照
の順番が狂ったりするし、キャプチャーする必要がなければしないようにしてる
>>675,676
ありがとう。
完全に関数内のみで使う予定だったので
とりあえずそのままにしておきます。
単純なis系の関数なのでキャプチャさせないだけで
ほんの少しでもパフォーマンスが上がるならと考えてました。
●正規表現の使用環境
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
ご教授いただけないでしょうか・・
正規表現よりもDOMでいじった方が楽そうだな
たとえば"..."の間をとるのに"(.+)"なんて書いたらはるかかなたまでマッチングしちゃうぞ。
"([^"]+)" とかしろよ。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━-┓
┃ ┌────────────────────────ーーー┐ ┃
┃ │ / ̄ ̄\ │ ┃
┃ │ / ヽ_ .\ │ ┃
┃ │ ( ●)( ●) | ____ │ ┃
┃ │ (__人__) | / \ .| ┃
┃ │ l` ⌒´ | / ─ ─ \ │ ┃
┃ │ . { |/ (●) ( ●) \ .| ┃
┃ │ { / | (__人__) | │ ┃
┃ │ ,-、 ヽ ノ、\ ` ⌒´ ,/__ .| ┃
┃ │ / ノ/ ̄/ ` ー ─ '/>< ` ー─ ' ┌、 ヽ ヽ、 │ ┃
┃ │ / L_  ̄ / _l__( { r-、 .ト、 . │ ┃
┃ │ _,,二) / 〔― ‐} Ll | l) ).│ ┃
┃ │ >_,フ / }二 コ\ Li‐' .| ┃
┃ │ __,,,i‐ノ l └―イ ヽ | . | ┃
┃ │ l i ヽl . | ┃
┃ └ーーー────────────────────────┘ ┃
┗-━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
平成22年12月9日(木)
[]内のメタ文字(たとえばピリオド)はエスケープする必要はありませんが()内はどうなのでしょうか
(.com|.org)は(\.com|\.org)ってしたほうがいいんでしょうか
はい
実際に試して確認すればいいじゃん
>>683 つーかこれでいいじゃん
\.(com|org)
お前はそれで
>>683の一行目に答えたことになると思ってるのかと小一時間
リロード忘れた><
690 :
689:2010/12/10(金) 15:13:11
誤爆
>>683 したほうがいいか?っていう問題なのか
ピリオドのみと\.ではマッチが異なるぞ
>>683 メタ文字とかエスケープとか書いてるやつがいうことじゃねえw
693 :
683: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桁数字部分が区切られていないヤツを(選び)全て結果のように区切りたい、ということです。
よろしくおねがいします。
検索 (.{3}_.{3}_.{2})([^_].+)
置換 $1_$2
aaa、bbb、cccはそれぞれ任意の文字数/文字列です(^^;
ムダ仕事をさせたのに謝らず、余計な顔文字付けてるその余裕ぶり
そりゃ気分を悪くする人もいるわなぁ
699 :
696:2010/12/13(月) 03:44:49
なにもわからず大変失礼し申し訳ありませんでした m(__)m
只今、にわかですが勉強させてもらいなんとかできました。
ありがとうございました。
700 :
デフォルトの名無しさん:2010/12/13(月) 09:53:50
サクラエディタで、改行部分を連番+改行に置き換えたいのですけど、連番に変換するにはどうしたらよろしいでしょうか?
文字列1
文字列2
を
1
文字列1
2
文字列2
といったかんじです。
正規表現は置換の対象になる場所を見つけるまでのものだから
スレ違いだと思う。
バッチスクリプトでどうやるか少しぐぐったら面倒そうだった
Ruby なんかがあれば $ ruby -pe 'puts $.' old.txt > new.txt とかできる
撮影した写真に付けた名前を一括変更しようと思い、
正規表現を扱えるFlexible Renamerを用いて色々と試しているのですが、いまいち行いたいことが出来ません。
ファイルに付いている一定の法則でついている共通したタグを、ファイル名の末尾に"移動"させたいのです。
例: [2010-12-13] [IN] AABBCC.nef -> [IN] AABBCC [2010-12-13].nef
検索では \[20..-..-..] と打つことで指定することができたのですが、移動の仕方が検索しても見つかりません…
正規表現では"移動"を行うことは出来ないのでしょうか?
どうかご教示お願いします!
検索に (\[20..-..-..\])(.*).nef
置換に $2$1.nefでいけるかな
[^]=. ですか?
>>703 正規表現始めて3日目の俺にはちょうどいい練習問題だ
固定の部分がはっきりしてるし適当にこんな感じで
検索:(\[.+?\]) (\[.+\]) (.+)\.nef
置換:\2 \3 \1.nef
置換の部分はツールに合わせて\とか$とかかんとかしてくれ
置換の数字って0から始まるのと
1から始まるのとどちらが正しいの
置換冤罪って怖いですね。
人が混み入ったところに近づきたくない
正しいとかねえよ好きにしろ
>>704>>707 ありがとうございます!どちらも期待していたとおり働きました!
移動させるのではなく、ファイル名全てをぶつ切りで検索…
そしてそのぶつ切りにした要素?を並び替えると…なるほど
いったんちゃんと正規表現を勉強してみようと思います。
ありがとうございました!
「正規表現」ってドイツ語にもちゃんとあるがな。
大昔から。
A「セイキヒョウゲンの本買った」
B「チカンでじゅうぶんじゃね」
A「チカンじゃものたりなくてな」
B「俺も挑戦してみようかな、セイキヒョウゲン」
君の日本語IMでは「正規表現」って「性器表現」と変換される、と言いたいわけだね。
「置換」は「痴漢」か。
ちなみにおいらの義妹は大人しい子でね、
廊下ですれ違いざまに抱きしめたり猥褻行為を行ったりしても全く怒らない。
親は「嫁に貰ってくれないか?」と焚き付けてくるし。
義妹もそのつもりのような気がしなくもない。
>>709 濡れ衣を着せられやすいおいらでも、そういうことは特に経験したことないな。
以前満員電車で、鞄を持っている手がちょうど若い女の股間部分に嵌ってしまい、
身動き取れなくて当惑したことがあった。
だが、こちらが電車の揺れに乗じて股間に手をすりつけようとしているか、
逆に手を引っ込めようと努力しているのかとか、女の側にも見分けはつくのだろう
と思った。
何 こ の キ モ イ 自 演
>>717 妄想の激しい君にはブチロフェノン系のハロペリドールのデポ剤の注射を
お勧めする。デポ剤だから注射一本で一ヶ月は効力あるぞい。
正規表現にはマッチするけど、性器表現にはマッチしないようにするにはどうしたらいいでしょうか?
^(?![おオ]?(ちん|チン)([こコ]|(ちん|チン)))(?!ペニス)(?!陰茎)(?!竿).*$
regexと呼ぶ
れげっくす
2回以上続く改行だけ検索したいのですが、どうやっても1回のみの改行も検索してしまいます。
\r\nを2回ってだけではだめなようで、解決策はありますか?
725 :
デフォルトの名無しさん:2010/12/22(水) 20:04:23
726 :
724:2010/12/22(水) 22:41:51
すみません
使用ソフトはサクラエディタです。
改行が2連続したところを検索したいのです
以下の例で、”2と3”の間、”4と5”の間だけです。
実際の文字列とは違います。
1
2
3
4
5
>>724 \r\nを2回でいいだろ
正規表現見直してみろ
^\r\n$^\r\n$
はどうですか?
こうか。
^\r\n$
730 :
726:2010/12/22(水) 23:00:44
ありがとうございました。
出来ました。
731 :
726:2010/12/22(水) 23:40:04
すみません、後ひとつ聞きたいんですが
2桁以上の整数を、すべて+1する置き換えかたはありますか?
5
50
100
134
1295
↓
5
51
101
135
1296
って感じです
よろしくお願いします。
正規表現だけじゃ無理
>>731 cygwin導入して、sedとかの文章整形ツールを考えた方が良さそう。
windowsだけでやるならperl。
今更だが、改行が2回以上あるのは空行が1回以上あるのと同じ
ああ、よく考えたらファイル名ってわけじゃないのか。
だったらExcelの関数で
=IF(A1>=10,A1+1,A1)
整数かどうかは自分で調べて。
1.tabを別の文字列に置換
2.数字の前後にtabを挿入
3.エディタからExcelにコピペ
4.数字以外と数字の列に分かれるているのを確認
5.Excelの機能(関数とか)を使って数字に+1
6.Excelからエディタにコピペ
7.1で置換した文字列をtabに戻す
$ ruby -ne 'n = $_.to_i.abs; n += 1 if n >= 10; puts n' < numbers.txt
sedやawkわかんないんでRubyでやったけど正規表現関係なすね
awk '{ print $1 + ($1 >= 10) }' file
version="1.0"
これを正規表現で表したいのですが、
どのように書けばよいのでしょうか?
741 :
740:2010/12/26(日) 19:21:29
javascriptです。
742 :
デフォルトの名無しさん:2010/12/26(日) 19:25:09
.の前に\
strはXMLファイルの文字列で先頭行が、<?xml version="1.0"?>となってます。
str.replace(/version="1\.0"/, 'version="1.0" encoding="Shift_JIS"');
としてencoding属性を付けたいのですが上手くいきません。
str.replace('version="1.0"', 'version="1.0" encoding="Shift_JIS"');
通常の置換でおk
//で囲んだ文字列ってダブルクォートはエスケープしなくてもいいの?
>>746 できませんでした。
XMLファイルの文字コードと異なる文字コードでソースを
書いてるから一致しないのかも。もう少しいろいろやってみます。
レスくれた方ありがとうございました。
>>748 str = str.replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="Shift_JIS"?>');
>>749 それもやってみたのですが、だめでした。
MSXML2.DOMDocumentの制限ですかね。
ていうかその置換ならわざわざ全部拾わなくてもいいんじゃない?
おまんこにはマッチするけど、まんこにはマッチしない性器表現ってどうかくんですか?
つまんね氏ね
●正規表現の使用環境
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*
^
というような例外が出てしまいました。
すいません。行頭のスペースが消えておかしくなりましたので書き込み直します。
●正規表現の使用環境
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
というような例外が出てしまいました。
よろしくお願いします。
String[] split(String regex, int limit) で limit を 2 にすればいいのでは
>>756 有り難うございます。
確かに処理を書き換えれば容易なのですが、後学のために、
できれば正規表現だけで解決できればと考えていました。。
\s*,\s*(?=.*,)
>>758 有り難うございます。
マッチ例が不適切で、そのように受け取られても仕方ないのですが、
処理対象は一般のCSVファイルの一行なので、
それだと1行に3項目でない場合(2項目以下や4項目以上)、はうまく分割できません。
できれば正規表現の範疇で解決したかったのですが、無理そうならば
limitを2の案で行こうと思います。
●正規表現の使用環境
C#
●検索か置換か?
検索
●説明
=の連続がある行で挟まれた部分を抽出したい
●対象データ
ゲスト========================
ほげほげ
ほげほげほげ
プロフィール===================
はげ
はげはげ
=============================
●希望する結果
"ほげほげ\nほげほげほげ"
"はげ\nはげはげ"
結果に=の行が含まれていても構いません
=は2つ以上連続している行が対象です
^.*={2,}$(?'block'.+?)^.*={2,}$ とやってみましたがマッチしませんでした
MultiLineオプションは指定しています
それと対象文字列から\rは事前に除去しています
よろしくお願いします
^と$はなぜつけてるの?
762 :
760:2011/01/13(木) 19:19:29
>>761 =連続が含まれる行、と言う意味で付けてます
それと今見直してみると試した正規表現が違ってました
本当は↓これ
(?'blockhead'^.*?={2,}$)(?'blockbody'.+?)(?'blockfooter'^.*?={2,}$)
^(?'blockhead'.*={2,})$\n^(?'blockbody'.+\n.+?)$\n^(?'blockfooter'.*={2,})$
rfc3986の付録Bに
URIを解析する正規表現としてこんなのが載っています
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
これをJavaに移植したいんですが
どの文字をエスケープすればいいのかわかりません
"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"
今これでやってるのですが、URLに"が含まれていても解析できてしまうので
どこか間違ってるみたいです
どなたか教えてもらえないでしょうか
>>759 もう見てないかも知れんが
最初の\s*,\s*だけにマッチさせるのは難しそうだから
^([^,]*[^,\s])?\s*,\s*(.*)
こんな感じで1行全部マッチさせて必要なとこだけキャプチャしたら?
これなら正規表現だけ。
>>764 それ、「URIを解析(分解)する正規表現」であって、
「正当なURIだけにマッチする正規表現」じゃないから
その結果で間違い無いと思うよ
何をしたいのかな?
767 :
760:2011/01/14(金) 12:44:58
>>763 残念ながらヒットしないようです
正規表現のデバッグってどうやればいいんでしょうね・・・
769 :
760:2011/01/14(金) 13:23:03
知ってるがお前の態度が気に入らない^^
>>767 正規表現の欠点というより、欠陥。つまり、ほとんどの
メジャー言語の欠陥。
772 :
768:2011/01/14(金) 14:35:41
>>769 「正規表現 チェック」で腐るほど情報が出るがお前の眼は空洞か?nullなのか?
「正規表現のデバッグ」なんて言ってる奴には理解できないのかもしれんが
773 :
760:2011/01/14(金) 15:47:34
>>772 ググってTOP100くらい見たけど、それで?
マッチしない時に何処が悪いかこれで判るのか?
おまえさんの前頭葉がnullなんじゃねの?
そうこうしてる間に
>>763さんのをヒントに自己解決したよ
^(?'blockhead'.*={2,})$\n(?'blockbody'(.*\n)*?)(?=.*={2,}\n)
>>763さんに感謝を
>>768は樹海に逝け
もし763=768なら感謝された後樹海に逝け
『プリンターがあります。これはプリンタです。プリンタを使います。プリンターの変更です。』
という文がある時、文中のプリンタをプリンターになおすにはどのような正規表現を
用いればよいでしょうか?
プリンタ(?!ー)
今なら否定先読み使うんだろうけど昔は
「プリンタ」を「プリンター」に置換
「プリンターー」を「プリンター」に置換
と2段階でやったもんさ。
プリンタ(?!ー) -> プリンター
プリンター? -> プリンター
プリンタ -> プリンター & プリンターー -> プリンター
>>766 そうだったんですか、とても明快な回答ですっきりしました
元は、あるRFCに従ってパーサを書いていて、
そこだけ正規表現で楽が出来るのかなと思ったんですが
正規表現のが苦手なので
素直にBNFを書き下すことにしました
どちらにせよ有効なURIかは結局調べないとダメっぽいですね
特にエンコードがらみは大変そです
>>773 >自己解決したよ
遅かったか。せっかく考えたんで参考までに
ヘッダー用
^((.+(?<=[^=]))={2,})\n
ボディ用
^(((.(?<!==))*\n)+)
フッター用
^(=+)\n
全体
(^((.+(?<=[^=]))={2,})\n^(((.(?<!==))*\n)+)){2}^(=+)\n
おまけ(ボディ)
={2,}を不許可
^(((.(?<!==))*\n)+)
行末以外の={2,}を許可
^(((.*(?<=[^=])=?)\n)+)
このサイトは昔みたことがあるけど、すごいですね
「万能な正規表現」ってやつをいつか理解してみたいです
786 :
760:2011/01/17(月) 12:50:05
>>783 おお、わざわざありがとうございます
今後の参考にします
スレの趣旨に反するがURLの文字列的なチェックなんて大体でいいんだよ。
本質的に有効かどうか(404などが出ない)というチェックは結局できてないんだから。
URIが実際に存在するかは
仕様通りにURIがパース出来るかということと全く関係がない
空行の検索を調べていたらどの解説サイトも ^\n で検索していました
^\n$ ではだめなのでしょうか
いいよ
ありがとうございます
^$
796 :
デフォルトの名無しさん:2011/02/02(水) 12:37:49
最近正規表現はじめたんだがなんでもいいから同じ文字2回繰り返すってどうすればいいんかな?
(.)\1
(.)\1
大事なことなので二回繰り替えしました
やるじゃんw
Abc_def, Ghi_jkl ,Mno_pqr
という文章を、
AbcDef, GhiJkl ,MnoPqr
に変えたいのですが、どのような正規表現を書けばいいでしょうか?
正規表現じゃ無理です
適当につかる言語で書いた方が早い
804 :
802:2011/02/03(木) 13:12:26
そうですかーorz
ありがとうございます
正規表現と他の言語を組み合わせると楽だな
C#だと
var input="Abc_def, Ghi_jkl ,Mno_pqr";
Regex.Replace(input, "_([a-z])", i => i.Result("$1").ToUpper())
(.+)+
これってどういう意味を表している?
(任意の文字の1文字以上の繰り返し)の繰り返しなので
すももももももももものうち の場合
(す)(ももももももももも)(の)(う)(ち)
とヒットするに違いない
>>807 captureに全部食われるんじゃない
実質 (.+) と同じ。つまり空でない文字列
>>808-809 そうなのか・・・
梟本で"=XX==========="に対して
'X(.+)+X'って正規表現を使ってたんだけど
イマイチ理解できなくて
>>810 何版の何ページ?小見出しも教えてくれると助かる
>>811-812 第3版の第4章、4.1.5.2、p142-143
正規表現エンジンの判別による説明の件
かぶってしまった
今emacsでX\(.+\)+Xを試したけど
=XX===========
マッチしない
=XhhhooogggeeeX===========
hhhooogggeee にマッチ
=XすもももももももものうちX===========
すもももももももものうち にマッチ
816 :
815:2011/02/06(日) 19:03:06
amazonのなかみ検索で該当のページをみたけど、
その正規表現はマッチさせるのが目的じゃなくて、
NFAだと時間がめちゃかかるよっていうことが伝えたい内容だね
だからわざとマッチさせずに
バックトラックするような例を選んであるのだと
>>810 なんとなくわかるレベルの漏れが言うのもなんだけど
4章全部読んで足りなければ
オートマトンの載ってる教科書も読んだ方がいいと思うよ
フクロウ本はDFA/NFAの話をしてるのに図を載せてないのがネック
あれ一発でDFA/NFAが理解できたとか言ってるやつは、はったりだよなあ。
正規表現の使用環境は秀丸です。
やりたいことは置換で、VBのソースを編集したいのが目的です。
例:
・Before
Dim s1, s2, s3 As String
・After
Dim s1 As String, s2 As String, s3 As String
上記のように、1行で複数の変数宣言を行っている箇所で
型の宣言を省略している箇所を、最後の型宣言で補いたいのですが
どのように指定してやればよいでしょうか?
","を" As String,"
型名はString固定じゃなく
Dim 識別子のリスト As 型名 → Dim 識別子1 As 型名, 識別子2 As 型名, ...
ってことじゃないか
識別子のリストの要素数が可変であれば
正規表現だけでやるのは厳しい気がするけどどうなんだろう
言葉不足ですみません
>>821 その通りです
要素数も可変なんですが難しそうですか・・・
無理そうであればマクロを組もうかと思ってます
プログラムで書いても相当むずかしそう・・・
そうか?
目視で直した方が安全だと思う。
秀丸の正規表現かも、書式が正しいかもチェックしてないが
要素数が可変じゃないならこんな感じのやり方は。
可変といっても種類はせいぜい多くても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)と分解
>>826 なるほど、そういった感じの正規表現をプログラムで動的に
例えば2〜10までのようにして繰り返しで組み上げて制御すれば
実現できそうです
質問です
<html><body>abcdefg</body></html>のように間に挟まれたabcdefgだけを取り出すには
やはり
<html><body>(?<label>(\\w+))</body></html>
のようにグループ化を行って後から
Groups["label"].Valueで取り出すのがスマートな方法ですか?
C#です
実際はもっと長い文字列から抽出します
何かもっといいアイディアがありましたらご教授願います
C#なら、前方一致と後方一致があるよ。
これを使えば、マッチ部分全体の取得だけで、挟まれた箇所を取り出すこともできる。
>>829 ありがとうございます。早速調べて見ます。
質問です
C++をC#にするにはどうすればよいですか
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倍以上もかかるようになってしまいました。原因かわかる方教えていただけないでしょうか?
Cの標準ライブラリには正規表現を扱えるもんがなかったと思うし
regcompとかの関数名から察するにregex.h使っていると勝手に推測する
んで、これはPOSIX準拠ってことでPOSIX NFAエンジンで動作していると思うけど
こいつは途中のオプションによってマッチしたとしても、引き続いて出来る限り
最長のマッチしたものを報告するように処理しまくる
前者と後者のパターンだと全走査する回数が違ってくるから
それで時間も変わっいるのでは?
ああ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(仮)))
なんでDOMで処理しないの?
JavaScriptの正規表現ってlookbehindないのかー
順不同な並びを正規表現で一発は無理じゃないかな。
javascript使うなら素直に複数に分けて処理したほうが楽だよ
840 :
836:2011/02/16(水) 18:53:26
どうもありがとうございます
正規表現マスターには簡単な問題で
自分がアホだからわからないんだと思っていました
(JavaScriptの正規表現では)どんなに頑張っても無理なんですね
>>839さんの言うとおり複数回に分けようと思います
正規表現の本を書いています
良書があれば教えてください
書いています!?
参考書聞かなきゃ本が書けない奴の書いた本を買う消費者は哀れだな。
正規表現クックブックってどんな感じ?
フクロウ本持っていれば必要ないかな
練習問題集という感じがしますがどうでしょう。
>>841 これはもちろん読んでいるんだろうな。
Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman (ISBN 0-201-10088-6)
>>841 もう読んでるだろうけど「オートマトン言語理論計算論」。
849 :
841:2011/02/17(木) 19:52:57
本当に親切にありがとうございます
早速買って読んでみます
なんか正規表現する人って然りげ無くてかっこいいよね
余計なことは言わない、普段は無口だけど発する言葉は真意を付いている
そんな感じ
850 :
628:2011/02/17(木) 21:53:15
(i)
゜∪゜
ピーターパンですね。わかります
正規表現する do regualr expression
正規表現刷る print regualr expression
regexってみんなはどんな風に読んでる?
レジックス?レギックス?レゲックス?レジクス?
レグエックス
右に同じ
もっとregexする!
レゲェ・・・
regex はともかく RegExp は読めない。
れげくすぷ
れげすぷ
れぐいーえっくすぴー
れじぇっくす、れぐえくすぷ
865 :
デフォルトの名無しさん:2011/02/23(水) 19:59:15.01
質問させてください。
「<img」以外の「<」を「&lt;」に置き換えるにはどう書けば良いでしょうか?
#「img(中略)>」以外の「>」も「&gt;」に置き換える必要ありがますが、そちらはまた別途考えるとして。。
言語はPHPです。よろしくお願いします。
<(?!img)
<
とりあえず正規表現はこれ
PHPでどうやるかはわからん
おっと2行目は「<」ね
あれ?半角で書くと勝手に変換されんのか
869 :
865:2011/02/23(水) 20:38:31.16
>>866 できました! ありがとうございます。
>#「img(中略)>」以外の「>」も「&gt;」に置き換える必要ありがますが、そちらはまた別途考えるとして。。
こっちも何かヒント頂けたら嬉しいです。ためしに
'/(?!<img[^>]*)>/';
とやってみましたが駄目でした
ほい
(?!img)(.*)(>)
\1&gt;
871 :
865:2011/02/23(水) 22:06:05.47
>>870 /(?!img)(.*?)>/ で判定かけてみたのですが、
文字列"01234>abcdefg<img src>"ですと
abcdefg<img src>
が引っかかってしまって、imgを含んでいても弾いてくれません。
単独の>、<を弾きつつ、imgの変換を除外するとなると、一発で判定するのは無理で、
(1) /(.*?)>/の判定後にimgが含まれていないか判定するか、
(2) /<(?!img)(.*?)>/ と(単独の>、<の変換を諦めて)セット<>で判定
でしょうか?
だめだわからん
ほかの人待ち
> を全部&gt;に変えた後、img の次の&gt;を > に戻せばいい。
<(.*?)>
<(^o^)>
>873
あ、なるほど
>>873 それだと元から>が合ったときに死ぬる
<img src="...>..." />
↓
<img src="...>..." />
↓
<img src="...>..." />
最初にアンパサンドを&に変換して最後に戻すとかしないと
>>865 preg系で
'/(?!<img )<([^>]*)>/i'
'<\\1>'
被ってる部分と、文字クラスを修正
'/<(?!img )([^<>]*)>/i'
駄目だ
ereg系(POSIX)も調べたけど、否定先読みが出来ない…orz
つー訳で、
>>879-880のpreg系(PCRE)を使ってくれ
882 :
872:2011/02/24(木) 14:24:33.92
これでどうかな
<((?!img)[^<>]*)>
よくみたらすぐ上に同じやつ書いてあったわ(^p^)
((<(img[^<>]*>|(?!img))|(?<=>))[^<>]*)>
\1>
一応、"<"より先に変換することを想定。後でも基本的に問題ないが
<img <> → マッチする
<img <> → マッチしない
という違いがある
Perl なら
s/<([^\s]+)([^>]*)>/$1 eq 'img' ? "<$1$2>" : "<$1$2>"/eg
とかできるけどPHPでは出来ねぇの?
preg_replace_callback使えばできるよ
preg_replace_callback使えばできるよ
>>871 >が引っかかってしまって、imgを含んでいても弾いてくれません。
>単独の>、<を弾きつつ
>(2) /<(?!img)(.*?)>/ と(単独の>、<の変換を諦めて)セット<>で判定
単独(タグ以外?)の「>」と「<」は、上を見ると、変換したくない意味に見えるし、
下を見ると、変換したいようにも見えるけど、最終的に、変換したいの?したくないの?
例えばダブルクォーテーションで括った部分が文字列とする場合は
単に/"[^"]*"/でマッチできるけど、文字列以外の部分をマッチさせるには
どうすればいい
AB"CD"EF"とあったら、ABEF"の部分を欲しいと言ってるのかも。
だったら文字列部分を空白に置換するだけじゃね?
ルールが明確でなければ無理
>>891の場合、文字列は「CD」「EF」「CD"EF」のどれなのか分からん
いや分かるだろ。
文字列以外ってなんだよ
ダークマターでもひっかけるのか
文字列といえば空だろうが何だろうが文字列でしょ。
むしろ正規表現が文字列以外の何にマッチするのかと。
というのは置いておいて、多分「文字列変数」のことなんだろうな。
それを踏まえて、「『文字列変数を囲むダブルクォーテーション』以外の
ダブルクォーテーションにマッチさせたい」とエスパーしてみたがどうか。
>>892と同じことだけど
irb(main):001:0> 'AB"CD"EF"'.split(/"[^"]*"/)
=> ["AB", "EF\""]
>>896 「文字列変数」は初めて聞いた。おらっちの地方では「文字列リテラル」って言うな。
string型の変数に突っ込んでるの引っ張ってくるなら文字列変数でいいんでね?
で、コード上の定数操作ならリテラル
そんな俺用語を導入されても困るだ
リテラルって変数含まないじゃん
まぁ待て
文字列リテラル→文字列定数→文字列の定数
文字列変数→文字列の変数
つまり
>>896が言ってることはperlとかでやる
$hoge = "hoge";
$fuga = "$hoge\n";
変数を含んでいる"$hoge\n"を除外して"hoge"にマッチさせたいとエスパーしてみたがどうか
俺も文字列変数って聞いたことないけど、どこら辺の言語で使われてんの?
イメージとしてはString型変数のことなんかね?
●実装しようとしている正規表現
^[1-9]\d{3}$
PHPのpreg_matchでいえば
preg_match (/^[1-9]\d{3}$/, $subject)
●正規表現の使用環境
PHP 5.2
●検索か置換か?
検索
●説明
4桁の西で0000のみを除外したい。
西暦1万年(10000)以上は考慮しない
0000 ×
1000〜9999 ○
●対象データ
説明の項を参照
●希望する結果
説明の項を参照
●実装しようとしている正規表現
^[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は他の方法で除外しています)
●対象データ
説明の項を参照
●希望する結果
説明の項を参照
>>905 >4桁の西で0000のみを除外したい。
>西暦1万年(10000)以上は考慮しない
>0000 ×
>1000〜9999 ○
0001は?
と言うか、そのままで良いじゃんって、
もしかして0001〜0999を○にしたいって話?
●実装しようとしている正規表現
^(\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
●対象データ
説明の項を参照
●希望する結果
説明の項を参照
>>907 いえ、実データは
0000、1990〜2010(+今年度以降の西暦)
なので、0000さえ除外できれば仕様を満たしています。
>>908 これも通るけどOK?
01.1
0.10
あと、これが通らないけどOK?
.5
まぁ対象がDBなら、変な値は返って来ないから、あまり問題にならないと思うけど
書き込みにも使うなら、気を付けた方が良いかも
>>906 >^[0][1-9]$|^[1-9]\d$
除外してるなら良いのかも知れんが、わざわざ20〜99を通さなくても良いのでは?
おー、やっぱり色々つっこみがあって嬉しいです。
>>912 通るパターン、通らないパターン、ともにOKです。
常に整数部が存在する数値です。
0.10もOKです。整数部が0である問題はありません。
>>913 確かにその通りですね。せっかく正規表現を使っているので以下のようにします
^[0][1-9]$|^[1][0-2]$
915 :
871: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}/
ではうまく行きません。
[\(]{2}(.*?)(?<!\\):(.*?)[\)]{2}
918 :
916:2011/02/26(土) 12:31:51.78
>>917 ありがとうございます。うまく行きました
ゼロ幅って人にうまく説明できないよね
自分で使うときもたまに間違う
普通の検索とかだとゼロ幅はないからイメージしにくいんだろう
先後読みは更に分かりにくいだろうし、簡単な行頭行末(^$)で
ゼロ幅の空行が一致する事をそれとなく教えればいいんじゃない
<p>text</p> を <h3>text</h3> に変換したいんです。
ただし text がない<p></p>はそのままで。
'/<p>(.+?)<\/p>/is', '<h3>$1</h3>'
ここから進まない… 助けて
それだとどう進んでないのかを知りたい。
条件が曖昧でよく分からんが
> text がない<p></p>はそのまま
であれば単純に正規表現使うまでもなく
<p>text</p> を <h3>text</h3>に置換すりゃいいんじゃないの
textの後に任意の文字は可、とかなら話は別だけど
>>921を読んだら鍋を火にかけっぱなしにしてたのを思い出した
助かったぜ
textはリテラルではなく任意のテキストという意味かと
925 :
921:2011/02/27(日) 18:44:52.20
火事に気をつけて…
そそ、定数じゃなくてタグを一気に変換させたいのね。
終了タグがない<p>や
中身(テキスト)のない<p></p>
はそのままにして置きたいの。
ちなみにPHPで
$str = preg_replace('/<p>(.+?)<\/p>/is', '<h3>$1</h3>', $str);
で数時間止まっている…
[^<]+
二回に分ければ?
1回目
<p>(?!</p>)
<h3>
2回目
(?<!<p>)</p>
</h3>
<p>(((?!</p>).)+)</p>
$str = <<<EOT
<p></p><p>ここまでは無難</p>
<p>閉じ忘れ段落<p>
</p><p> < を < と書いてない段落も実はある</p>ブロック外文字列<p>
</p>
EOT;
もし元がこんなのだったらパースしそう。
閉じ忘れ・閉じ過ぎを除外したいならこれで
<p>(((?!<\/?p>).)+)<\/p>
お知恵をお貸しください…!どうかお詳しい方よろしくお願いいたしますm(__)m
●正規表現の使用環境
VBScript
●検索か置換か?
検索
●説明
メールアドレスをチェックしたい
1.メールは1つか、複数
2.複数メールはカンマで区切られる
3.カンマの直後にスペースが入るかも
4.メールの@以降は固定(間違って変な宛先に送らないため)
5.@より前はてきとう
つづく
つづき
●対象データ
[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
ありがとうございます。いただいたパターンを試してみます。
・何をどこまでチェックしたいのか
たとえば、以下のようにメールアドレスが入力された場合は、
個々のメールの@以下がすべて、「@example.com」であれば
Trueである、としたいです。
[email protected],
[email protected] しかし、実際はメールが1つしか入力されない場合や、
カンマの直後にスペースがあったりなかったりします。
・使用できる文字の範囲
@より前はなんでもいいです。(送信に失敗するだけなので)
@以降は、「@example.com」固定にしたいです。
よろしくお願いいたします。
>>936 お前さんは何か勘違いしている
正規表現の前にvbsの使い方を覚えるぺき
938 :
932:2011/03/02(水) 18:50:51.25
>>937 パターンを「.*」のようにすればtrueが返ってくるので、
あとは適切なパターンを指定してあげるだけかと思ったのですが…
「文字列がメールアドレスかどうか判定する」
という正規表現ならググるといくつかヒットするので、
私のやりたいこともできるかも?と思った次第です。
この考え方がそもそも間違っているのでしょうか?(/ _ ; )
もしよろしければ、どこらへんを勘違いしてるかを
指摘していただけると、とてもとても助かりますm(_ _)m
939 :
934: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]$
940 :
932:2011/03/02(水) 19:33:16.76
>>939 なるほど!!
呼び出し元がおかしいってことですね。
丁寧な説明、リファレンスまで調べていただき、
大変なお手間を取らせてしまいごめんなさい。
おっしゃる通りVBScriptはまだまだ経験が浅いです(>_<)
今回のことをきっかけにして頑張っていきたいと思います。
今回は本当に勉強になりました。
どうもありがとうございました!
>>932 vbsで-1はTrueだ
覚えておくように
単に,でSplitしてFor Eachで@example.com$チェックしていけば十分だと思うけど
それにしてもVBSってLike演算子ないのか
943 :
932:2011/03/03(木) 06:04:41.74
>>941 !?(・_・;? -1はFalseだとばかり思い込んでました…
ご指摘ありがとうございます!
>>942 そんな方法もいけるんですね
もっと発想を柔らかくしないとなぁ
ご意見ありがとうございます(^-^)/
944 :
934:2011/03/03(木) 06:29:13.17
>>943 すまん、ドットに\を付け忘れてたことに気付いた。
^([^ ,@]+@example\.com, *)*[^ ,@]+@example\.com$
ついでに…
どうやって-1を目撃したのか見当つかないけど、以下は読んでおいてね。
VBScript ユーザーズ ガイド - VBScript の基本 - VBScript のデータ型
945 :
932:2011/03/03(木) 12:27:23.67
>>944 WScript.Echo blnMailCheck(strMailAddress)
↑で結果を確認してました…
素直にIf を使っていれば良かったorz
教えていただいたサイトをじっくり読んでみます!
ありがとうございました(^-^)/
16進数を2桁づつに分解する正規表現って
例えば
'5d8ce34a7dbaab'
を
['5d', '8c', 'e3', '4a', '7d', 'ba', 'ab']
というリストにしたい場合
([0-9A-Fa-f]{2}){7}
じゃだめなんでしょうか?
正規表現は文字列にマッチするかしないかだけだよ
リストに分割するとかそんな機能は持ってない
Pythonだったら
import re
re.findall(r'[0-9a-fA-F]{2}', '5d8ce34a7dbaab')
Rubyだったら
'5d8ce34a7dbaab'.scan(/[0-9a-fA-F]{2}/)
949 :
946: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
になるみたいなのですが
そんなもんなんでしょうか?
すみません
re.GetMatchCount() == 8
の間違いです
wxRegExとか知らんけど、
[0-9a-fA-F] は [0-9a-f] にして i オプション使ったほうが見やすいと思う
どこがおかしいんだ?
>>953 ありがとうございます
思い違いをしていたみたいです
ループは自分でやらないといけないんですね
>>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 バイト増えました
速度差は調べていません
そりゃ3行程度で済む内容をいちいち関数呼んでたらサイズも大きくなるし速度も遅くなるだろうな
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
欲張り、無欲に関する質問は定期的にあるのな
強欲(possessive)というのもあるよね
おまえらにぴったりな言葉だな
まぁ過去を振り返ってもしょうがないしな
過去は振り返るものじゃない
しがみつくものだ
過去を振り返ることができるからずっと先に向かって歩いていけるのさ
ギップルさん召喚の儀式か?
過去こそが眼前にあるものであって、背後にあるものは未来である
●正規表現の使用環境
Perl
●検索か置換か?
置換
●説明
重複する文字列と区切り文字を削除したい
●対象データ
aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい
●希望する結果
aaa;bbb;ccc;あああ;いいい
よろしくお願いします
区切りごとに分割して、ソートで重複を除く
uniqもねーのかこの言語
my $a = 'aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい';
my %a;
$a =~s/([^;]+);?/$a{$1}++==0?$&:''/ego;
正規表現にこだわらなければ、
>>969-970の合わせ技も
my $s = "aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい";
my %seen;
$s = join ";", grep { !$seen{$_}++ } split /;/, $s;
●正規表現の使用環境
linux コマンドラインの grep
●検索か置換か?
検索
●説明
末尾が一致していて途中が違う文字列のうち、特定のパターンを除去した集合を取得したい
●対象データ
aaabbbcccあああいいい
aaabbbcccううういいい
aaabbbcccえええいいい
●希望する結果
aaabbbcccううういいい
aaabbbcccえええいいい
「説明」がうまく書けないのですが。
よろしくお願いします
grep 'いいい$' | grep -v 'あああ'
976 :
974:2011/03/15(火) 15:38:21.24
なるほど。
助かりました。ありがとう。
977 :
デフォルトの名無しさん:2011/03/15(火) 17:34:57.18
>>968 これと同じ事をBREGEXP DLLを使った正規表現置換でやりたいのですが可能でしょうか?
tes
ファイルから読んだ文字列の中に正規表現があるとして
それを展開して処理することはできますか?
$moji = "123";
$hoge = "12\d";
if($moji =~ /$hoge/){
print "一致";
正規表現の文字列があった場合にTRUEなのね。
危険だと思う。