スルーされにくい質問のテンプレと例 ●正規表現の使用環境 Java1.5 ●検索か置換か? 検索 ●説明 各行の1番目のAまでを検索したい ●対象データ ABCA BCAA CABA ●希望する結果 ABCA ^ BCAA ^^^ CABA ^^
すいません、質問です。 (a{3}|b{3}|c{3}) と [abc]{3} は等しいですか?
6 :
トーマス :2009/05/07(木) 23:32:33
>>5 ちょっと違います
前者は aaa、bbb、ccc の3種類の文字列にしかマッチしませんが
後者は abc、cba、aab などにもマッチします
後者は3文字の文字列であれば1文字ごとに文字が変わってもいいのです
>>6 なるほどぉ
理解できました、ありがとうございました!
>>9 レスどもです。
でも (?<!xcf).gz と *.(?<!xcf).gz と *(?<!xcf).gz を試してみましたがダメでした。
x-finderがどの正規表現に対応してるかわかれば良かったんですが
検索しても見つからなかったんですよね…。
11 :
8 :2009/05/08(金) 20:22:04
x-finderの機能で別の指定方法があり そちらで希望の動作ができましたので 質問を下げさせていただきます。お騒がせしました。
12 :
デフォルトの名無しさん :2009/05/08(金) 21:55:38
スレ違いでなければいいのですが… ●正規表現の使用環境 PHP4.3 ●検索か置換か? 置換 ●説明 html内のテキストから特定のタグ(特定のurlへのリンク)のみを削除したい ●対象データ …テキスト<a href="a.php?id=○○">「aへのリンク」</a>テキスト<a href="b.php?id=△△">「bへのリンク」</a>テキスト<a href="c.php?id=□□">「cへのリンク」</a>テキスト… ●希望する結果 …テキスト<a href="a.php?id=○○">「aへのリンク」</a>テキスト「bへのリンク」テキスト「cへのリンク」テキスト… このようなことは可能でしょうか? aへのリンクのみを残して、bとcへのリンクを削除したいのですがタグとタグの間の文字は残したいのです また動的ファイルのためパラメータがその都度変化します
(\<a href="[^a].+\>)「.+?」(\<\/a\>) これで$1と$2を空白に置換でどうだろ。 今、出先なんで確認取ってないです。
14 :
トーマス :2009/05/09(土) 02:15:26
>>13 >>14 ありがとうございます
こちらも出先なので戻り次第確認してみようと思います
16 :
デフォルトの名無しさん :2009/05/10(日) 01:19:30
909 :デフォルトの名無しさん:2009/04/17(金) 00:22:26 簡単な検証方法 <center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N; /*可変*/ N=1000; document.write('<style>td,th{font-size:10;} </style><table border=1><tr>'); document.write('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>'); document.write('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>'); document.write('<th>ヘロン公式による<br>√を使った面積計算結果 </th>'); document.write('<th>問題となる誤差<br>倍率'+M+'倍 </th> </tr>'); for(i=-N;N>=i;i++){ // 数値を自動代入 x1=0; y1=i; x2=-1; y2=0; x3=1; y3=0; a=Math.abs(x1-x2)*Math.abs(y1-y2); // 底辺x高さ÷2公式による面積の計算 b=Math.abs(x2-x3)*Math.abs(y2-y3); c=Math.abs(x3-x1)*Math.abs(y3-y1); s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3)) s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-(a+b+c)/2; S1=S; a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算 b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)); c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3)); s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S; document.write('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示 document.write('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>'); document.write('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td> </tr>'); }document.write(' </table>'); </script>
17 :
デフォルトの名無しさん :2009/05/10(日) 01:24:06
<center><script>varx1,y1,x2,y2,x3,y3;vara,b,c,s,S;varS1,S2,M,N; /*倍率*/M=100000000; /*回数*/N=1000; document.write('<style>td,th{font-size:10;}</style><tableborder=1><tr>'); document.write('<th>x1</th><th>y1</th><th>x2</th><th>y2</th><th>x3</th><th>y3</th>'); document.write('<th>底辺x高さ÷2公式<br>による面積計算結果</th>'); document.write('<th>ヘロン公式による<br>√を使った面積計算結果</th>'); document.write('<th>問題となる誤差<br>倍率'+M+'倍</th></tr>'); for(i=0;N>i;i++){//数値を自動代入 x1=(Math.random()*2-1)*M;y1=(Math.random()*2-1)*M; x2=(Math.random()*2-1)*M;y2=(Math.random()*2-1)*M; x3=(Math.random()*2-1)*M;y3=(Math.random()*2-1)*M; a=Math.abs(x1-x2)*Math.abs(y1-y2)/2;//底辺x高さ÷2公式による面積の計算 b=Math.abs(x2-x3)*Math.abs(y2-y3)/2; c=Math.abs(x3-x1)*Math.abs(y3-y1)/2; s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3)) s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3));S=s-a-b-c;S1=S; a=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//ヘロン公式による√を使った面積の計算 b=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); c=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); s=(a+b+c)/2.0;S=Math.sqrt(s*(s-a)*(s-b)*(s-c));S2=S; document.write('<tr><td> '+x1+'</td><td> '+y1+'</td>');//計算結果と誤差を表示 document.write('<td> '+x2+'</td><td> '+y2+'</td><td> '+x3+'</td><td> '+y3+'</td>'); document.write('<td> '+S1+'</td><td> '+S2+'</td><td> '+(S1-S2)+'</td></tr>'); }document.write('</table>'); </script>
18 :
デフォルトの名無しさん :2009/05/10(日) 01:31:29
<center><script>var x1,y1,x2,y2,x3,y3;var a,b,c,s,S;var S1,S2,M,N; /*倍率*/M=100000000; /*回数*/N=1000; document.write('<style>td,th{font-size:10;}</style><table border=1><tr>'); document.write('<th>x1</th><th>y1</th><th>x2</th><th>y2</th><th>x3</th><th>y3</th>'); document.write('<th>底辺x高さ÷2公式<br>による面積計算結果</th>'); document.write('<th>ヘロン公式による<br>√を使った面積計算結果</th>'); document.write('<th>問題となる誤差<br>倍率'+M+'倍</th></tr>'); for(i=0;N>i;i++){//数値を自動代入 x1=(Math.random()*2-1)*M;y1=(Math.random()*2-1)*M; x2=(Math.random()*2-1)*M;y2=(Math.random()*2-1)*M; x3=(Math.random()*2-1)*M;y3=(Math.random()*2-1)*M; a=Math.abs(x1-x2)*Math.abs(y1-y2)/2;//底辺x高さ÷2公式による面積の計算 b=Math.abs(x2-x3)*Math.abs(y2-y3)/2; c=Math.abs(x3-x1)*Math.abs(y3-y1)/2; s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3)) s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3));S=s-a-b-c;S1=S; a=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//ヘロン公式による√を使った面積の計算 b=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); c=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); s=(a+b+c)/2.0;S=Math.sqrt(s*(s-a)*(s-b)*(s-c));S2=S; document.write('<tr><td> '+x1+'</td><td> '+y1+'</td>');//計算結果と誤差を表示 document.write('<td> '+x2+'</td><td> '+y2+'</td><td> '+x3+'</td><td> '+y3+'</td>'); document.write('<td> '+S1+'</td><td> '+S2+'</td><td> '+(S1-S2)+'</td></tr>'); }document.write('</table>'); </script>
19 :
デフォルトの名無しさん :2009/05/10(日) 01:40:10
20 :
デフォルトの名無しさん :2009/05/10(日) 13:46:16
<TAG xxxxxxxxxxxxxxxxxxxxx /> <TAG xxxxxxxxxxxxxxxxxxxxx >yyyyyyyyyyyyyyyyyyyyyy</TAG> 上記文字列から、x, y を一つの正規表現で抽出することは可能でしょうか?
22 :
デフォルトの名無しさん :2009/05/10(日) 14:07:14
23 :
デフォルトの名無しさん :2009/05/12(火) 09:24:09
質問お願いしいたます。 ●正規表現の使用環境 XPですFlexible Renamerなどのリネームソフトでファイル名の文字化けした箇所のみ消したいのです ●検索か置換か? 置換 ●説明 半角カタカナ ロシア文字 ハングル文字 中国語の漢字 特殊な記号 を全て置き換え や 英数字以外全ての文字 を全て置き換え や 日本語以外全ての文字 を全て置き換え の方法があれば教えてください ●対象データ File_鱈鯵D12345_xxハンカクカタカナ゙x@дЩ鱈賦xxx.jpg ●希望する結果 File_12345_xxxxxx.jpg
半角英数と[-_.]ぐらいを残すとして、Flexible Renamerを使うなら [^-_.a-zA-Z0-9] を検索のところに入れて、置換を空白でリネームすればどうだろうか \Wは\wが全角も拾うっぽくてうまくいかないな
>>24 必要な文字の方を残して消せば良かったんですね、勘違いしてました・・・
理想的な方法が出来ましたありがとうございました!!!
[^-_.a-zA-Z0-9]
[^-_.a-zA-Z0-9a-zA-Z0-9ァ-ヶぁ-ん〜ー亜-煕一-龠]
[^-_.a-zA-Z0-9a-zA-Z0-9ァ-ヶぁ-ん〜ー亜-腕弌-熙]
26 :
デフォルトの名無しさん :2009/05/15(金) 08:39:43
●正規表現の使用環境 php5 ●検索か置換か? 検索 ●説明 画像の中に連続した数字があるか調べたい ●対象データ F1 00 00 00 00 00 00 00 00 00 EE DS 00 12 47 36 11 66 00 00 11 FS ●希望する結果 match or not 単純な文字列は扱えるのですが16進数からどう取り出せば良いか分かりません。 まずfile_get_contentsでファイルを読み込んでおり、\x00 == $strなどは分かりますが正規表現でどうすれば良いのかが分かりません。 どなたかご教示願いますm(__)m
>>26 php知らんけど、「画像の中に連続した数字」と言うのは単純に「バイト列中に特定の値が連続する」と解釈して宜しいか?
だとすれば、\x00\{2,\}でよさそうだが。
28 :
デフォルトの名無しさん :2009/05/15(金) 09:32:12
(.)\1*
29 :
デフォルトの名無しさん :2009/05/15(金) 09:33:49
同一文字の2個以上の連続は (.)\1+ か
画像が16進数ってどういうこと?
>>26 画像は画像じゃん。
画像「データ」つまりバイナリに対してマッチさせたいという話でしょ 一瞬、画像認識かとも思ったけど
"連続した数字" とは何を指すんだろう。 バイナリの00も連続した数字と言えるし他の解釈の仕方も出来る。 自分の考えていることを相手に正確に伝えられない人はまず 日本語の勉強をするべき。
連続した数字というと1,2,3,4,5を連想してしまう。 PHPって文字列とバイナリを区別しないんじゃない。
テンプレの意味わかってんのかな 対象データと希望する結果がそれじゃわけわからん。
質問主は 16進数 の意味がワカットランと思う。 もしかしたら 数字 の意味もワカットランと思う。 最近は学校でそゆこと教えないのか?
unko123.com unko784.com unko962.com これらを正規表現する時 unko\d\.com と unko\d+\.com どっちが正しい?
\d{3}と迷うならともかく前者はありえん
>>37 unko\d{3}+\.com ってこと?
39 :
デフォルトの名無しさん :2009/05/18(月) 03:03:12
+余計だろ
ん、+のない\dが複数桁の数字にマッチする実装があるって事?
{n} で n 個の一致。 \d{3} は \d\d\d と等価。
ああ、39は38に宛ててか。
unko[0-9][0-9][0-9]\.com unko[0-9]{3}\.com unko[0-9]+\.com unko.\d\d\d\.com unko\d{3}\.com unko\d+\.com
いやいや、正しくは unko[179][286][342]\.com だろう。
>>44 それなら
unko(123|784|962).com
の方が正しいだろう。
おまいら楽しそうだなw
$txt = aaa(’12165; のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、 この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません 妙案ないでしょうか php5 or 4
PHPってこんなんだっけ? mb_ereg_replace("(?!aaa\\()’(\\d+);", "\\1", "aaa(’12345;");
49 :
デフォルトの名無しさん :2009/05/18(月) 22:22:53
8桁の10進数を文字列とみなしたとき、 下2桁が"00"でない文字列をヒットしたい。如何すればよいか?
/\d{6}[1-9]{2}/
いや、違うな。 /\d{6}(\d[1-9]|[1-9]\d)/
53 :
49 :2009/05/18(月) 23:29:28
/\d{6}(?!00)\d\d/
言語:Java 文字列: $:hogeA; $:hogeB; これをpattern&matchさせるにはどうすればいいのでしょうか?
56 :
55 :2009/05/22(金) 17:23:55
質問内容を間違えました。 文字列: ${hogeA} ${hogeB} これをpattern&matchさせるための正規表現は \\$\{.*.} でOK? (Eclipse 3.2 JDK 1.6でエラーが出るorz )
なんなのそのバックスラッシュ
「pettern&match」とは何ぞや? アンド?
59 :
55 :2009/05/22(金) 18:23:06
>>58 Patternオブジェで正規表現コンパイルして、
Matcherのfindメソッドで一致を確認したいのです。
$\{.+\} javaはしらん
61 :
55 :2009/05/22(金) 18:56:03
自己解決しました。
Matcher#groupで取得するため
(\\$\\{.*.\\})でうまくいきました。
>>60 つ旦 ありがとう。
<img src="./topimg_0905.gif" alt="テキスト" border="0" /> PHPで上のようなイメージタグからtopimag_に続く4桁の数字とalt=""の中身のテキスト(全半角マチマチ文字列)のみを それぞれ$gifと$altに抽出したいのですがよい方法はないでしょうか
そういうのはHTMLパーサ使った方がいいって言ってるだろうが。
UNIXで、与えられたパスが絶対パスである条件って $(|~\S*)?/\S* でいいですか? 思いがけないパターンがありそうで怖いんですがどうでしょうか
「先頭がスラッシュか」だけじゃ駄目?
~ユーザ名/も絶対パスとみなしたいんだろ
それだったら~/も含める必要がありそうな。
知らないならレスしないでください
^[~/]でもよさそうな気もするな
IMOX って空白を含むディレクトリ名ってだめだっけ?
困ったことに、使えるねぇ。
キーボードが1列ずれた。すまんw IMOX じゃなくて UNIX って書きたかった
74 :
デフォルトの名無しさん :2009/05/29(金) 23:31:42
よろしくお願いします。
現在Yahoo!pipes(
ttp://pipes.yahoo.com/pipes/ )を使っているのですが、
pipesの中でデータをURLエンコードしたいと思っています。
そのような機能はないので、正規表現(マニュアルによるとPerlライク)でやろうと思っているのですが、
Perlの関数を使えないのでunpackを使うやり方ができません。
純粋な正規表現のみでURLエンコードはできるものなのでしょうか。
修飾子として使えるのは「gsmi」のみです。
>純粋な正規表現のみでURLエンコード 正規表現を利用してなら可能だろうだけど、正規表現のみじゃ無理 なんつーかノリも必要なペーパークラフトをハサミだけで作れって感じだ URLっていう型紙からデータを切り抜くだけでどうやってURLエンコードを組み立てるよ
/\x00/%00/g /\x01/%01/g … /\xFF/%FF/g
>>77 それやると % と 0-F の文字が置換されないか?
深く考えずに書いたネタにマジレスされても困るんだが、本気でこのアプローチを採用するなら、 0-9A-Fは置換する必要ないし、%を一番頭に持ってくればいい。
行頭から6文字目までをマッチさせるにはどう記述したらよいでしょうか?
^.{6}
84 :
デフォルトの名無しさん :2009/06/08(月) 23:24:52
FlashのActionScript3.0(WinXP-Pro)です。 文字列中で特定の文字列のみに色付けをしようとしていますが、目的の文字列 以外でも色が付き困っています。 例えば、『名無し』という文字列のみを青色にしようとすると、独立した文字列 名無し はOKなのですが、「デフォルトの名無しさん」でも『名無し』が青色になってしまい ます。 A名無しB という場合(前または後ろに不要な文字がある場合、つまり他の文字列 に組み込まれた場合)は対象から外し、単独の場合のみを対象したく思っています。 これに適した正規表現はありますでしょうか?
^名無し$
>>85 有難うございます。しかしながら、質問が不十分でした。
確かに独立した文字列は許可したいのすが、それ以外に A名無しB で
AまたはBが
1) 半角のスペースの場合
2) 半角の左括弧 ( の場合
3) 改行の場合
4) ピリオドの場合
に名無しを青色にしたく思っています。
当初、キャラクターコードとif文で分岐しようとしましたが煩雑になったので
正規表現を利用しようと思いました。
こんな場合はどうでしょうか?
不特定の半角英数字と半角記号でできている半角文字列の中から (' ') に挟まれた数列だけを残して他を削除したいのですが方法はないでしょうか 例) 234hbhkltgfokdlthL+POL+PL>?*|{?('54653'); の中から54653だけを取り出し他を削除 ※不特定文字列内において、 (' や ') は取り出す予定の数列を挟む場所以外では現れません PHP
88 :
デフォルトの名無しさん :2009/06/09(火) 13:17:17
('...') は複数出現するのかな?一応それを考慮して $a = preg_replace('/(?:(?!\(\').)*(?:\(\'(\d+)\'\))?/', '$1', $a);
89 :
87 :2009/06/09(火) 13:47:46
>>88 ありがとうございます
('nnn')は1カ所しか出てきません
自分で応用できないかやってみたんですがムリでしたw
1カ所しかでてこないバージョンを教えてくださいw
PHPの書式は分からないけど、 \('(.+)'\) で検索して、後方参照で\1だけ残せば良いんじゃない?
> \('(.+)'\) Vサインしてるクマたんみたいでかわいい
submatchでグループ化したものを抜き出せば良いんでない?
(V)o¥o(V) フォッフォッフォ
(a+b) - (b - c) みたいな文字があって ()の中をそれぞれ取り出したい場合 (.*)ってやると 一番最初の(と最後の)でも一致してしまう させたくないんだけどどうすればいいの? 環境はVB.NET
>>94 特殊な意味を持つ文字は\でエスケープする
\([^)]*\) かな
>>94 VB.NETはよく知らんが、大体「.*」ってやると「よくばり」モードになるぞ。
「よくばり」モードはその例の場合だと途中の括弧も飲み込んじゃって、
目一杯取ってくるから、「.*?」ってやるといい。
「?」をつけると「けちけち」モードになって、必要最小限しか取ってこない。
非欲張り、という表現が一般的じゃないかと思うのだが。
正しさはともかく一般的なのは「最短一致」 "最短一致" に一致する日本語のページ 約 2,610 件 "非欲張り" に一致する日本語のページ 約 373 件
欲張りマッチの事、貪欲マッチと呼ばない?
>>95 で出来た
ついでにもう1つ
英数字の連続が5文字以上を一致させたい場合はどうすれば?
礼の一つも言えんのか
\w{5,}
>>95 さんありがとう
連続文字は自己解決した
{}の中身を{10}ってやると10文字以上という意味らしい
サンプルだと{10,20}みたいにしか書いてなかったから
カンマ忘れてるぞ
無視したからこそ自己解決なのではないかと。 という混ぜ返しはさておき、 "\w" は(一般的な実装だと)アンダースコアも拾うけどいいのかな。
アンカ間違ってるだけで
>>103 を参考に解決したけど
全面採用じゃなかったから自己解決とかぬかしてるだけでは
ちがうな、恐らくは>102を受けて、「ありがとう」と書いたのだろう。 好意的に解釈すれば、>103を見る前に自己解決したのかも知れん。
110 :
デフォルトの名無しさん :2009/06/22(月) 11:09:00
C#です Match match = new Regex("AAA.+?BBB").Match(html); としてAAAとBBBの間の文字列を抽出したいのですがなぜかできません Match match = new Regex("AAA").Match(html); Match match = new Regex("BBB").Match(html); この二つはうまくいくのですが正規表現の書き方おかしいですか? ちなみにAAAとBBBはhtmlタグです
.+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思うんだけど、 そういう複合はできない。 0回以上の繰り返し .* でマッチさせる。
>>111 > .+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思う
じゃなくて最短一致だろ
最短一致です ("AAA".+?"BBB")は実際には (<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"") こんな感じです
それだと、 . が改行にマッチしない事は理解してる?
>>113 訂正
("AAA.+?BBB")
("<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こうです
>>114 そうなんですか!?
どう書き換えればよいでしょうか
RegexOptions.Singleline 111はどういう環境を想定してるんだろうね。
●正規表現の使用環境
AutoHotkey 1.0.48.03 (Perl 5互換のPCRE)
http://lukewarm.s101.xrea.com/RegEx.html ●検索か置換か?
置換
●説明
""で囲われている箇所以外の行末コメントを除去したい。
●対象データ
key = value ; ccomment
key = "val ;lue" ; comment
●希望する結果
key = value
key = "val ;lue"
m`n)[\t ]+;.*(?=$) で 無差別除去まではできたんですが後方参照とか条件分岐の方法ががわからず。
key value comment 部はそれぞれ日本語の文字が入る可能性もあるんですが
AutoHotkeyのPCRE自体は2バイト文字が考慮されません(なので[:word:]とかは使えない状態です)
よろしくお願いします。
120 :
デフォルトの名無しさん :2009/06/26(金) 11:50:32
単純な正規表現は分かるのですが、これはどうすればよいでしょうか? ●正規表現の使用環境 PHP4 ●検索か置換か? 置換 ●説明 <del>タグにはさまれた任意の文字列を、文字数ぶん●で伏せ字にしたい。 ●対象データ 昨日は<del>上戸さん</del>と飲みに行ったが、<del>17,000</del>円も奢らされてしまった。 ●希望する結果 昨日は<del>●●●●</del>と飲みに行ったが、<del>●●●●●●</del>円も奢らされてしまった。
>>120 preg_replace_callback使え。
122 :
デフォルトの名無しさん :2009/06/26(金) 13:13:30
>>121 そんな便利な関数があったとは、、。
ありがとうございました!
function toFuseji($matches) {
return $matches[1] . preg_replace("/./u", '●', $matches[2]) . $matches[3];
}
preg_replace_callback("/(<del>)(.+)(</del>)/", 'toFuseji', $str);
123 :
デフォルトの名無しさん :2009/06/26(金) 22:30:17
●正規表現の使用環境 C#2008 Regex.IsMatch ●検索か置換か? 一応検索 ●説明 特定の文字列以外があるかをチェックしたい SQLの話も混じりますが、要はSELECT文の後に 更新や変更するような命令があるかをチェックしたい のです。 UPDATEとかそれぞれを書いていくのは漏れるかも しれないのでSELECT、FROM、WHEREあたりを除いて マッチさせるにはどう書いたらいいでしょうか。 試した文 ^SELECT (?!.* [A-Z](?!ELECT |ROM |HERE )) ●対象データ と望する結果 マッチさせたい "SELECT * FROM AAA [UPDATE]" マッチしたくない "SELECT * FROM AAA UPDATE"
何らかの処理系なら、else節で処理しちゃう手もある。
>>123 念のため聞くけど…
まさかこれってSQLインジェクションの対処のためにやってるんじゃないよね?
『id059385,,』のように、固定文字列idの後にランダムな数列、その後ろにカンマがふたつ格納された変数から、最後のカンマをひとつだけ取り除きたいのですが、 for文で回ってる途中まれに同一変数に『,,,』のようにカンマが3つ連続して出てくることがあり、その場合は取り除きたくないので 原始的に(",,",",",$変数)のようなことができません あくまで、固定文字列id、その後に数列、その後にカンマふたつという状況でのみカンマひとつ取り除く方法はないでしょうか PHP5
最後に2つある時だけ取りたいならこうするかな preg_replace('/(?<!,),,$/', ',', 'id059385,,');
>>119 これ難しいね。
excelなら、Instrrev使えばすぐだけど、正規表現だとどうやるんだろ。
>>119 Perlならこれでいけるっぽいけど、どうかな。だめかな
s/((?:[^;]*?".*?")*[^;]*)(?:.*?$)?/$1/mg
'"' 自体のエスケープはどうなっているのかと、 Shift_JIS への対応が気になるかな。
使用環境 WSH 検索 対象データ ^AAA(BBB(CCC)(ddd)))(FFF)(GGG)$ 文末の、括弧記号を含まず括弧で囲われたものが連続しているもの を検索したいけど挙動が違います。 1) /(?:\([^(]+?\))+$/ 検索結果→ (CCC)(ddd)))(FFF)(GGG) 2) /(?:\([^)]+?\))+$/ 検索結果→ (FFF)(GGG) 欲しい結果は2の方です。 文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?
>>131 そりゃ前から読んでもそうなるだろ
>\([^(]+?\)
「括弧の間に開き括弧を含まないもの」だから"(ddd)))"にもマッチする
>「括弧記号を含まず」「括弧で囲われたものが」「連続しているもの」
/(?:\([^()]+?\)){2,}/
「文末の」を見落としたスマン
> 文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか? そういう動作はしない。
/unko$/ は /unko\r\n/ と同等と考えればわかりやすいだろう (厳密には違うけど)
>>128-129 レスありがとうございます。
お礼が遅くてすみません。週末からリロードし忘れてました。
質問後自分なりに頭捻って、((".*?")|;.*(?=$)) , $2 とか無理やりやってたんですが
>129さんのでいけました。特に (?: )の使い方が参考になります。ありがとうございます。
今回の件とは直接関係ないんですが、除外文字列の表記がよくわからずいつも悩みます。
今回の例でいうと コメント文字列が「;」ではなく「 ;」(半角スペース+セミコロン)だった場合とか
(?:(".*?")|[\t ]+;.*(?=$)) , $1 みたいな方法で弾くしかないのかな。
いや、普通にそっちのほうがシンプルでいいよ なんであんなに複雑い書いたのかマジ俺イミフ。しにてえ
.NETの話なんだけど
ttp://msdn.microsoft.com/ja-jp/library/bs2twtah (VS.80).aspx#BalancingGroupDefinitionExample
この例の正規表現がどうして <> の入れ子構造にマッチするのか上の解説読んでもよく分からないので誰か分かりやすく説明してください
「name2 グループと現在のグループの間隔をグループ name1 に格納します。」って文があるけど
この「name2 グループと現在のグループの間隔」っていうのはリンク先の例で言うとどこからどこまでなのかとか
格納するっていうのがつまりどういうことなのか、って言うレベルでさっぱり理解できてない・・・
最後の "(?(Open)(?!))$" にいたっては自分の中で暗号と化してるorz
わかりやすくは多分無理だな。 Openでカウントが増える。 Close-Open でそのそのカウントが減る。 んで、開きと閉じのアングルブラケットの数がバランスしていれば カウントは0になるので "(?(Open)(?!))$"; の条件が (?!) ではなくなる。 この(?!) というのは要するに何にもマッチしないもの。
140 :
123 :2009/07/03(金) 21:01:48
>>124 うまく書けなかったので要素に区切ってチェックすることにしました。
>>125 SQLインジェクションって知らなかったけど、悪意のある入力の
チェックって感じかな?
入力文字はSQL文が前提で、そこまで重い意味合いのチェック
ではありませんでした。
SQLインジェクション対策って普通Regex.Escapeを通すのかな?
言語によるが、DB系のライブラリにバインディング機能があれば普通はそれを使う。 自作のお手製ライブラリはやめた方がいい。 DBによって攻撃の仕方が違うし、 よく知ってる人が作っていろんな人が使ってるやつの方がやっぱり圧倒的に安全。 詳しくはそれっぽいスレで聞いてくれ。
>>140 何のためにそんなことをしたいのか分からないが、
ユーザにSQLクエリを入力させて実行させたい、とかいう話なら、
クエリ式に対してチェックをするのではなくて、
データベースの更新が出来ないような権限でクエリを実行すべき。
143 :
123 :2009/07/03(金) 21:16:15
>>141 そうなんですか。調べてそっちの方向に変えてみます。
よく考えたらSQL文にRegex.Escapeなんて
なんの関係もなかった・・・。
144 :
123 :2009/07/03(金) 21:20:04
>>143 権限で〜ってのは思ってたんですが、触れない事情がありまして。
普通はそうなんですね。
スレ違いになってきたのでこの辺で終わっときます。
ありがとう。
145 :
デフォルトの名無しさん :2009/07/04(土) 21:44:21
●正規表現の使用環境 PHP ver 5.2 ●検索か置換か? 置換 ●説明 カッコ書きのある文章のカッコの中身を取得したい。 たとえば、 カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後 の文章に対して、後方参照で arr[1] = カッコ書き前()カッコ書き後 arr[2] = カッコ1()カッコ1後 arr[3] = カッコ2()カッコ2後 arr[4] = カッコ3()カッコ3後 と言った感じで取得したい。 試した文 $preTxt = 'カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後'; $match = '/.*(\(.*\)).*/'; preg_match("$match",$preTxt,$arr); 結果 [0]= カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後 [1]= (カッコ3)カッコ2後)カッコ1後) ●対象データ と望する結果 上記記載 すみません。どなたかお願いします。
HTMLタグの中身を抜き出すのに近いね。 別の自作関数を作っておいて、 arr[1] = \1 & \7 arr[2] = \2 & \6 arr[3] = \3 & \5 arr[4] = \4 なんてのはどうかな。 もっとスマートな方法もあるかもしれないけど、今でもこれ使って動かしてます。
147 :
デフォルトの名無しさん :2009/07/04(土) 22:43:50
回答ありがとうございます。 でも、多分、俺って、あなたの思っている以上の馬鹿みたい。 全くもって、理解できないんですけど・・・・・・・。 もうちょっとわかりやすくしていただけると助かります。 って、馬鹿がわかりやすい解説って、わかってる人にはかなり難しいんだと思いますけど。 すみません。わがまま言って。
外側から攻めていって、カッコがなくなるまでループするとか function foo($text) { $kekka = Array(); $match = '/^(.*?)\((.*)\)(.*)/'; while (preg_match($match, $text, $arr) > 0) { array_push($kekka, $arr[1] . "()" . $arr[3]); $text = $arr[2]; } array_push($kekka, $text); return $kekka; } $arr=foo('カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後'); print_r($arr);
149 :
デフォルトの名無しさん :2009/07/05(日) 12:38:53
ありがとうございます。 完璧です。 ほんとにありがとうございました。!!
なるほど、賢いなぁ
147は138かな? もうちょっと努力して説明してみるから少し待ってね。
147は145 で PHP5、.NET の138とは別の人、だと思うけど。
>>139 ,151
138です、レス遅れてすみません
自分で試しつつなんとか(?<name1>p1)+(.*)(?<name1-name2>p2)+ という表記なら
(p2にマッチした回数 - 1) 個だけ name1とname2のキャプチャを取り出して
(.*)の両端にくっ付けていく(ただし取り出すキャプチャの 最大数は (p1にマッチした回数-1) 個)のかな
という感じで理解し始めてますが・・・
それと?(Open) という書き方は ? と () までも含めて、Openを文字列リテラルとしてではなく
(既に同じパターンのより先頭部分で定義されている)Openという部分パターンの
グループ名だということを示すための表記法なんでしょうか?
こっちは試し方も良く分かりません・・・
154 :
151 :2009/07/06(月) 03:10:01
(?'Open'<)
というのは、named caputure でこの場合は < を Open という名前で捕獲するもの。
この場合は捕獲自体には意味はなくて裏で増やしているカウンタが重要。そして
(?'Close-Open'>)
この部分で Open のカウンタを1減らしている。< と > の数が同じであれば、
(?(Open)(?!))
まで来た時点で Openの値は0になっているはず。
で、この表現なんだけど (? (Open) (?!) ) が、? に続く部分正規表現が「真」であれば (?!) を
マッチの条件にするというプログラミング言語の if 〜 then 〜 みたいなもの。
解説は
http://msdn.microsoft.com/ja-jp/library/36xybswe (VS.80).aspx
にある。
そして Open が0でない==バランスが取れていなければ (?!) のチェックを
するのだけど、これは前回も書いたように絶対にマッチに失敗するというパターン
なので、全体を通してみるとバランスが取れていればマッチ成功。
そうでなければ失敗。という次第。
155 :
デフォルトの名無しさん :2009/07/10(金) 10:33:02
オライリーの「詳説 正規表現 第3版」を読んで疑問に思ったので質問します。 5章にある「IPアドレスへのマッチ」で、0から255の数字にマッチする正規表現のサンプルがありますが [01]?\d\d?|2[0-4]\d|25[0-5] これだと、最初の選択で [01]? がオプションなので、たとえば "999" が "99" に マッチしてしまうような気がするのですが、問題はないのでしょうか。 よろしくお願いします。
その後で、 ^([01]?\d\d?|2[0-4]\d|25[0-5])\. (中略) \.([01]?\d\d?|2[0-4]\d|25[0-5])$ として前後の境界を指定して利用してるから問題ないんじゃないの? 数字だけを取り出したいのであれば、例えば、 \b([01]?\d\d?|2[0-4]\d|25[0-5])\b みたいに前後を指定する必要があるよね。 って、そういう話ではなくて?
157 :
デフォルトの名無しさん :2009/07/10(金) 10:49:11
>>156 あぁ、すみません。
たしかに ^ $ で境界を指定すれば問題ありませんね。
部分式ばかり考えていて見えませんでした。
ありがとうございます。
これ教えてーーーーー ●正規表現の使用環境 VB.NET ●検索か置換か? 検索 ●説明 タグの外の文字列を順に取得したい ●対象データ <html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7> だったり <html1>AAA<html2>BBB<html3><html4><html5><html6>CCC<html7>DDD ●希望する結果 r = New Regex("(?<1>.+?)(?<2>.+?)(?<3>.+?)(?<4>.+?)" ←今こんな感じ Console.WriteLine(m.Groups(1).Value) で結果 AAA Console.WriteLine(m.Groups(2).Value) で結果 BBB Console.WriteLine(m.Groups(3).Value) で結果 CCC Console.WriteLine(m.Groups(4).Value) で結果 DDD
>>158 Match()一発じゃなくてMatches()で地道にいっこずつ切り出してみた。もっといい方法はあるかもしれん
Dim r As Regex = New Regex("(?:<.*?>)+(.+?)(?=<|$)")
Dim s As String = "<html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7>"
For Each m As Match In r.Matches(s)
Console.WriteLine("{0}", m.Groups(1).Value)
Next
正規表現、特にNFAって計算量が大きいので 実用上、30〜40文字ぐらいが限界だったように記憶してるのですが NFAとDFAでの計算量ってO表記でどのぐらいでしたっけ? wikiにそういう情報のせといて欲しい・・
161 :
デフォルトの名無しさん :2009/07/26(日) 10:56:30
PHPのpreg(perl互換)の話なのですけど、 /(?<=<div>)(.*?)(?=<\/div>)/is はエラーにならなくて /(?<=<div[^>]*>)(.*?)(?=<\/div>)/is がエラーになる理由が分からないのですが、 なぜなのでしょうか
なぜと言われても・・・そう設計してあるから、としか言いようがないな
>>2 の「正規表現メモ」の (?<=pattern) の解説には
固定長の文字列に対してのみ働きます(処理系による。可変長の文字列を許可する処理系もあります
と書いてある。つまりそういうことだ。
なるほど。これは固定長のみでしたか。 ありがとうございます。 別のルートから正規表現の方法を探す事にします。
/(?<=<div[^>]{0,99}>)(.*?)(?=<\/div>)/is 可変長は無理でもこの書き方({0,99})がOKな処理系もあるから試してみろ
>>160 DFAの計算量は自明でしょ。
NFAはパターンとテキストによって違うから一概には言えないんじゃないかな。
適当なことばっかり言うのはやめてください
セルフでコンプリートすればパーフェクトですよ
169 :
デフォルトの名無しさん :2009/07/28(火) 16:26:27
マッチする判定じゃなくて 正規表現書いたらそれを満たす全ての文字列を生成する プログラムを書くのは難しいですか?
^.*$
正規表現によっては終わらない可能性があるわけだな
172 :
デフォルトの名無しさん :2009/07/28(火) 16:37:23
>>170 それをやると遅延評価的に必要な分だけ垂れ流すんです
文字数限定すればできることはできる 指定字数の全ての組み合わせの文字列をその正規表現にマッチさせて 成功したものだけをリストアップすればいい 速度的にどれだけ実用になるかは不明 最適化するとなると論文レベル
174 :
デフォルトの名無しさん :2009/07/28(火) 16:40:11
フィルターにかけるのではなく 初めから有効な物しか生成しないものとします
175 :
デフォルトの名無しさん :2009/07/28(火) 16:42:08
>>174 よし、正規表現をパースすることから始めよう。
等価な有限オートマトンをバックトラックしながらしらみつぶしに探索するような プログラムを書けばできそうだな。
177 :
デフォルトの名無しさん :2009/07/28(火) 16:56:58
数学的に可能ですか? 僕が心配してるのは5次以上のn次方程式の一般解 を探そうとしていやしないかという事です
178 :
デフォルトの名無しさん :2009/07/28(火) 17:00:53
取り敢えずオートマトンを学ぶに適した良書を紹介して下さい
> 正規表現書いたらそれを満たす全ての文字列を生成する > それをやると遅延評価的に必要な分だけ垂れ流すんです > 初めから有効な物しか生成しないものとします > 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい 何をしたいんだよ?お前は。 とりあえず学校の宿題なら自分でやれ。それか自分で調べろ
ごめんなさい><
183 :
亀 :2009/07/29(水) 13:06:01
聞くのもどうかと思ったんですが調べても解決しなかったので、聞きたいのですが 『正規表現の定義』ってなんですか?
ほんとに調べたのか?
文字列一致確認用プログラミング言語
>>183 アルファベットΣ上の正規表現とは、
- 空集合 0
- Σ の要素 c
- r, s が正規表現のとき r + s
- r, s が正規表現のとき rs
- r が正規表現のとき r*
のいずれか。
188 :
末吉 :2009/07/29(水) 14:16:10
189 :
デフォルトの名無しさん :2009/07/29(水) 15:17:02
定義じゃん
正規言語と正規表現は本質的には同じだけど違うものだし
>>181 は激しく良書なので啓蒙しとく
大学のオートマトンのテキストがひどかったので
この本は難しいだろうと思ってずっと敬遠してたが
これはとてもわかりやすかった
予備知識もほとんどいらない
(最初のほうは背理法だとか数学的帰納法のレベルから解説)
厳密な定義がちゃんと書いてあるが
それに先だって具体例をあげて説明がある
ただ、この本を読んでも
>>169 の実装に直接には役立たないかもしれない
(0+1)*1(0+1)+(0+1)*1(0+1)(0+1)のような正規表現を簡約して
より計算しやすい正規表現に変換する
といった最適化なら正規表現の代数的性質の章でちょろっと学べる
194 :
169 :2009/07/29(水) 19:37:54
直接役には立たなくても正規表ゲニストを目指す僕は 正規表ゲニスト名乗っててオートマトンも知らんのかと 馬鹿にされるのは嫌なので オートマトニストにもなります><
195 :
デフォルトの名無しさん :2009/07/29(水) 19:59:04
もういいから消えろよ
aaa/bbb/ccc aaa/bbb/ddd aaa/ccc/eee ・ ・ ・ 上のような文字列があって正規表現での検索時間(grepとか)を速くしたいと思っていますが、 高速化するために正規表現の合成?みたいなことができるようなライブラリってありますでしょうか? 検索したい文字列のリストはだいたい1行が30〜40文字程度で100行〜200行ほど 検索対象はファイルサイズで400Mbyte〜6Gbyteぐらいです。
質問をもっと推敲しろ
必要ない行はgrepで飛ばして読めばおk
grepパイプでつなげば十分なんじゃね?
パイプって言いたかっただけやんwww
>>199 せめて -e を並べるか -f だろー。
fgrep使うのが正解
いつから言葉遊びをするスレになったのですか?
204 :
デフォルトの名無しさん :2009/07/30(木) 14:47:20
正規表現は秀丸でちょこっと\n\n\nとか^[a-z]くらいをいじっただけの初心者なのに、 Javaで、JavaのDecimalFormat用文字列を Excelの数値フォーマット定義文字列に変換するフィルターを作ってます。 『他の人にやらせりゃいいのに…まあ調べればわかるやろ…』と思って始めましたが、 案の定、いきなり引っかかりました。www 1)引用符'を引用符"に変換する正規表現(ただし連続''は'自体を表すので"にしない) 2)''に囲まれていない浮動小数点EをE+に ([0#])(E)([0#])を\1E+\3に なお、変換は単一の正規表現で行う必要はなく、 順序依存のある複数の置換をかけてもOKです。 ただしできれば、各フィルターは常に全文に適用したいと思います。 (不要なフィルターも通過させる) 最悪、一部の変換結果を絶対にユーザが使わない予約語に変換して避けておく… ということも可能だと思いますが… 正直、いきなり1)で引っかかったのにはガックリきました。 フィルター文字列定義をpropertiesで外出しにして 出荷後もサポートで変更・追加できるようにしないとマズイな…
205 :
204 :2009/07/30(木) 14:56:08
作成中ソースの一部ですが、何をやりたいかは見当つくと思います。 これが論理的にダメダメと言うことはわかってます。 ////////////////////////////////// //シングルクォート囲みをダブルクォート囲みに //'"'→\" //まず引用符の中の"自体をエスケープする。\" filter = new RegFilter("'\"'","\\\""); filterlist.add(filter); //シングルクォート囲みをダブルクォート囲みにする前に、 //連続''は'1個をあらわすので、"'"に変換してやる。 filter = new RegFilter("''","'"); filterlist.add(filter); //シングルクォートをダブルクォートに変換してやる。 //ただしさっきのを除く必要がある。 filter = new RegFilter("[^']'","\""); filterlist.add(filter); //全フィルターを通す変換実行 sResult = executeFilters(sFormat, filterlist);
うん、わかるね
207 :
204 :2009/07/30(木) 15:56:54
208 :
204 :2009/07/30(木) 16:24:35
2)の浮動小数点EをE+にするのは、 引用符の中のEだけをEEに退避 ([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7 浮動小数点のEをE+に (*.)([#0])(E)([#0])(*.)→\1\2E\+\4\5 退避したEEをEに戻す (*.)(EE)(*.)→\1E\3 の3つで97%くらいは出来てるかなあ。 変換対象の最後が引用符のときに落としちゃうけど、まあ…
209 :
204 :2009/07/30(木) 16:27:22
*と.が逆だった。 引用符の中のEだけをEEに退避 ([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7 浮動小数点のEをE+に (.*)([#0])(E)([#0])(.*)→\1\2E\+\4\5 退避したEEをEに戻す (.*)(EE)(.*)→\1E\3
210 :
204 :2009/07/30(木) 16:40:36
最初から地にEEがあるとEになっちゃうか。 横着せずに引用符の中のEEだけをもどさないとだめだな。
ダブルクォートの中にカンマを含むフィールドのことを考えると 正規表現よりは文脈自由言語でパースしたほうが絶対にいい
212 :
204 :2009/07/31(金) 10:43:27
かも知れないけど、開発の立ち上げ工数と、今後のメンテを考えるとなー。 (あまり入出力仕様は変わらないと思うが、日付フォーマット変換の追加がありうる) 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。 また、必ずしも完璧に作る必要はなくて、 ユーザが業務で使うごく一般的なフォーマット文字列を通せれば後は制限事項でもいいし。 それをいえば、想定顧客に、浮動小数点使ってる人なんていないんじゃないかと思うけどね。。。
>>212 > 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。
いねーだろ。どの口が言ってんだ?あん?
ていうかここって日記スレなのか?
正規表現はフィットする目的には早く書けるけど、保守性は悪いし実行 速度は遅いしで、まともなプロジェクトには使わないよ。
まともでないプログラマ乙
言うほど保守性が悪いとも思わないし、実行速度も 用途に十分なら別にかまわんしなぁ。 むしろ正規表現使わずにだらだら書かれたほうが 見通しが悪くて遅い場合も多い。適材適所。
>>219 問題がよくわかんないし、javaとexcelだしスルー。
そもそも便所の落書きに仕事を持ち込まれても知らんし。
>>212 正規表現で書かれたフィルタのバグ取りなんてぞっとする
ちゃんとした技術者なら、RFCにCSVのBNFがそのまま載ってるんだから
BNFの通りにコーディングすりゃ
テスト含めて1日で終わるよ
223 :
204 :2009/07/31(金) 13:15:56
>>207 '''hoge' みたいなパターンがダメなのでは。
>>205 がよくわからんのだが、正規表現の変換処理のリスト (filterlist) を積んで、
executeFilters() でそれらを順番に逐次処理して適用する、ということ?
そんなん絶対うまくいかんと思うが。
絶対入力するなよ!絶対だぞ!絶対入れるなよ! で切り抜けるんだろう
>>211 だよねー。
Java は良く知らないんだが、 JavaCC とか使えばスッキリ書けないのかね?
CSV扱うライブラリぐらいjavaにもありそうなもんだけどな。
Javaでも20行未満で書けるレベルの処理だろうに。
>>228 お前がそれをさっさと書かないからこのネタが延々と終わらんだろうが。
230 :
デフォルトの名無しさん :2009/07/31(金) 16:56:53
ライブラリあるの?
SuperCSVオススメ
232 :
デフォルトの名無しさん :2009/07/31(金) 18:02:03
それをここでやるのはスレ違い。
逃げる気か?
逃げやがったな。口だけ達者で、ほんとは何も出来ないヤツw
負け犬めガッ!一生逃げ回ってろ
なにこの粘着質
質問者でしょ。それ以外に利益のある人はいない
人生の敗北者!
質問者はもっと回答者に敬意を持って接しろ
愉快犯の荒らしだろ。放置推奨
228 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/31(金) 16:40:25 Javaでも20行未満で書けるレベルの処理だろうに。 ↑ できもしないことを、いい加減に書くのは、質問者に対して失礼。 第三者も見ていて不愉快。 おまいこそ最悪の荒らし!
そんなに粘着する必要あるのかと。
>>228 が無知で、何も知らずに発言しちゃっただけかも知れないんだぜ?
くだらないプライドを守っている暇があったら、勉強して技術向上して
人生をエンジョイした方が、オタク(というかハッカー精神)的に
意味のあるものになるんじゃないのかね?
なにしにきたんだよ もう帰れよ
Javacに一行の文字数制限があったかどうかが 気になってしようがないわけだが。
無知で、何も知らないならレスしないでください。
そもそも 204って質問だったのか? アドバイスが欲しいらしいのはわかるが、お願いします的なセリフは何も書いてないだろ ウゼー独り言延々書き込んでるやつがいるなぁ位の認識だったんだが。
珍しく伸びていると思えばこれか
喧嘩嫌
>お願いします的なセリフは何も書いてないだろ www 苦しい言い訳。 「お願いします」口調なら、「Javaでも20行未満で書けるレベルの処理」になるのかい?
まあ書いてやってもいいかな、くらいだけどな
中学生はジャポニカ学習帳でも焼いて食ってろ
中学二年生にだって天才はいるかもだろ ニヤニヤと見守るのがベター
おっと〜!自称「天才」中学2年生現る! ・・・で?20行で書けないの?天才さんw
今なら30行に負けてあげてもいいんだけど
マジキチ
土日は遊んでたので見てなかったがまだやってんのか。ヒマだね〜
どうした?30行でも不足か? そっちが20行と言ったから20行なわけで。 べつに、40行でも50行でも構わんのだがな。
マジキチ
>Javaでも20行未満で書けるレベルの処理だろうに。 こいつ、恥ずかしくなって逃げたのか。布団かぶって泣いてるのか?
マジキチ
なんだこの流れ Javaよくわからんから20行が無茶ぶりなのかどうか知らんけど 一体何が夏厨の琴線に触れちゃったの? 質問者不在で誰も求めてないコード請求してもしょーがなくね?
生理の日かアレな人かどちらか
javaで20行書くのに、いったい何日かかってんだよ。 速いとこコードを晒せ。それですべて解決する話だろ?
268 :
デフォルトの名無しさん :2009/08/03(月) 23:55:01
マジキチ
おはよう!10行くらい書けた?まだかな?
酔っぱらいに絡まれた感じってこんなんだよな
Javaなら20行で書ける!
そもそも大抵の言語は1行にいくらでもつめられるからできて当たり前ww pythonだと難しいかもな。
↑ 世間を知らない井の中の蛙
275 :
204 :2009/08/04(火) 09:41:26
土日は自宅プロバイダの書込制限ですまそ。現状はこんな感じ。網羅的テストはまだ。 エスケープ処理が多重にかかるのでちとわかりにくいかも。 引用符の外側を一撃で取れないので、 内側の退避と復旧手順が入って無駄に複雑になってます。 引用符のパースはjavaでかけるべきだったかな… /** * 正規表現パターン文字列と、置換文字列で1セット。上から順に解釈適用する。 */ public static final String[][] FORMAT_FILTER_ARRAY = { ////////////////////// //浮動小数点対応 //引用符の中のEだけをEEに退避 {"([^']+)(')([^']+)(E)([^']+)(')([^']+)", "$1$2$3EE$5$6$7"}, //浮動小数点のEをE+に {"(.*)([#0])(E)([#0])(.*)", "$1$2E\\+$4$5"}, //退避したEEをEに戻す {"([^']+)(')([^']+)(EE)([^']+)(')([^']+)", "$1$2$3E$5$6$7"}, ////////////////////// // シングルクォート囲みをダブルクォート囲みに {"(')([^']+)(')", "\"$2\""}, {"''", "'"}, ////////////////////////////// //多重エスケープ対応 // //多重にエスケープ処理が走るため。\1個でも\を出せるように倍にしておく。 {"\\\\", "\\\\\\\\"} };
276 :
204 :2009/08/04(火) 09:43:17
あと、変換対象データが整数の場合だけの処理も入れざるを得なくなった。 小数点を最後に残すExcelの仕様のせい。 /** * 整数値の後ろの余分な小数点を削除する。 * ここでは引用符は"に、浮動小数点はE+に変換後なので注意。 */ public static final String[][] DOT_FILTER_ARRAY = { ////////////////////// //整数の場合の余分な小数点対応(浮動小数点で無い場合) //引用符の中の.#を..#に退避 //{"([^\"]+)(\")([^\"]+)(\\.#+)([^\"]+)(\")([^\"]+)", {"([^\"]*)(\")([^\"]*)(\\.#+)([^\"]*)(\")([^\"]*)", "$1$2$3\\.$4$5$6$7"}, //浮動小数点の#.#E#を#..#E#に退避 上の変換とは重ならない。 {"(.*)([0#])(\\.#+E\\+[0#])(.*)", "$1$2\\.$3$4"}, //上記変換対象にならなかった-つまり..#でない.#+を削除 {"(.*)([^\\.])(\\.#+)(.*)", "$1$2$4"}, //浮動小数点の#..#E#を#.#E#に復旧。引用符の中の外し方がわからない。 {"(.*)([0#])(\\.)(\\.#+E\\+[0#])(.*)", "$1$2$4$5"}, //引用符の中の..#を.#に復旧 //引用符の中にもともと..#があっても、...#になって..#に戻るはず。 {"([^\"]*)(\")([^\"]*)(\\.)(\\.#+)([^\"]*)(\")([^\"]*)", "$1$2$3$5$6$7$8"} };
これ見たら
>>218 とかブン殴りたくなってきたんだが。
278 :
204 :2009/08/04(火) 09:51:49
20行の成否はどうでもいいんだけど、もし可能であれば教示していただけるとうれしい。
仕事はともかく、美しいコードには感動があるのでね。
(とはいえ、他人が見てわからないコードはよろしくないので、
無理に圧縮した20行より、読みやすい100行の方がいいけど。)
>>224 n回フィルターすると、フィルター相互の矛盾衝突のチェックがn(n-1)必要になるから、
フィルターが増えるほど加速的に困難になる…という趣旨ですよね。
しかし、3行1セットで1個の処理をするフィルターを作成し、
そのセットが他には絶対に影響を与えない堅固なものであれば、
必ずしもn(n-1)にはならないのではないか…と思って手をつけたわけですが…
しかし実際やってみるとそうはなってませんな…引用符処理が誤算でした。
279 :
デフォルトの名無しさん :2009/08/04(火) 09:56:00
おい、ここはニートのスレですか?
なんだなんだ、また日記が始まるのか
281 :
204 :2009/08/04(火) 10:05:11
いやいや、みなさんオチがついてないと気持ち悪いでしょ。サービスのつもりだったんだけど。
もう一区切りついたんで書き込みやめとくよ。(何が出来て何が出来ないかはわかったという趣旨)
あと
>>224 さんの'''hoge' 難問ですわ…ご指摘ありがとうございました。
あーウザかった
マジキチ
Javaでも20行未満で書けるレベルの処理だろうに。
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
マジキチ
/:::::::ヽ____/::::::::ヽ、 丿 ::.__ .::::::::::::: __ ::::ヽ_ ,. 、 / / / /。 ヽ_ヽv /: /。ヽ ::::::ヽ ,.〃´ヾ.、 / / / / ̄ ̄√___丶  ̄ ̄\ ::::| / |l ', / / | .:::::::::: / / tーーー|ヽ ..::::: ::|r'´ ||--‐r、 ', javaなら20行で書ける!! | .:::::. ..: | |ヽ .,..ィ'´ l', '.j '. javaなら20行で書ける!! | ::: | |⊂ニヽ| | 'r '´ ',.r '´ !| \ | : | | |:::T::::| ! l! ....:.:.:.:.:.:ヽ、 ,l \ \: ト--^^^^^┤ ゝ、.,_ ---‐‐‐----ゝ、ノ
マジキチ
>>Javaなら20行でできる 専用スレ立ててやれ
290 :
デフォルトの名無しさん :2009/08/05(水) 16:35:23
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
perlで7行スレは盛り上がったのになんだこの流れ
294 :
デフォルトの名無しさん :2009/08/05(水) 23:51:53
/\___/\ / / ヽ ::: \ | (●), 、(●)、 |
正規表現使うんならperlかpythonあたりいくだろ。javaはないわ。
正規表現使うのが目的ならな。
正規表現使わなくてもjavaなら20行未満で書けるよ。
>>297 おい!できるならとっとと書いてみろよ。
逃げんじゃねーぞこの口だけ野郎が!
>>297 あ?どうしたコラ!
はやくしろよ。
また逃げたのかなw 布団被って泣いているのかな?w
人にものを頼む態度じゃないな
ああん? 「書ける」 とは言ったが 「書く」 とは言ってない。 書いて欲しかったら頭を下げてお願いしろ。 それが礼儀だろ。 ・・・って言いたいのか?中学生か、おまいは!
と、小学生みたいな発言している人がいますね
で、いつになったら発表してくれるの?>> 20行クン 今なら30行に負けてあげてもいいと言ってるんだし、 そもそも、こっちは行数なんて問題にしてないから 100行だろうが1000行だろうが好きなだけ費やしてもいいんだよ。 早く書いてごらんよ。どうせ書けないんでしょ? 書けもしないのにテキトーなことを言ったんでしょ?
怒ってもいいことなんてひとつもない。
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\ /\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\ /\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
/ ドッカン / / ,,_ ドッカン ━━━━━'), )= ☆ゴガギーン ∧_∧ヽ\ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ) 〉 〉_ _ ____ ∧_∧ ∠ おらっ!20行で書いてみろ / ⌒ ̄ / "'''"'| || (`∀´ ) \___________ | | ̄l | |/ / \ . | | | | || | | /\ヽ | | .| | | へ//| | | | ( | .| ロ|ロ ゙!l''ヽ/,へ \|_ | | | | .lヽ \ | | ヽ\/ \_ / ( ) | .| 〉 .〉 | | | | / / / / | | 〈| | | / / / / | | || | | / / / / └──┴──┘ | |
ウケるのは最初の一回だけだぞ。
夏休みが終わるまではこんな調子が続くだろうからいくら言っても無駄だろうね。
310 :
デフォルトの名無しさん :2009/08/13(木) 17:30:46
なスレ汚し奉りそ
置き換えや検索を希望する訳ではないのですが、 [!#-'*-;=?-~] が一体どういう動きをしているか知りたいです 一応説明では「URL文字にマッチ」となっているのですが、 どこがどのようにしてそれらの文字にマッチするよう働いているのか分かりません 環境は鬼車です
312 :
311 :2009/08/14(金) 00:06:06
すみません自己解決しました しばらく調べていたら範囲指定がらみで動いていたということが分かりました どうもすみません
●正規表現の使用環境 鬼車 ●検索か置換か? 置換 ●説明 ( から ) までの文字列にマッチ マッチした文字列中に ABC が含まれている場合は 置換時に ABC を \1 で参照できる正規表現 ●対象データ smp("桁数:" + strABC.length); smp("行数:" + cnt); ●希望する結果 smp(ABC); smp(); 検索文字列 \([^\)]*?(ABC)?[^\)]*?\) 置換文字列 (\1) で試してみたのですが、ABCがある行も無い行も全て smp(); になってしまいました。 どのように記述すればABCを取り出せるのか教えてください。
? 付け過ぎ
*?(ABC)? の部分が、"何もない" 状態にいきなりマッチするからじゃね? 場合分けの部分を親言語に任せる方が、文字列の否定を使うより楽かもしれない。
エディタの置換機能で実現したいので、こうなってます。 .*?の?は、付けておかないと(ABC)?.*?の部分に入ってくれないかと思い付けました。 結果的にマッチしていないので無意味ですが。。。 何か方法はありませんか?
3ステップに分ければ簡単だが (1) smp\(.*(ABC).*\) → xxxxxxxxxxx(\1) (2) smp\(.*\) → smp() (3) xxxxxxxxxxx\((.*)\) → smp(\1)
ABCがマッチする場合|ABCがマッチしない場合
Javaでも20行未満で書けるレベルの処理だろうに。
正規表現は魔法じゃ無い!
>>319 またお前か。
エディタ上で使うって言ってるだろ。
何調子乗ってんだ?
>>319 と言うかその前に、JavaでCSV処理の話はどうなったんだ?
逃げたと思ったらコレだよ。
とっとと書いてみなよ20行君。
いや30行でも100行でもいいからさ。
この余白はそれを書くには狭すぎる
鬼車ってなんかエロい
327 :
デフォルトの名無しさん :2009/08/18(火) 15:00:43
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーたはじまった | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
マジキチ
お願いします。 ●正規表現の使用環境 bash(grepかegrepでお願いします。) ●検索か置換か? 置き換え ●説明 2行を1行にまとめたい。 ●対象データ > (hogehoge.pampam) ●希望する結果 >(hogehoge.pampam) ワガママ逝って申し訳ないのですが、 できればgrepだけで出来れば最高です。
>>329 grepに置換機能はないからムリ。
2行毎につなげるだけだったら、
#!/bin/sh
while read line
do
read line2
echo "$line$line2"
done
でよくない?
grepで置き換えとか無理だろ。 Javaなら20行未満で書けるレベルの処理だが。
>>331 は? 置換だけならJavaでも10行未満でいけるだろ。
それより20行未満でCSV処理はどうなったのかな?
布団被って泣いてるのかな?w
まー落ち着けよ。 Javaなら20行未満で書けるレベルの処理で大人気ないな
とりあえず落ち着きませんか? Javaなら20秒未満で書けるレベルの処理で大人気ないと思いますよ
これは落ち着いたほうがいいかもわからんね Javaなら20%未満のやる気で書けるレベルの処理で大人気ないっていう感想を持つ人もいるだろうし
以上、正規表現もJavaも全く解らない人たちが大喜びの映像をお届けいたしました。
Javaなら20行未満で書けるレベルの処理で勝利宣言されてもなあ…
sedでいいじゃない
javaでいいじゃない
340 :
デフォルトの名無しさん :2009/08/20(木) 08:01:32
viで
javaで書ける、って言うけど どうせ javaで正規表現を書くんだろ? pattern = Pattern.compile("\\([^\\)]*?(ABC)[^\\)]*?\\)"); みたいな。やたら \ が増えまくって、かえって見にくい。 ディレクトリの区切り文字の \ にマッチさせるのに pattern = Pattern.compile("\\\\"); って \ を4回も書かなきゃならん。 \ 地獄だ。武○士だ!
Emacs Lisp の正規表現に比べたら別に大したことない。
>>341 ん?
\xがエスケープシーケンスになる言語はみんなそうなんじゃないの?
>>342 うむ。
>>343 文字列から生成する場合に限ればな
正規表現リテラルが存在する言語ならそれに付き合う必要はない
あーそうだった。忘れてた。thx
> pattern = Pattern.compile("\\\\"); ワロス アホすぎるwww
よし、夏休み最後の一週間はJavaを勉強しちゃうゾ! ><
正規表現を使いこなしてる人でも、間違った正規表現を書いちゃうことってよくあるの?
間違った正規表現すら使いこなすよ
間違ってる事がわからないから、全部正解
想定したパターンが間違ってたってことは割とある 単語の文字列にハイフンが含まれることを考慮してなかったり
>>330 すんません、ありがとうございます。
シェルよくわからんのでしたが、すんごい参考になりました。
おかげでなんとか出来ました。
ありがとうございます。
色々試してみたのですがうまく動かないので教えてください。 ●正規表現の使用環境 PHP 5.2.5 ●検索か置換か? 検索 & 置換 ●説明 絵文字用の文字列変換を考えています。 フォームのテキストエリアに入力された文字列から ##で囲まれた文字列を検索し置換したい。 ●対象データ いい天気ですね##A0F1##!! (AF01は固定ではないです) ●希望する結果 ##AF01##にヒットし、さらにAF01のみに置換したい。 自分が考えた正規表現は /#[2][A-F|0-9]{4}#[2]$/u ですが、うまく動きません・・どなたかお願いします。
PHPはよう知らんが s/##([A-F0-9]{4})##/$1/g じゃないのか?
>じゃないのか? って。 そうして質問を質問で返すんだろ。 よっぽど自信がないのか。 なんかバカっぽい。
>じゃないのか? って。 どうして質問を質問で返すんだろ。 よっぽど自信がないのか。 なんかバカっぽい。
いま、ものすごくバカっぽいレスを目にした気がした。
>どうして質問を質問で返すんだろ。 「質問を質問で返すな」と言い切る自信はないらしい。
361 :
355 :2009/08/26(水) 11:28:27
>>356 ご返信ありがとうございます。
試してみたのですが、期待した動作にならなかったです。
>>357 ろくに回答もせず、人のレスに難癖付けるだけ、か…
哀れだな
363 :
355 :2009/08/26(水) 14:10:51
あれから、色々自分で試行錯誤して /#{2}([A-F|0-9]{4}#{2})/ でヒットするところまでは持っていけました。 後はなんとかなりそうなので、がんばってみます。 なんだかスレが荒れてしまったみたいで申し訳ありません。
おかしいのがはりついてるせいだから、あんま気にせず。
PHPはよう知らんが
>>356 のでいけたよ。
# s/.../.../g とかは Perl 特有な演算子なのでそこらへんはよしなに
$str = preg_replace('/##([A-F0-9]{4})##/', '$1', $str);
これでどうですか?
>これでどうですか? って。 どうして質問を質問で返すんだろ。 よっぽど自信がないのか。 なんかバカっぽい。
マジレスすると (?:^|[^#]) ##([A-F0-9]{4})## (?:$|[^#])
「これでどうですか?」は質問じゃないだろ。
369 :
367 :2009/08/26(水) 15:54:37
ん? 「####AF01##」のような文字列も置換していいのか。 条件反射してすまなかった。
/#{2}([A-F|0-9]{4}#{2})/ の縦棒(|)は多分こういう意味では?と予想。 /#{2}([A-F]{2}[0-9]{2})#{2}/
>>370 「対象データ」の「##A0F1##」にマッチしなさそう、とか。
>>370 文字クラスの連結のつもりだったとエスパー。
355です。
>>365 ありがとう!まさにこれが期待した動作です。
Perlに詳しくなかったのでPHP風に直せなかった自分の力不足で
動かなかったなどと言ってすみませんでした。
>>367 ####AF01##は##「##AF01##」の部分だけ置換したいと思っています。
##は意味もなく使わせないようにしたいのですが、ユーザーがどういう意図で
使うかはわからない部分もあるのでそうしています。
後は答えていただいた方法をうまく組み込んでみます、ありがとうございました。
>>372 A-F|0-9はうまい方法が思いつかなかったのでこうしてます。
要するにA-Fまでと0-9までの半角英数字4文字が続いている場合となります。
0CAFの場合もありますし、DA16など4文字は確定で入り乱れている状態です。
これをうまく表現する方法がわからなかったので
調べながら書いてみたら動いたのでとりあえずこれでやってました。
>>374 [A-F|0-9]は、A-Fか0-9か'|'という意味だ。
つまり[|A-F0-9]や[A-F0-9|]も同じ意味になる。
おまえがやりたいことは[A-F0-9]で出来る。
まだ正規表現に慣れていないみたいだが、
Webアプリ開発では必須のスキルなので
これから勉強していくといい。
まずはフクロウ本を買うところから始めるべし。
| は ( ) の中で使うときと { } で使うときでは意味が違う。 最近のガキは前後の文脈で判断せずに ピンポイントだけ見て反応する。 悪いクセだ。
| は ( ) の中で使うときと [ ] で使うときでは意味が違う。 最近のガキは前後の文脈で判断せずに ピンポイントだけ見て反応する。 悪いクセだ。
( ) の中ってなに。。
{}かな。
拗音の「ぁぃぅぇぉゃゅょァィゥェォャュョ」と促音の「っ」が複数個連続した場合にSAPI5を使うソフトウェアがハングアップします。 ところが「うわぁぁぁぁ」のような表現は日常的に存在しているためにそのたびにハングアップして閉口してます。 正規表現で小さい文字を大きくすることは可能ですか?
ょぅι゛ょ
s/ょぅι゛ょ/ 妖女/
こすると大きくなるよ
こすったら膿出てきた
淋しい病気ですか
>>381 s/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/g
性器表現だけじゃできなそうだな。
tr/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/ s/ぁ/あ/g s/ぃ/い/g s/ぅ/う/g s/ぇ/え/g s/ぉ/お/g s/ゃ/や/g s/ゅ/ゆ/g s/ょ/よ/g s/ゎ/わ/g s/ァ/ア/g s/ィ/イ/g s/ゥ/ウ/g s/ェ/エ/g s/ォ/オ/g s/ヶ/ケ/g s/ャ/ヤ/g s/ュ/ユ/g s/ョ/ヨ/g s/ヮ/ワ/g
どうでもいいけどそれは SAPI5 とやらを直すべきではないのか?
392 :
デフォルトの名無しさん :2009/08/27(木) 19:12:10
マッチするなら電子メールアドレスである事が保証できる 正規表現を教えて下さい
完全にやるのはひどくおおごとで、 かつルール違反のアドレスが結構ある。 とりあえず使えればいいのであれば、メールアドレス 正規表現 で検索
DoCoMoもauも、ちょっと前までは連続ドット(RFC違反)の メールアドレスが普通に作れちゃったから困ったもんだ。
>>392 まずググる、という発想すらできない君にはこれがお似合いだよ
.+@.+
>>391 「暗いと不平を言うよりも、すすんで明かりをつけましょう」
>>395 それじゃあ
> マッチするなら電子メールアドレスである事が保証できる
を満たしてないだろ。
これなら条件を満たすだろ。
[a-z]{6,30}@gmail.com
>>397-398 やりがちだよなぁ、\.comとかのエスケープ忘れ
しかもそうそう異常判定が起きないから潜在的なバグになりやすい
400 :
397 :2009/08/28(金) 00:26:28
>>399 ごめんなさい。反省します。
>>398 それだと「マッチするなら電子メールアドレスであることが保証できる」が満たせないよね。
命題トリックだな
連. はイケないとか "に囲まれてるなら@も連.もおkとか イカレてるわ
正規表現だけでなんとかしようって方がイカレてるわ
到達できないアドレスは電子メールアドレスとして保証されていると言えるの?
一般的には言えないかもしれないけど、 そこはこのスレのお題の範疇を超えるんで、気にしなくて良いんじゃないかと思う。
俺はKENT氏が使っているこれを利用してるけど /[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/
KENT氏(笑)
408 :
デフォルトの名無しさん :2009/08/28(金) 13:30:29
KENT氏()笑
410 :
デフォルトの名無しさん :2009/08/28(金) 13:43:16
>>406 これはひどい。
local-partの記号類をまったく受け付けないじゃん。
Gmailの拡張アドレスが弾かれちゃうね。
412 :
デフォルトの名無しさん :2009/08/28(金) 14:29:02
>>411 「マッチするなら電子メールアドレスである事が保証できる 」
を満たせばおkなんじゃないの?
極端な話だけど/foo@example\.com/も条件を満たすよ
>>397 はそういうジョークだろう
>>412 そういう意味ならなおさら
>>406 はまるでダメでしょ。
電子メールアドレスでないものも余裕でマッチする。
417 :
デフォルトの名無しさん :2009/08/28(金) 15:40:45
>>416 そのページにあるリンク先見てて思ったんだが
[.] とか [@] って何の意味があるんだろ。
ときどき目にするんだが。。
>>417 [@]はあんまり意味がないと思うけど、[.]は\.を使うよりいい(見やすい?)と、Damian Conway先生が
言ってたような気がする。
>>417 [@] は配列が展開されるのを防ぐのかな?
Javaでも20行未満で書けるレベルの処理だろうに。
423 :
デフォルトの名無しさん :2009/08/28(金) 21:23:59
/:::::::ヽ____/::::::::ヽ、 丿 ::.__ .::::::::::::: __ ::::ヽ_ ,. 、 / / / /。 ヽ_ヽv /: /。ヽ ::::::ヽ ,.〃´ヾ.、 / / / / ̄ ̄√___丶  ̄ ̄\ ::::| / |l ', / / | .:::::::::: / / tーーー|ヽ ..::::: ::|r'´ ||--‐r、 ', javaなら20行で書ける!! | .:::::. ..: | |ヽ .,..ィ'´ l', '.j '. javaなら20行で書ける!! | ::: | |⊂ニヽ| | 'r '´ ',.r '´ !| \ | : | | |:::T::::| ! l! ....:.:.:.:.:.:ヽ、 ,l \ \: ト--^^^^^┤ ゝ、.,_ ---‐‐‐----ゝ、ノ
ちなみにJavaなら20行未満で書けるぞ
\ 地獄ですね
「全然」が現れてから次の「。」までに「ない」「なく」「なかった」「ません」が来ない文にマッチさせるには?
/全然(?!ない|なく|なかった|ません).*。/
松来未祐と金田朋子のRADIOデコピンないと、ひぐらしのなく頃に、本当にすまなかったと思っている、うちのタマ知りませんか 等もマッチしなくなるよ
>>429 字面だけで処理しようってんだから、そこまで気にしてやる必要は無いんではないか
>>428 "全然勝負にならない。" にマッチしちゃうよ。
全然問題ない 全然なくならない
ツッコまれること前提で片手間に書いたのに、やっとツッコんでもらえたw /全然(?!.*?(?:ない|なく|なかった|ません)).*?。/ これでどうだ
キュウリを突っ込んで欲しいのか? 魚肉ソーセージを突っ込んで欲しいのか?
全然((?!ない|なく|なかった|ません).)*。
>>437 Perl と Ruby で試してマッチしないんだけど、どんな正規表現エンジン使ってるの?
>>437 お前のレス全然参考にならないんだ、悪いけど。
442 :
441 :2009/09/01(火) 23:09:11
まあいいや。
>>427 =
>>440 と仮定して。
>>440 のをちょっと試してみたけど、
「前後文脈の指定について」の後文脈の例を見るとわかるように、
「検索文字列」の直後のパターンを指定したい場合は、
文字列先頭のアンカを指定する必要があるみたい。
例えば
>>436 のを参考にこんなんでいけるかと。
^((?!ない|なく|なかった|ません).)*。
444 :
デフォルトの名無しさん :2009/09/04(金) 13:45:50
お時間あればよろしくおねがいします ●正規表現の使用環境 .NET Framework 2.0 ●検索か置換か? 置き換え ●説明 ランダムな文字列内に繰り返す言葉を1つにまとめたい ●対象データ abcdddddde こんにちちちちちちわ !+++**! ●希望する結果 abcde こんにちわ !+*!
>>444 s/(.+?)\1+/$1/g
ドトネトだとこんな感じか
Regex re = new Regex( @"(.+?)\1+" );
Console.WriteLine( re.Replace( "abcdddddde", "$1" ) );
s/(.)\1+/$1/g でもいいな
>>445 ありがとうございます、なるほど・・・
PHPだけで他の言語や正規表現はサッパリで、助かりました
448 :
デフォルトの名無しさん :2009/09/04(金) 23:55:59
Javaでもやれ
20行で書けるからな
PHPでも20行で書けるな
「けちなマッチング」ってもっと他の言い方ないの?
けちなマッチング、という言い方は知らないのだけど、 非欲張りな繰り返しのこと? それとも逆に強欲な繰り返しのこと?
最短一致とかいろいろな言い方あるね
455 :
デフォルトの名無しさん :2009/09/17(木) 13:12:34
●正規表現の使用環境 VBScript ●検索か置換か? 置換 ●説明 ソースコードの関数を置換したい ●対象データ 1 FuncA(1,2,3) 2 FuncA(1,FuncB(2,3),4) 3 FuncA(1,"string2,3",4) 4 FuncA(1,2,3):FuncD(1,2,3) ●希望する結果 1 FuncC(3,1,2) 2 FuncC(4,1,FuncB(2,3)) 3 FuncC(4,1"string2,3") 4 FuncC(3,1,2):FuncD(1,2,3) とりあえず対になる()の特定方法が知りたいです・・
正規表現以前に、単語単位でFuncA->FuncCを置換したら済む話じゃね?
関数の仕様というか引数の順番も変更になってるっぽいからダメそう。 カッコのネストの深さを限定すればあるいは。
>>455 ネスト数を限定すれば書けるが汚くなるのは言うまでもない。
perlの正規表現の(?PARNO)みたいに再帰を書けるように 拡張されたのを使えばなんとかなるけどあれを正規表現と 呼んでいいのか激しく疑問w さらに全く正規表現じゃなくなるが頭に #define FuncA(x,y,z) FuncD(z,x,y) を追加してcppに食わせれば一発なんだけどね。 % cat hoge #define FuncA(x,y,z) FuncC(z,x,y) 1 FuncA(1,2,3) 2 FuncA(1,FuncB(2,3),4) 3 FuncA(1,"string2,3",4) 4 FuncA(1,2,3):FuncD(1,2,3) % cpp hoge # 1 "hoge" # 1 "<built-in>" # 1 "<command-line>" # 1 "hoge" 1 FuncC(3,1,2) 2 FuncC(4,1,FuncB(2,3)) 3 FuncC(4,1,"string2,3") 4 FuncC(3,1,2):FuncD(1,2,3)
460 :
デフォルトの名無しさん :2009/09/18(金) 13:14:55
スルーされにくい質問のテンプレと例 ●正規表現の使用環境 5.10.0 ●検索か置換か? 置換 ●説明 先頭の<と行末の>を削除したい ●対象データ <XXXXXX> XXXXXX> <XXXXXX ●希望する結果 XXXXXX
スルー力を試されているのか?
462 :
デフォルトの名無しさん :2009/09/18(金) 13:24:16
>461 な、なぜだ…このテンプレつかてるのに。 あ。パールです…
> ●正規表現の使用環境 > 5.10.0 言いたいことはわからんでもないが。
464 :
デフォルトの名無しさん :2009/09/18(金) 13:34:45
>463 Linux 2.6.30.5-43.local.fc11.i686.PAE #1 SMP Wed Sep 16 16:46:32 JST 2009 i686 i686 i386 GNU/Linux あら勘違いしたかな?これでだいじょぶですか?
>>460 しむらー、一行目
/^<?(.*?)>?$/
Perlでは実行確認してないけど多分大丈夫だろ
466 :
デフォルトの名無しさん :2009/09/18(金) 13:43:34
>465 うわーありがとう。 もーちょっとだったのに汗 助かりました。
467 :
455 :2009/09/18(金) 14:49:49
簡単には出来なそうなんですね。わかりました。 対になる()や[]の一致書式の方はありますか? これが出来れば結構いろいろ応用がききそうなんですが。
厳密な意味での正規表現では無理なことの代表的なものが、括弧の対応。
最近の拡張ではできるものもあるけど、やりかたがそれぞれなので、
一般的に説明できない。
つーかその例のようなのは
>>459 の言うようにcpp使うのが楽だな。
469 :
デフォルトの名無しさん :2009/09/18(金) 18:48:14
「正規」表現って言い方ってどうよ? 正規分布 normal distribution 正規表現 regular expression
別に? 混乱するからどうしてもと言うなら 統計学のnormalを「標準」とでも脳内変換しとけ
>>469 何が問題なの?
異なる言語で単語が一対一に写像するなんてことは有り得ないんで、
その程度の不整合でいちいち悩んでると人生辛くなるよ。
472 :
455 :2009/09/18(金) 22:35:18
括弧処理には向いていないのでしたか。 それがわかっただけでも満足です。ありがとう。
>>181 これ読んでみたけど本当に良い本だった。世界的に認められてるだけのことはある。
数学丸出しなのでかなり難しい内容だけど、オライリーのフクロウ本を一通り読んで
DFAとNFAの違いを知りたいというモチベーションがあれば読み進められるかも。
/ヽ(´ー`)人(´∇`)人(`Д´)ノ/
カッコの対応を見つけるのって無理なのか・・・。意外だった。
C#の正規表現で悩んでいます。 お時間あればよろしくおねがいします ●正規表現の使用環境 .NET Framework 3.5 ●検索か置換か? 置き換え ●説明 ()の文字を取り除きたい ●対象データ W(ジョーカー) W(ルナ) ●希望する結果 W W string Title = "W(ジョーカー)"; string nobrackets = "<title>(.*)"; Regex re = new Regex(nobrackets); Match m = re.Match(Title); Title = m.Groups["title"].Value; で、nullなんです。アドバイス乞う…。
(1)あんまり弄らなかった方
string Title = "W(ジョーカー)";
string nobrackets = @"(?<title>W)\(.*\)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;
(2)ちょっと弄ってみた方
string Title = "W(ジョーカー)";
string nobrackets = @"\(.*\)";
Regex re = new Regex(nobrackets);
Title = re.Replace(Title, "");
>>476 何がしたいのかをもうちょっと良く考えてみるといい
本当に取り除くだけでいいのなら、こんな感じ? Title = Regex.Replace(Title, @"\(.*?\)", "");
thanks!
C#の正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
ホームページのすべてのタグを取り除きたい
●対象データ
http://www.asahi.com/shopping/pc_camera/special/TKY200909240072.html ●希望する結果
プレーンテキスト
●現状
');
document.write('');
//-->
などいくつかのタグが残る状況です。
●いま書いている正規表現
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
>>480 「いま書いている正規表現」の処理の前段で <script>...</script> を削除すると良いと思われ。
早速ありがとうございます。 html = Regex.Replace(html, "<script>.*</script>", ""); Regex regex = new Regex("<.*?>", RegexOptions.Singleline); html = regexRemoveAllTag.Replace(html,""); としてみましたが、状況に変化なしです。
えーと、前段の方は <script.*[^>]>.*?</script> みたいな感じで Multiline で。
>>480 何でそうなるかの原因を考えよう。
想定と違う動きをした箇所を比較してみるといい。
document.write('ipt>');
といった、JavaScript内で閉じタグを記述してる箇所に正規表現がひっかかって');が残る。
だから481は<script type= .... </script>を先に除去すればいい、って言ってるのでしょう。
> html = Regex.Replace(html, "<script>.*</script>", ""); なんでこっちだけRegex.Replaceなんだ? たぶん、これでいいんじゃないかな Regex regex1 = new Regex("<script>.*?</script>", RegexOptions.Singleline); Regex regex2 = new Regex("<noscript>.*?</script>", RegexOptions.Singleline); Regex regex3 = new Regex("<.*?>", RegexOptions.Singleline); html = regex1.Replace(html,""); html = regex2.Replace(html,""); html = regex3.Replace(html,"");
487 :
484 :2009/09/25(金) 19:22:18
>>486 ほんとに考えてるのかなあ……。
<script>だと<script type="text/.... って書いてあるのに引っかからないわけですよ。
var wc = new WebClient() { Encoding = Encoding.GetEncoding("EUC-JP") };
var html = wc.DownloadString("
http://www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html ");
var result = Regex.Replace(html, "<script.*?</script>", "",RegexOptions.Singleline);
result = Regex.Replace(result, "<.*?>", "", RegexOptions.Singleline);
Console.WriteLine(result);
考えてない、考えてない・・・ 他人の書いたのをコピーしてるだけ。
489 :
483 :2009/09/26(土) 02:30:20
>>486 > 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
率とかそんなんじゃなくてさあ、 HTML のソース見て考えてる?
もうめんどくせえなあ。
>>486 えーと、差分を見る方法を用意してる?
処理前と処理後を比較すれば、どこが除去されたのか
すぐ分かるはずなんだけど。
windiffとかWinMergeでも使え。
491 :
デフォルトの名無しさん :2009/10/01(木) 07:09:09
わかりました
HTMLのサニタイゼーションに正規表現を使うなと……
493 :
デフォルトの名無しさん :2009/10/01(木) 13:32:47
先頭の改行(LF)を削除するにはどうすればいいのでしょうか? $text =~ s/^\n//s; では削除されませんでした。
494 :
493 :2009/10/01(木) 13:38:11
あ、されてました。 2つ改行がありました。 2つの改行を削除するには、/^\n\n//では削除されませんでした。
495 :
493 :2009/10/01(木) 13:42:36
あれ? これは改行じゃないのかもしれない。 なんかあります。 $textの先頭に改行される何かがあります。 CRLF、CR、LFのいずれもないのに、改行される何かがあるんです。
BOMか?
497 :
493 :2009/10/01(木) 13:56:53
>>496 BOMじゃないですが、UTF-8です。
コード16進で表示すると何が出る?
499 :
493 :2009/10/01(木) 14:03:40
/^\n//をやった直後に/^.//で最初の得体も知れない改行を削除しますと、◆の中に?がある文字が2つ出ました。 しかも、次の文字が消滅しました。
500 :
493 :2009/10/01(木) 14:06:35
楽しそうだな。これを機会にコンピュータ上で文字はどのように 表現されているのか勉強するといいと思うよ。
502 :
493 :2009/10/01(木) 14:16:26
バイナリエディタで開いてみました。
その不気味な改行の部分は、EF BB BF 0D 0A E3でした。
この正体は何なのでしょうか?
>>501 勉強がんばってみます。
503 :
493 :2009/10/01(木) 14:23:57
EF BB BFってどうやらBOMですね。 何とかしてみます。
504 :
493 :2009/10/01(木) 14:26:08
でも出力されたテキストをメモ帳で保存したからBOMが付いたのかも知れませんね。 よく分かりませんね。
505 :
493 :2009/10/01(木) 14:39:43
すみません。 全てはポックンのミスでした。 改行コード消した後に、改行コード付加してました。 BOMとか関係ありませんでした。 BOMはメモ帳で開いたから付加されただけでした。 0D 0AはCRLFの改行コードでした。 本当にありがとうございました。
>>455 勉強がてら、ActivePerl 5.8.8で作ってみた。
色々調べて、いい勉強になった。
my $re1 = qr/(?:[^(),]+|"(?>(?:(?>[^"\\]+)|\\.)*)")*/;
our $re2 = qr/\w+\((?:(??{$re1}),?|(??{$::re2}))*\)/;
my @s = qw{
FuncA(1,2,3)
FuncA(1,FuncB(2,3),4)
FuncA(1,"string2,3",4)
FuncA(1,2,3):FuncD(1,2,3)
FuncA(1,FuncB(2,FuncC(3,"4),(5"),"\","),6)
};
for (@s) {
print "$_\n";
s/FuncA\(($re1|$re2),($re1|$re2),($re1|$re2)\)/FuncC($3,$1,$2)/;
print "$_\n\n";
}
VB.NETの正規表現で質問です。 ●正規表現の使用環境 .NET Framework 3.5 ●検索か置換か? 置き換え ●説明 2行以上の連続した空の行(全角、半角スペースのみの行、または改行のみの行)を2行にしたい。 (1行の空の行は1行のまま、2行の空の行は2行のまま) ●対象データ AAA BBB CCC ●希望する結果 AAA BBB CCC ●現状 ●いま書いている正規表現 Dim r As Regex = New Regex("<.*?>", RegexOptions.Multiline) よろしくお願いします。
その「いま書いている正規表現」ってのは何を思って書いたの
<.*?> ・・・これは・・・。
"3行以上"の"空白行"を最長一致させて、それを2行の空白行に置換すれば良いんじゃない? 今確認出来る環境じゃないんで、適当に書くけども。 ([ ]*/n){3} → /n/n に置換。 こんなイメージでどう?スペース入ってるけど、投稿すると消えるとおもう。
\n\n\n\nが\n\n\nにならないか?つーかスラッシュ? ((\s| )*\n){2,}
4から3にはならん 半分になるだろ
え、globalフラグなくてwhlieループとかなの?
{3,} なら3以上になるか。
レスありがとうございます。 ([ ]*\n){3,} ((\s| )*\n){3,} これで出来そうですね。/は自分の環境の場合\に直します。 [ ]と( )の違いも試してみます。 ありがとうございました。
516 :
デフォルトの名無しさん :2009/10/14(水) 00:43:45
とんちんかんなのかも知れんが、質問させてくださいな。 .NETの正規表現で"abc"という文字列を一回のreplaseで"b"にする方法はありますか?
>>516 >>4 つーか例は数個出してくれ
一個だけだと「/abc/を"b"に置換すればいい」とか言われても文句言えないぞ
途中から丁寧語になるレスを最近よく見かけるんだが、 流行っているのでしょうか?
随分語弊があった。すまんね。 環境: .NET 目的: 置換 説明: 特定の連続しない2つの文字列を取り除く 対象データ: ACB ADCB AECDB 結果: C DC ECD
説明と例がちぐはぐな件 例に倣って、文頭と文末を一文字ずつ省けばいいのか? それとも説明に則るとして、特定の文字列がAとBならACBCBはどうなるんだ?
>>519 AとBをそれぞれ取り除くだけじゃん。
正規表現の必要な話か?
[0-9]?[0-9]:[0-9][0-9]J(am|pm) 詳説正規表現の3版を読んでいるのですが 時刻にマッチさせる表現の例として、上のような正規表現が 書かれています。 このJというは、なんですか?誤植かと思って、ネットで正誤表を見てみましたが 誤植ではないみたいです。Jでやると、時刻にマッチしません。やっぱり誤植ですか? 何か意味があるのでしょうか?
誤植だと思う。 オライリーにメールすれ。
3版の正誤表ってどこにあるの?
どもです。 2版の正誤表で確認しました。3版の正誤表はないっぽいですね。
ズコー
グーグルブックスで、第2版が閲覧出来ました。
問題の箇所を見てみますと、「J」は書かれていないです。
P20の四角でかこわれた解答の部分で
手元の3版では、+SIZEJ*=と書かれています。
>>522 で質問した正規表現はP25にかかれていますが
グーグルブックスでは閲覧出来ないページとなっています。
ありがとうございました。
初版は 「[0-9]?[0-9]:[0-9][0-9]●(am|pm)」 こんな表現。 ●は、60%網点の丸。
「●は、60%網点の丸」は、確かふくろう本では空白を見やすくするための記法でしたね。
530 :
デフォルトの名無しさん :2009/10/23(金) 10:12:47
正規表現をつかって ある原稿の 文末から10文字を抽出しろ。と課題がでたのですが どうしたらできるでのしょうか
課題なら自分で考えろよ
文末に密着した任意の文字10個の正規表現でマッチさせればできるだろ 宿題は自分でやれ
文末が文章の終わりなのか、文の終わりなのか分からないが…… .{10}$
ワードの文章の文末表現を10文字程度抽出して分類せよ、という問題でした。 申し訳ないのですが本当によくわからないので、 検索する文字列、置換後文字列それぞれにどう入力したらいいのか教えてくれませんか。
ワードwww あれ正規表現じゃなかったような ヘルプ見るかぐぐれ、それでもわからないならあきらめろマジで
いやだからさ 課題ってのは自分で考えてやらないと意味ないでしょ? ここで答え教えて貰ってそれ提出すればそれでいいと思ってるの?
「オプション」「ワイルドカードを使用する」 「??????????。」
??????????[。??]
ワードの文章、抽出して分類…ワードのスレで聞いたら?
甘やかすな 課題は自分で考えさせるべきだ
抽出するなら、VBAの知識が必要かもな
VBSのregexpを呼び出して使う感じかなぁ。
特定の1文字をグループで取り出し、その1文字を後方参照で否定で使いたいのですが、 うまくいきません。つまり[^\1]がうまく動作しません(構文エラーにはならないのですが)。 おそらく\1は1文字でなく文字列なので文字クラスの中で使えないのだと思いますが、 では\1を否定で使うにはどうしたらいいですか。(!\1)なんてありませんよね。
ものによるけど否定先読みでどうにかならん?
perlなら /(.)(?!\1)./ でいけたよ。
●正規表現の使用環境 VB.NET ●検索か置換か? 検索 ●説明 htmlタグの外にある文字を取得したい ●対象データ <hoge hoge hoge hoge> <hoge> <hoge> <hoge hoge hoge> あいうえお <hoge hoge> <hoge hoge hoge hoge hoge> ●希望する結果 あいうえお 対象のデータの中にはタグの外の文字列は1箇所(1行)しかありません。 何行目にあるかは不明です。 お願い致します。
>>548 説明からするとサンプルのようにきれいに揃っていそうだし
"<"で始まらない行を抽出(もしくは始まる行を削除)で十分かもしれない
VB.netは知らないから具体例はパス
550 :
544 :2009/10/27(火) 02:03:55
すみません。処理系はC#です。 否定先読みという機能を勉強したところ、C#の正規表現にも先読みは あったので、これで実現することができました。ご教授有難うございました
javascript 抽出 1回では難しそうなので2回に分けてやっているのですが str=str.match(処理1) str=str.match(処理2) とやるとうまくいきません 下がないと処理1はできます このやり方では何か問題があるのでしょうか?
552 :
551 :2009/11/01(日) 15:39:34
一応自己解決しました 過去のスクリプトを見直していたところ matchで検索してからsubstringで抜き出していて 試したところうまくいきました どうも失礼しました
553 :
デフォルトの名無しさん :2009/11/03(火) 13:13:35
おめでとう
●正規表現の使用環境 秀丸 ●検索か置換か? 置換 ●説明 文字列Higを含むが、Highでない文字列を置換 ●対象データ Hig123 HigABC HighScore ●希望する結果 Hig123 ^^^ HigABC ^^^ HighScore お願いします。
マッチ部分はHigだけでいいの? Hig(?!h)
できました、ありがとうございます。 理解できないところがあるので、迷惑でなければ教えてください。 ?の効果は、直前のパターンが0回または1回です。 しかし、直前の文字は記号なのでエラーになるように見えます。 現に*や+ではエラーになります。 ?はどんな動作をしているのでしょうか?
>>555 のこと?
(?!pettern)は否定先読みという構文で、その?とは異なる意味
555のこと言ってるんなら?じゃなくて (?!expression) 後方不一致指定でしょ
理解できました。 ありがとうございます。
PHP5で文字コードはEUCです。 全角半角が混ざった文字列の中から、@******という部分を取り出したいと思っています。 ・@の前にはどんな文字があってもいい ・******は半角英数とアンダーバー(_)が使える ・******の後ろにスペースか全角文字かアットマーク(@)が付いたら終わり という条件で取り出したいのですが、うまくいきません。 @\w+[^ ][\x01-\x7E] では無理でした。 どのような式を書けばいいのでしょうか?
561 :
560 :2009/11/08(日) 23:10:48
具体的には、 こんにちは@Abc_123@Def_456 今日はいい天気 を、 こんにちは[hoge][hoge]今日はいい天気 に置換したいって事です
564 :
560 :2009/11/09(月) 17:24:29
>>562 >>563 ありがとうございます。@[\w]+で出来ました。
まだまだ正規表現は初心者ですが、流石にこれが出来ないのは情けない・・・・・・・
@\w+ でおk
\.(jpg|gif)
できましたー ありがとう。 でもこれ試した気がしたんだが・・・
性器表現
$hoge = "0123456789ABCDEF012"; $hoge =~ s/.*?([0-9A-F]{16}).*?/$1/i; print $hoge; とにかく16進ぽい文字列を16文字で切り出したいので 上みたいに書いたんだけど、切り出せません。 どこが間違ってるかわからないので助けて
$hoge = "0123456789ABCDEF012"; $hoge =~ /([[:xdigit:]]{16})/; print $1, "\n";
$hoge = "0123456789ABCDEF012"; $hoge =~ s/.*?([0-9A-F]{16}).*?//i; print $hoge; print $1; としてみりゃ原因わかるんじゃね? ?外して文頭文末明示すればおk
573 :
デフォルトの名無しさん :2009/11/14(土) 17:16:59
「秀丸エディタ」の正規表現の置換がうまくいきません。 作業内容は、 (1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、 (2)「秀丸エディタ」でそのテキストデータを開き、 ^(先頭文字)⇒¥t¥t¥t に全置換しようとしました。 もともとテキストデータであったファイルを置換するときはうまくいきますが、 Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。 どうすれば、先頭行を置換できるでしょうか。 よろしくお願いいたします。
先頭文字なのか 先頭行なのか どっちかハッキリしろ
575 :
デフォルトの名無しさん :2009/11/15(日) 10:10:28
>>574 先頭文字です。
Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
マルチラインの問題とみた。 マルチライン有効になってる?
577 :
デフォルトの名無しさん :2009/11/16(月) 00:48:19
>>576 ありがとうございます。
マルチラインの設定は秀丸側の設定ですか?
それともExcelでしょうか?
初心者ですみません。
早く秀丸を使いこなさないと、ソース書くときに便利なのにもったいないですね。
>>577 そんなのどんな初心者でも人間なんだから
「マルチライン 秀丸」と「マルチライン Excel」で検索かけたり、設定見れば大体予想は付くと思うが、
少しは自分の手、動かした方がいいぞ、反感買うから
パソコン買ったら最初に覚えること。 それは 検索 だ!
まさか、「□正規表現(R)」 をチェックしてないとかいうオチじゃないだろうな
581 :
デフォルトの名無しさん :2009/11/19(木) 07:06:23
>>577 です。
皆さんありがとうございます。
マルチライン、秀丸、excel、テキストなどで検索したのですが、
どこでマルチラインの有効無効をセットできるのか分かりません。
エクセルの各々のセルは、セル内改行を認めていません。
教えていただけないでしょうか。
よろしくお願いいたします。
>>575 > Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
>>580 は?
念のために書いておくと
置換の時に出てくるダイアログに
>>580 のチェックボックスがある
任意の1文字(なくてもOK)ってのはどうやるの? 「.*」だと文字数制限ないし...
一般的には(|.)かな。perl互換なら.?
.+
改行と空白(全角&半角)以外すべての文字って一気には表現できない?
[^\n\s]+ 改行またはホワイトスペース(半角スペースとTAB含む)以外の1文字 (改行もホワイトスペースだから複数行対象のときは\n不要かもね) [^\n\s ]+ 全角スペースは文字コードにもよると思うので処理系依存かな
591 :
デフォルトの名無しさん :2009/11/21(土) 08:57:37
>>583 そこはチェックを入れています。
別のcsvで試したら、1行目のタイトル行だけ先頭行を認識し、2行目からのデータ行の先頭行は認識しませんでした
(T_T)。
だから、マルチラインがtrueになってないんだろ。
どうもやりたいことがよくわからんな
困ってるという割にのんびりしてるな そういう独自の用語じゃなくて どういうデータをどうしたいのか具体的に書いて 秀丸スレでもう一度聞いたほうがマシな気がする
マルチラインが無効になってりゃ、改行記号が無視されるんだから、 先頭以外の改行は改行とみなされないんだよ。 だから2行目以降の先頭は、先頭とみなされていない。 改行記号に続く文字列って事。 改行記号を改行記号として認識させるのがマルチライン。 マルチライン問題じゃなかったらお手上げ。
せめて >4のテンプレ埋めるくらいはしてくれんと。 Excel、秀丸共に現役バージョンが混在してるソフトなんだし 環境晒しもせず、できませんできません言われてもどうしようもない WinXPSP3 / Excel 2002(Office XP) SP3 / 秀丸8β25 (HMJRE V2.06) とりあえず↑の環境では ・Excelコピー→秀丸へペースト ・名前を付けて保存:テキスト(タブ区切り)→秀丸で開く のどちらでも問題なくできたよ。
マルチライン、マルチラインって言ってるヤツ、バカじゃねぇの?
598 :
デフォルトの名無しさん :2009/11/21(土) 14:49:56
599 :
598 :2009/11/21(土) 15:27:20
否定の先読み使え
2 文字目以降にマッチする正規表現はどのように記述したら良いですか? 例えば "abcXdXefgXXhij" という文字列の、2番目以降全ての "X" にマッチするようなものです。 基本的そうなのですが、ちっとも思いつきませんでした。
2文字目以降ってのが何を指してるのかわからんな。 その例だとどれにマッチすればいいんだ?
603 :
601 :2009/11/24(火) 09:43:31
>>602 すいません、いろいろ書き忘れてました。
こんな感じです。
- 使用環境: AutoHotkey 1.0.48
- 使用法: 検索
- 説明: 下記にある文字 X を、最初だけ残して残りを Y に置換したい
"abcXdXefgXXhij" -> "abcXdYefgYYhij"
AutoHotKeyならRegExReplaceで開始位置を指定できるので、 最初のXの次の文字からにすりゃいいんじゃねーの?
605 :
601 :2009/11/24(火) 10:14:23
>>604 そうでした、ありがとうございます。
こんな感じでできました。
RegExReplace(str, "X", "Y", temp, -1, InStr(str, "X") + 1)
IPv6かどうかを調べる正規表現ってどこかにサンプルある?
IPv6 regex でググってみるとか
IPv6 アドレスの形式チェックを正規表現でやる香具師は池沼。 getaddrinfo(3) を使え。 ってうちのじっちゃんが言ってた。
610 :
606 :2009/11/26(木) 09:39:14
>>608 JavaScriptとか使って入力段階で一旦弾きたいんですだよ。
サーバ側ではinet_ptonなりなんなり別の手段で再チェックするけど。
鬼車でひいひい言わせてやるよ
>>609 inet_pton(3) のことは綺麗さっぱり忘れろ。
ってうちの itojun が言ってた。
615 :
デフォルトの名無しさん :2009/11/27(金) 11:50:16
●正規表現の使用環境 perl5 ●検索か置換か? 検索 ●説明 クォーテーションに囲まれた(省略可)の文字列を取得したい。 ●対象データ "aaa":'bbb':`ccc`:ddd:eee:666:777:888:999:000:111 ●希望する結果 $1:aaa $2:bbb $3:ccc $4:ddd $5:eee $6:666 $7:777 $8:888 $9:999 $10:000 $11:111 (["'`]*)([^\1]*)\1):(["'`]*)([^\2]*)\2):(["'`]*)([^\2]*)\2)の形式で、 後方参照が一桁の時はうまく行くんですが、二桁になると不具合がおきます。 (["'`]*)([^\10]*)\10) \10の下一桁に該当する文字(0)があるとマッチしません。 原因は[^\10]の部分が「\10以外」ではなく「\1と0以外」と解釈される為では ないかと思いますが、回避する記述方法はありますか?。
616 :
デフォルトの名無しさん :2009/11/27(金) 12:02:52
失礼しました。 (["'`]?)([^\1]*)\1:(["'`]?)([^\3]*)\3:(["'`]?)([^\5]*)\5 (["'`]?)([^\11]*)\11) $2:aaa $4:bbb $6:ccc $8:ddd $10:eee $12:666 $14:777 $16:888 $18:999 $20:000 $22:111 でしたm(__)m。
そもそも文字クラス中で\1とかは使えない罠。 [^\1]は文字コードが1の文字以外に解釈されて いると思われる。 print "match1\n" if 'aa' =~ /(.)[^\1]/; print "match2\n" if "a\001" =~ /(.)[^\1]/; print "match3\n" if 'ab' =~ /(.)[^\1]/;
618 :
デフォルトの名無しさん :2009/11/27(金) 13:49:45
1と3だけマッチしますね。「(後方参照としての)\1と0以外」と 解釈される為でも無いということですね。 確かに下一桁が該当する場合に必ず一致しないということでも なかったので、原因がわからず苦しんでました。ありがとうございます。 ^を使用して簡潔に「(二桁で指定する)後方参照の文字を含まない 文字列」は表現できないものでしょうか。
619 :
デフォルトの名無しさん :2009/11/27(金) 14:47:01
クラスの中で使えないということは^で「以外」を 表現することも出来ないということですね…。 perl5なんで(?!regexp) が使えるのかな。
クォーテーションに使った文字以外と書きたくなるのはわかるが、 正規表現では書きにくいので最小マッチ.*?でいいんじゃね?
621 :
デフォルトの名無しさん :2009/11/27(金) 15:16:04
最小マッチだと文字間の区切り記号「:」を含む文字列を指定できないんです。 説明不足でした。 ●対象データ "aaa":bbb:"c:c" ●希望する結果 変数1「aaa」 変数2「bbb」 変数3「c:c」 としてマッチさせたいんですが…。
/\G(["'`])(.*?)\1(:|$)/
623 :
デフォルトの名無しさん :2009/11/28(土) 00:53:45
実現できました。ありがとう御座いましたm(__)m。 文字列数は固定なのと、クォーテーションは その文字列内で使わなければ省略できる形が 望ましかったので以下の形にして無事動作しました。 /(?:("?|'|`)(.*?)\1):(?:("?|'|`)(.*?)\3):(?:("?|'|`)(.*?)\5)$/ \Gは始めて知りました。奥深くて理解が追いついてませんが、 勉強したいと思います。 初歩的で恥ずかしいのですが、クォーテーション部分の記述って 「"」または「'」または「`」または「入力なし」を表わすものとして "?|'|` で正しいのでしょうか それとも ["'`]? とか他に記述法があるのでしょうか。
訂正 "?|'|`では正常に判定されませんでしたm(__)m。
"a1a2" =~ /([a-z][0-9])+/ p $1 p $2 これで$1に"a1" $2に"a2"になるようには出来ませんか? "a1a2" =~ /([a-z][0-9])([a-z][0-9])/ コレなら行くんですが・・・
?
エスパー的にはscan使えでよさげ
正規表現を学習したいのですが、自分の県には何処に行っても正規表現の本が辞典(リファレンス)以外売っていません 何か段階的に学習出来るお勧めの書物はないでしょうか?
とりあえずふくろう本
>>628 629さんも言ってる通り、正規表現の本はオライリーのフクロウしか選択肢が無いかも。
あとはネットで勉強すると良いかも。
パターンを何回自分で作ったかによるところが多いから、
PHPチェッカーで作りつつ勉強して、正規表現パズルで息抜きして。
って感じで、フクロウと併用するといいかも。
体で覚えるのも一つの方法だな。 オレみたいに頭の弱いヤツなら。 正規表現検索機能つきのテキストエディタで試行錯誤してれば すぐに覚えられるよ。 unix の ed とか、まるで「正規表現養成ギブス」だもんな。
>>631 大丈夫、EDは治療できます。安心してください
パズルとかよりエロデータ整理とか ダウンロードの方が覚えると思うが。。。
634 :
628 :2009/11/29(日) 21:36:03
皆さん、ご返答ありがとうございました
大量のエロデータとかダウンロードとかそんな興味ないわw
実用的にはふくろうもいいけど、オートマトンや言語理論の勉強して 基礎を理解しておくと数学的に無理なことをやろうとしたりとか無駄に 悩まなくてよくなるのでお勧め。
実装してみたけど、NFAからDFAへの変換で躓いた俺が通りますよ。
「^\w+$」 から 「^_+$」 だけ除外して検索したいのですが、下のような記述でよいでしょうか? 自信がないのでお願いします。たぶん Perl です。 ^\w*[a-zA-Z0-9]\w*$
Perlだとしたら違うが、Perlじゃないとしても違う
>>638 そもそも\wは[a-zA-Z0-9_]じゃないんだが
>>638-639 ○ 1行内に、1文字以上の、空白を含まない英数単語のみ ^[0-9A-Za-z_]+$ であればマッチする、
○ 但しアンダーラインのみ ^_+$ の連続は単語ではない。
正規表現はPerlの機能の一部として含まれる。すなわち、Perlには正規表現の機能が入っている。
正規表現で出来なくてもPerlなら出来る。
642 :
デフォルトの名無しさん :2009/12/02(水) 12:35:03
perlです。 $str="aa(bb)cc"; $ptn="aa(bb)cc"; のとき、 $str=~/$ptn/; みたいな書き方でマッチさせたいんですが括弧が邪魔して無理でした。 $strと$ptnの内容は上記のままで、正規表現でマッチさせるにはどう書けば良いのでしょうか?
>>642 そういうのはperlのスレで聞けよ。
$quoted_ptn = quotometa($ptn);
$str =~ /$quoted_ptn/
または
$str =~ /\Q$ptn\E/
ごめんtypoしてるわ。 quotemetaが正解
>>643 いけました。
どうもすいませんでした。
そして、ありがとうございました。
646 :
427 :2009/12/03(木) 21:59:36
前方一致(前方参照)について教えてください。 ●正規表現の使用環境 秀丸7.11 HMJRE.DLL1.92 ●検索か置換か? 検索 ●説明 改行(空行)に挟まれたaだけを検索したい ●対象データ a a a ●希望する結果 a ←これだけマッチしてほしい a a
647 :
デフォルトの名無しさん :2009/12/03(木) 22:00:06
以下を試しましたがダメでした。 (?<=\n\n)a(?=\n\n) (?<=^$)a(?=\n\n) バラして試したところ、どうも後方一致で改行は認識してくれるみたいですが、前方一致では改行はダメのようです。 (?<=\n\n)a ←ダメ (?<=\n)a ←ダメ a(?=\n\n) ←OK そこで知りたいのは、 前方一致で改行を使えないのは仕様でそうなっているからでしょうか?そうした記載を見つけることが出来ませんでした。 また改行(空行)に挟まれた文字を検索する方法がありましたらぜひお教えください。
>>647 前方一致って look-behind のこと指して言ってんの?
それはともかく、秀丸は改行絡みの扱いが弱いから制限事項でない?
>>646 マッチして欲しいaが空行に挟まれてないじゃん
650 :
デフォルトの名無しさん :2009/12/03(木) 23:42:48
秀丸v8β28なら (?#fulllinematch)\n(a)\n\n(?\1) でできるみたい 前方一致は秀丸で使われている独自用語。一般用語では648のとおり。
"(a b)(c d e)" こういう文字列を (a b)と(c d e)に分割する事って出来ませんか? 出来ればrubyでお願いします
652 :
650 :2009/12/03(木) 23:52:40
おっと間違えた。 (?#fulllinematch)\n\n(a)\n\n(?\1) だ
r = /(\(+) ([^\(]+) (\)+) /x "(a b)(c d e)" .scan(r).map do |m| puts m.to_s end
ありがとうございます 追加で悪いんですが・・・ "(a b)(c (d e))" もし、こういうネスト構文になった場合 正規表現での分割は無理でしょうか? (a b) (c (d e))
656 :
646 :2009/12/04(金) 07:03:25
>>650 ありがとうございました。
なんか最新βからfulllinematchなるものが使えるようになったみたいですね。
実にタイムリーでした。
おまけに (?<=\n\n)a を実行すると「前方一致では改行文字は使えません」なメッセージも表示するようになっていました。
で、「前方一致」って秀丸独自だったんですね。以後注意します。
>>653 を少し改良してみて
p "(a b)(c d e)test".scan(/(\([^\(]*\))/)
こうなったんですが
何故^\(を[]で囲わなきゃいけないんでしょうか?
↓のようにかいても意味は同じだと思うんですが動かないんです。かき方が違うんでしょうか?
p "(a b)(c d e)test".scan(/(\(^\(*\))/)
p "(a b)(c d e)test".scan(/(\(.*\))/)
正規表現では、[]で囲まれると、他の部分と意味が変わって、 たとえば [^\(] の場合、( 以外の任意の一文字、という意味になる。
>>658 ^この否定は[]の中でしか使えないんですかね
(a b)と(c d e)に分割するには/(\([^\(]*\))/これが最小コードとなるんでしょうか?
あと
>>653 さんのかいた//x のxの意味もよくわからず消してしまったんですが、xをつけると何が変わるんでしょう?
>>658 []の中の(はエスケープいらんだろう。
>>659 オマエはマニュアル読むって頭を持ってないのか?
>>660 だって、早く簡単にわかるならそのほうがいいじゃないですか。
うわぁぁぁ
>>660 //xについての記述はぐぐりにくいので見つけられなかったです
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | | | /  ̄ ̄ ̄ ̄ / / ぶち殺すぞ / / / / / / ____ / / / / /
確かに調べるのめんどくさいんですが、 2chはいつから喰わず嫌いをはじめたのか、質問したい 次の方どうぞ
釣りはいいから。獣の数字げっと
鬼車でひいひいいわせてやるよ
諸君、進んでおるかね?
●正規表現の使用環境
otbedit(
http://www.hi-ho.ne.jp/a_ogawa/otbedit/index.htm )というエディタです。
(emEditorでは行をまたいだ置換がうまくいかずotbeditに変えました。使えればソフトにはこだわりません)
Perl互換の拡張正規表現が使えるとのことですが、詳しい説明が書いておらずわかりませんでした。
●検索か置換か?
置換
●説明
特定の文字列の間にある空でない文字列の最後に任意の文字列を加えること
(例では@Bと@Aの間にある空でない文字列の最後にaを付け加えたい。できればそれから@Aと@Bは除外したい)
【@B(.|[\r\n])*?@A】で全体から特定の範囲を指定した後で
【[^\n]+$】→【$&a】の置換の繰り返しで可能ではありましたが、数が多いのでできれば一括で置換したいです。
●対象データ
@A
あいうえお
@B
かき
っくけこ
さしす
@A
せそたち
つてと
@B
なにぬね
のは
@A
ひふへほ
670 :
デフォルトの名無しさん :2009/12/15(火) 18:49:00
●希望する結果 @A あいうえお @Ba かきa っくけこa さしすa @Aa せそたち つてと @Ba なにぬねa のはa @Aa ひふへほ ↑できれば@Aや@Bにaをつけたくはありません
ゼロ幅アサーション
誰かCで正規表現できるクラス作れよ BOOST使いづらすぎる
CじゃなくてC++です
Boost Regex++じゃ駄目なのか
Boost使いづらいです・・・
xpressiveもだめ?
今出先なので、帰ったら見てみます
鬼車ってどうなんでしょうか?
どうって?
性能?
鬼車って確か検索機能しかないよね(置換機能が無い) 置換を自力で実装するの面倒なんで代わりにbregonig.dllとか使うんだけど 文字コードsjisしか使えなくて勿体無いあああってなる
682 :
デフォルトの名無しさん :2009/12/25(金) 19:56:08
●正規表現の使用環境
perl5.8.7 CentOS 5.3
文字コードはEUCです。
●検索か置換か?
置換
●説明
全銀テレ為替文字対応のため、数字、大文字英字、半角カナ・濁点、一部半角記号記号のみの文字列に
変換したいのです。
可能文字はこちら
ttp://www.kyodocms.jp/qanda/qa18.htm これら以外の文字を半角スペースに置き換えたいのです。
●対象データ
任意の文字列です。
1.ひらがな→カタカナ変換
2.全角→半角変換
3.英小文字→英大文字変換
4.ァィゥェォッャュョをアイウエオツヤユヨに変換
ここまで出来てて、入力可能文字以外をスペースに置き換えたいんですが、上手くいきません。
どうすればいいでしょうか?
[^0-9A-Zアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン゛°\\,\.「」\(\)\-\/] を に置換 あってるかどうかは試してないけどこういうこと?
>>683 レスどうもです。そのとおりです。
>>682 の条件を変数$regExpに代入し、
$result = 'パ-カ-ヲ買ツタ01234567';
$result =~ s/$regExp/ /g;
とすると、漢字だった部分が文字化けし、「パ-カ-ヲ ・糟・1234567」となってしまいます。
結果は「パ-カ-ヲ ツタ1234567」にしたいのです。
686 :
デフォルトの名無しさん :2009/12/26(土) 00:26:46
質問があります。 <div id=・・・>←1 <div id=・・・> </div>←2 <div id=・・・> </div>←3 </div>←4 抜き出したいのは1から4全体なんですけど "<div id=・・・(.+?)</div> で非欲張り系で抜き出すと1から2までヒットします。 1から4全体を抜き出す方法ていうのはないのでしょうか? XML形式ならいけるぽいのですが・・・ 無理なのでしょうか?
対応するタグという意味なら田中スペシャルが使えればできる。
ていうか素直にXMLパーサ使え
HTMLの処理には正規表現ではなくHTMLパーザを、XMLの処理にはXMLパーザを。 テンプレに入れてもいいレベルのFAQ。
690 :
デフォルトの名無しさん :2009/12/27(日) 02:55:21
わかりました。パーサを調べてみます
文字列を分割するとき、特定の文字で囲われているものは除外するっていう方法ありますか? phpなんですけど preg_splitで例えば A,B,C,'D,E',F を [0]=A [1]=B [2]=C [3]=D,E [4]=F 上記のように分割できますか?
普通にCSVのモジュール使えばいいのでは
>>691 詳説 正規表現 にCSV処理のサンプルあるよ。オヌヌメ
●正規表現の使用環境 Java1.5(Firefox 3.0.16) ●検索か置換か? 検索 ●説明 \.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jpという文字列を検索したいです。 ※検索対象の文字列自体が正規表現のようになっています。 ●対象データ \.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp ●希望する結果 \.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ※完全一致 自分なりに\を付けたりして試してみたのですが出来ませんでした。 以上、どうかよろしくお願いします。
文字列定数内の \ 自体を \\ とするエスケープまで含めて "\\\\\\.nas\\(3\\|5\\)\\\\d\\+\\\\\\.\\[a\\-z\\\\\\-\\]\\+\\\\\\.nttpc\\.ne\\.jp" となる
>>695 694です。
どうもありがとうございました。
すごく長い表現になっちゃうんですね。(汗
こんにちは。 度々すみませんが、よろしくお願いします。 ●正規表現の使用環境 Java1.5(Firefox 3.0.16) ●検索か置換か? 検索 ●説明 #ipbf\d+souka.saitama.ocn.ne.jp という文字列を検索したいです。 //マッチする var body = document.body.innerHTML; var temp1; temp1 = new RegExp(/#ipbf\\d\+souka.saitama.ocn.ne.jp/); alert(temp1.test(body)); //マッチしない var body = document.body.innerHTML; var word = new Array(); var temp2; word.push('#ipbf\\d\+souka.saitama.ocn.ne.jp'); for (var i = 0; i < (word.length); i++) { temp2 = new RegExp(word[i]); alert(temp2.test(body)); } ●対象データ #ipbf\d+souka.saitama.ocn.ne.jp ●希望する結果(※完全一致) #ipbf\d+souka.saitama.ocn.ne.jp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 「//マッチしない」方の配列内容を変えずに(\を追加せずに)一致させたいです。 以上どうか、よろしくお願いします。
Pattern.quote 使えばできるんでない?
>>697 word.push(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
>Java1.5(Firefox 3.0.16)
JavaじゃなくてJavaScriptでしょ?それなら
>>695 は正規表現リテラルでこう書ける
/\\\.nas\(3\|5\)\\d\+\\\.\[a\-z\\\-\]\+\\\.nttpc\.ne\.jp/
>>698 >>699 >>700 返事が遅くなりすみません。
レスありがとうございます。
体調が悪くまだよく試していないのですが、まずはお礼だけで失礼します。
JavaとJavaScriptが区別できない人っていまだにいるのか…
VBとVBAの違いもな。 説明するの大変なんだよな・・・。
VBとVBAの違いなんて知らない奴たくさんいるだろ VB触ってるのは底辺だけなんだから
ゲーム機は全て「ファミコン」だ。
ファミコンって何だ? ピコピコのことか?
ピコピコはゲームウォッチ系じゃねーの? 知人が20万円ほど出してPC-98を買ったら 姉に「たっかいファミコンやなぁ」と言われたらしい。
708 :
デフォルトの名無しさん :2010/01/05(火) 12:45:41
●正規表現の使用環境 Java1.5 ●検索か置換か? 検索 ●説明 123456700 とか12345678-00など 7桁から10桁の数字にあと2桁の数字がハイフンもしくは連続して付属する数列の検索。 数列の直前にCodeまたはInvoiceがついてたら除外する。 Invoice 12345678-00 はマッチしないけどaccess# 12345678-00 はマッチする。 "On Invoice 123446789, your order was placed. However, please be sure to note that your account number 789456123 is suspended until further notice." 最初の番号Invoice 123446789は無視するけどaccount number 789456123はマッチするようにしたい。 ●対象データ Invoice 123446789 word 454545454 454545454545 Code: 4085432259 passcode 6789012 06 number 8901234 08 word 454545454 word ●希望する結果 マッチしない Invoice 123446789 Code: 4085432259 passcode 6789012 06 Code 7890123-07 ^(?!(Code|Invoice).)([^=\/%(.]\b\d{7,10}((\d?\d?)|(-\d\d))?\b) 自分でここまでやったけどうまく動かないです。 よろしくお願いいたします。
javaならプログラム書けるんだからInvoice,Codeのことはとりあえず 忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode, Invoiceがないことを確認する方がたぶん楽だと思うよ。
javaならプログラム書けるんだからInvoice,Codeのことはとりあえず 忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode, Invoiceがないことを確認する方がたぶん楽だと思うよ。
すまん2つ出た
712 :
デフォルトの名無しさん :2010/01/05(火) 14:16:10
ありがとうございます。実際にはJAVAで作成しているわけではなく、アプリケーションがJAVAとおなじ正規表現を使用している環境なので、プログラムを書くことはできないんです。それでここでアドバイスがいただければと思いまして、
look-ahead(?!...)じゃなくてlook-behind(?<!...)を使うとこだね。 そしてlook-behindはたいていある決まった長さのの文字列に マッチするパターンがしか使えないので、 (?<!Invoice: )(?<!Invoice )(?<!Code: )(?<!Code ) のように並べて使うことになるだろう。 必要な仕様がきちんと書かれてないのでこれだというのは 示せないけどがんばれ。
●正規表現の使用環境 VB.NET ●検索か置換か? 検索 ●説明 タブを含む何かの文字列の複数行を表す方法を教えて ●対象データ AAAA TAB TAB hogehoge改行 あああああ TABT ABT AB hogehoge改行 TAB TAB hogehoge改行 ZZZZ ●希望する結果 あああああ Regex("AAAA\n([\t.]+?\n)+(?<1>.+?\n)([\t.]+?\n)+ZZZZ",MultiLine) 上のように書いてみましたがだめでした。 AAAA改行とZZZZの間の文字列をターゲットにしつつ その中にタブか何かの文字の組み合わせの文字列が1つ以上あって、行末に改行がある という行がいくつかある。 ということを書いたつもりなのですが間違っているところを教えて頂きたいです。
[\t.]だとタブまたは任意の文字なので結局[\t.]+?は.+?と書いたのと同じ。 また、〜+?とは普通書かないね。〜*と同じなので。 \tが少なくとも一つ含まれた行にマッチさせたいなら、 .*\t.*\n
いや+?は最短マッチだろ。
Multilineなら\nは.に含まれないので、.+?\nと書いても結局.*\nと 同じになるっていいたいんじゃねーの?
それをいうなら.+じゃないか
前にも .+? と .* が等価だと思ってる人がいたような。 \d? とかの ? と同じものに見えてるのかな。
>>715 [\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。
Javascriptを勉強中です。といっても、ブックマークレット程度しかやってませんが。 正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が 使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。 {n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。 どう考えても {n} と {n}? は同じ結果になるように思えるのです。 正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた {n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。 どなたか解説していただければ幸いです。よろしくお願いします。 記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。
>>722 的確な回答ありがとうございます。
>googleに頼り切ってるヤツの弱点に見えるけどなぁ
検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると
目が節穴になるぞ、というお叱りと理解いたしました。
☆perlretut - Perl の正規表現のチュートリアル
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html これは
>>2 の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。
答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。
このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。
結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。
やはりPerlだと細かい情報もしっかりあってスゴイです。
これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。
>>723 それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら
man perlretut を実行すると表示されるよ。
ウェブを見るより先にマニュアルを読めってことで。
726 :
723 :2010/01/12(火) 22:05:22
>>724 UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。
Javascriptで使える表現かどうかは、以下を見てチェック。
☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center
ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp 出来るだけ大本の公式情報を参照すべし、ですね。
>>725 情報ありがとうございます。間違ってはいませんが、確かに変ですねぇ。
perlretut、面白いですね−。塩基配列のストップコドンのとことか。
自習してみて、チュートリアルと同じ結果になるのを確認したのはいいのですが…
Javascript:var R=/(\w\w\w)*?TGA/g, S='ATCGTTGAATGCAAATGACATGAC', A = [], I = 0; while(R.test(S)) {A[I] = RegExp.lastMatch + ' (' + RegExp.lastParen + ') Pos=' + R.lastIndex; ++I;} alert(A.join('\n\n'));
なぜずれるのか、理解できず…。その後バックトラックの動作を知り、単に「必ず3文字ずつ進む」と
思い込んでただけだと気付きました。。。マッチにトライして失敗したらそこで終わりではなく、
開始位置を1文字進めるんですね。筆者が仕掛けた罠に見事にハマりました。。。
というか、こういう処理は素直に3文字ずつ取り出して判定すべきですよね。
なお、Javascriptには\Gなんてありませんでした。残念!
>726 man じゃなくても perldoc perlretut でいけるよ。
>>725 MSDNライブラリは機械翻訳だからしかたないべ
LESSON1 1. water 2. autumn 3. city 4. (Not at all.) 5. This is (what) think. 6. (What if) he's not there? 7. I've never (met him). 8. Look (at her). 9. water 10. matter LESSON2 以下L10まで続く を並び替える所で詰みました。 ↓↓↓↓↓ LESSON1 1. water 2. autumn 3. city 4. (Not at all.) 5. This is (what) think. 6. (What if) he's not there? 7. I've never (met him). 8. Look (at her). 9. water 10. matter LESSON2 以下L10まで続く と並び替える方法をご教授ください。 (\d{1,2}\.).+(?=\d{1,2})こんな汚いソースでは動きませんでした(;;) 昔よくいじってたんだが、これでは自信なくしてしまいますね。。
なんの言語使ってるのか知らんが数字が必ず頭にあるのなら コレクションか配列にぶち込んで数値扱いでsortするだけじゃないのか
●正規表現の使用環境 Javascript(たぶん1.5?Firefox3.5以降で動かしたいです) ●検索か置換か? 検索 ●説明 直前に限らず前方にhugaまたはpiyoがない場合のhogeにマッチさせたいんですが どうすればいいですか? 〜以外、とか〜が続かない場合、とか [^xyz]やx(?!y)がありますが 複数の一まとまりの単語が前にない場合 ってどうすればいいのかなと あと piyoaaaaahoge と同じ文字の繰り返しじゃなく piyoaiueohoge といろんな文字(数字や記号も)が複数挟まる場合も どうすればいいのかわからず
/^(?!huga|piyo).*hoge/
>>729 自分は勉強中なので演習がてら作ってみました。
/(LESSON\d+ +)?[^ ].*?(?= +(\d+\. |LESSON\d+ |$)|$)/g
一応、区切りと途中のスペースはいくつ入っても可としました。
1行目だけ「LESSON1 1. water 」で、かつ「LESSON2 以下L10まで続く」という文章にもマッチ
させなければならないのが面倒でしたが、x(?=y) 肯定的前方先読みの良い題材になりました。
ところで、、、「LESSON2 以下L10まで続く」という文章はデータ中に必要だったんですか??
以下はついでに試作しました。
■汎用的に「数字. 」で区切る、冒頭保存
/[^ ].*?(?= +(\d+\. |$)|$)/g
■汎用的に「数字. 」で区切る、冒頭は捨てる
/\d+\. .*?(?= +(\d+\. |$)|$)/g
734 :
731 :2010/01/18(月) 22:37:06
>>732 どうもありがとうございます
.*って
aaaaiiiiuuuueeeeooooってあったら
最初に見つけた文字(この場合a)の繰り返しにマッチするんだと思ってました
つまりaaaaだけにマッチするんだとばかり
hugaまたはpiyoが先頭じゃないかも知れない場合もそのままでマッチしますか?
^.*(?!huga|piyo)〜とかに改変?
JavaScriptの正規表現をその場で試せるサイトってないのかな? php、ruby、.netなら知ってるんだけど。
ブラウザのデバッグツールつかってJSコンソール叩けばいいじゃん アドレスバーに直で入れたっていいし
>>731 /^((?!huga|piyo).)*hoge/
rubyにもperl互換の正規表現ってあんの?
有無
●正規表現の使用環境 php 5.3のpreg_replace ●検索か置換か? 置換 ●説明 $var['var1'] = "value1"; $str = "%var1%var1%var1%"; $ptn = わからん; $str = preg_replace($ptn,$var['var1'],$str); echo $str; 期待する結果 →value1varvalue1 要するに%なんたら%を変数として扱って、 連想配列から引っ張ってきたいんですが、 うまく%の対応を表現することができません。どのような正規表現を使えば良いんでしょうか?
$ptn = '/%([^%]+)%/e'; $str = preg_replace($ptn,'$var[$1]',$str); value1var1value1になるけど。
>
>>743 '$var[$1]'
これ普通に思いつかなかった。ありがとう。できた。
745 :
デフォルトの名無しさん :2010/01/28(木) 00:22:28
●正規表現の使用環境 PHP ●検索か置換か? 検索 ●説明 大量の文字データの中から「マンコ」という文字列をMATCHさせたい。 ただし、「イマンコ」「マンコア」「ウルトラマンコスモス」「アパマンコーポ」を含む文字列はMATCHさせない。 ●テストケース(文字列)と期待する結果(MATCHするかしないか) マンコ MATCHする オマンコ MATCHする マンコー MATCHする ウルトラマンコ MATCHする マンコスモス MATCHする アパマンコ MATCHする マンコーポ MATCHする イマンコ MATCHしない マンコア MATCHしない イマンコア MATCHしない ウルトラマンコスモス MATCHしない アパマンコーポ MATCHしない ●試した正規表現 (?<!イ)((?<!ウルトラ)((?<!アパ)マンコ|マンコ(?!ーポ))|((?<!アパ)マンコ|マンコ(?!ーポ))(?!スモス))(?!ア) ●質問内容 上記の正規表現で、期待する結果は得られたのですが、どうも長ったらしく、スッキリしません。 もし、「ウルトラマンコスモス」や「アパマンコーポ」のように、真ん中に対象文字列ありで除外したい文字列がどんどん増えていったとしたら非常に面倒な気がします。 もっとコンパクトに短く効率的に書けたりするなど、いい案はございますでしょうか?アドバイスをいただけると幸いでございます。
くだらねえww
>>745 例外を先に弾いてしまうのが一番楽だろうが
そんなのは正規表現スレで言っていい発言ではないしな
正規表現でやったら楽なことっていちいち聞かなくてもできるから スレで質問がでるようなのはたいてい不向きな問題w
749 :
デフォルトの名無しさん :2010/01/28(木) 13:40:43
>>745 では、ワードが不適切でした。申し訳ございません。訂正いたします。
●説明
大量の文字データの中から「新宿」という文字列をMATCHさせたい。
ただし、「西新宿」「新宿駅」「東京都新宿区」「西武新宿線」を含む文字列はMATCHさせない。
●テストケース(文字列)と期待する結果(MATCHするかしないか)
新宿 MATCHする
湘南新宿 MATCHする
新宿御苑 MATCHする
東京都新宿 MATCHする
新宿区 MATCHする
西武新宿 MATCHする
新宿線 MATCHする
西新宿 MATCHしない
新宿駅 MATCHしない
西新宿駅 MATCHしない
東京都新宿区 MATCHしない
西武新宿線 MATCHしない
●試した正規表現
(?<!西)((?<!東京都)((?<!西武)新宿|新宿(?!線))|((?<!西武)新宿|新宿(?!線))(?!区))(?!駅)
●質問内容
上記の正規表現で、期待する結果は得られたのですが、どうも長ったらしく、スッキリしません。
もし、「東京都新宿区」や「西武新宿線」のように、真ん中に対象文字列ありで除外したい文字列がどんどん増えていったとしたら非常に面倒な気がします。
もっとコンパクトに短く効率的に書けたりするなど、いい案はございますでしょうか?アドバイスをいただけると幸いでございます。
●補足
「事前にif文などで、MATCHさせたくないワードを除外する」ということは諸事情によりできません。
たった一つの正規表現で表すことが絶対条件です。
新宿(?<!西新宿)((?!区)(?!線)(?!駅)|(?<!東京都新宿)(?=区)|(?<!西武新宿)(?=線))
>>747 西新宿|新宿駅|西新宿駅|東京都新宿区|西武新宿線|新宿
にマッチさせて、結果が "新宿" 以外の物を弾け
と言えば正規表現スレらしい発言になるぜ。
>>749 の条件には合わなさそうだけどな。
もうちょっとメンテしやすいのを思いついた
新宿(?<!西新宿)(?!駅)((?<!東京都新宿)|(?!区))((?<!西武新宿)|(?!線))
俺も
>>751 の方がいいと思うけどな
何か我々の与り知らぬ事情があるんだろう
いっそ文字列sとsを部分文字列として含む文字列の集合T={t1,t2,...}が与えられたときに sを含むがTの要素を含まない文字列にマッチする正規表現を求めるプログラムを 書いてしまうのがいいのではないだろうか。と思ったが結構難しいな...
>>753 ○○を含まない正規表現 を求めるプログラムならあるから
それをベースにすればある程度簡単にいけそうだ。
>>752 これは目から鱗
MATCHさせたくないワードに「○○新宿△△」を追加したいときは
単純に正規表現に
((?<!○○新宿)|(?!△△))
を追加すればいいわけか
空気読まずに質問するけど その正規表現はどの正規表現エンジンの構文なの?
>756 多分 Perl 互換なんで PCRE とかじゃね?
ありがと、ググってみる
760 :
749です :2010/01/29(金) 02:40:15
>>752 ありがとうございます!
まさに求めていたご回答です。
カスタマイズ性にも優れ、大変勉強になりました。
○ンコメソッド ないし 新宿メソッドと命名しよう
いつも見てて思うけど、ここの人たちって良い人ばっかだ。
見た目に騙されてはいけない
>>755 これは便利だな。新宿パターンとでも呼べばいいのか
答えを考えるがパズル的でけっこう楽しいのだよ。
すぐパズル言う人は、有名な人の発言に影響され杉。 だと思う。
正規表現程度でパズルとか言っちゃう奴はパズル知らな杉
パズルやったことあるけど、面白さがわからなかった。 トランプもゲームもやったことあるけど、面白さが分からなくて 友達いなくなった。
769 :
sage :2010/01/30(土) 13:05:58
リアルの生活は捨ててコンピュータに熱中しろ。 そして悟りを開くのだ...
図書館からこれを借りてきたが、元々の目的を忘れて読んでるぜ 詳説 正規表現 tp://www.oreilly.co.jp/books/4873111307/
麻雀の役の判定を正規表現ですることは可能ですか?
比較演算子にマッチする正規表現で教えてください。 "<"にはマッチするが"<<"にはマッチしない、その逆の ">"にはマッチするが">>"にはマッチしないという部分 がうまくいっていないようなんです。 どう記述すればいいですか? "(!=|==|<[^<]|>[^>]|<=|>=)"
単純に [^<]<[^<]|[^>]>[^>] じゃだめ?
>>773 否定の文字クラス[^...]は、'...'以外の一文字にマッチするので
'[^<]<[^<]'だと、例えば単独の '<' や '<=' にマッチしないのだが、これはいいのかな。
比較演算子だけの行とかがなければ問題ないでしょ。
>>774 比較演算子ならかなりの確立で "x>y" みたいな比較をすると思う。
計算が長くなって改行したとしても必ず、
"x
<
y"
という形になるから、改行を文字として考慮していれば問題ないと思う。
単独の文字として"<"にマッチングさせるなら、なら先読み後読みを使う必要があるけども。
>>775 ,
>>776 ああ、比較演算子にマッチさせるのか。忘れてた。
でも必ず題意を満たすかどうかは保証できないけど、何をやりたいかにもよるのかな。
みなさんありがとうございます。 いちおう演算子の途中で改行がはいることはないという前提です。 でもシフト演算子はあるので、A << B ではアンマッチで、 A < B や A <= B はマッチするというのが希望です。
#送信してしまいました
>>773 の方法でうまくマッチしてくれるようです。
ありがとうございました。
あ、けど "<!" こんなありえないものもマッチしちゃいますね・・・orz
(!=|==|[\w\s]<[\w\s]|[\w\s]>[\w\s]|<=|>=) で、うまくいったような。
"<!"が出る場面がよくわからない(HTMLのコメント文ぐらい?)けど、 それを言い始めたら収集がつかなくなると思うんだが。 そもそもそれは先読み後読みを使っても生じる問題。
何が目的でマッチさせるのかがわからないとそれ以上の議論はできないと思うけど (正規表現でマッチさせるのは手段)
>>782 if ( -1 <!(1) ) {...}
普通にlookahead/-behindつかえよ
環境書いてないから普通に使えるかどうかもわからない。
ドンジャラなら正規表現で問題なくいけるんだけどなぁ
| の使い方はわかりましたが、C言語の && に相当する表現は どうすればいいでしょうか 語単位で使いたいです William & John (William と John を両方含む)みたいな感じで
WilliamとJohnの間に何がどれだけあってもその全体がマッチしていいのか? \bWilliam\b.*\bJohn\b|\bJohn\b.*\bWilliam\b こんな感じ?
いつも思うけど2回ずつ書くのめんどくせーよなー
>>790 そうですそんな感じですありがとうございます
でもそれタイプするの大変そうですね
/\bWilliam\b/ && /\bJohn\b/ タイプが楽になる。
処理系依存注意
処理系依存も何も正規表現じゃないだろ
/(?=.*William)(?=.*John)/
0 0 0 1 2 3 0 0 0 4 5 6・・・・ と続く文字列を0を残したまま 0 0 0 1 2 3 0 0 0 456 と抜き出すにはどううればよいでしょうか? 0は最低1桁あり上は5個です 000000 などは存在せず 最低は 01 になります
799 :
デフォルトの名無しさん :2010/02/03(水) 12:20:36
失礼しました こちらです 000123000456・・・・ と続く文字列を0を残したまま 000123 000456 と抜き出すにはどううればよいでしょうか? 0は最低1桁あり上は5個です 000000 などは存在せず 最低は 01 になります
search ==> ([1-9])0 replace ==> $1\n0 about 1024 ?
0+[1-9]+
>>800 確かに途中に0を考慮してませんでした
>>801 ありがとうございます
となると
0+[1-9][0-9]+[1-9]
あ、これじゃあ桁数が少ないとだめか・・・
>>801 802じゃないけど勉強になりました。ありがとうございます
その都度変化する変数$txtの中身(全半角混在)から、alt="●"とsrc="■"(●と■が変化)の ●と■だけを抜き出して$aと$bにそれぞれ代入したいのですが、どのようにやればよいでしょうか PHP5
>>802 ・途中の0: 0103 01と03にするのか、0103にするのか
・末尾の0: 0110021 どこが最初の数字の末尾になるのか
●正規表現の使用環境
Windows XP, Python 2.6
Windows XP, Boost.Regex
Windows XP, Boost.Xpressive
のうちどれでも可です。
●検索か置換か?
検索
●説明
C++言語のコメントを過不足無く検出できる正規表現
●対象データ
C++ソースコード, ヘッダーファイル
(中身を全て一つの文字列(target_str)として取得しています。
target_strは全ての行を取得し、行間に\nを挿入してつなげた形となっています。)
●希望する結果
コメントを検出できること。
C++言語のコメントに一致するPython正規表現を書いてくださいませんでしょうか?
コメントは // と /* */ とからなりますが、厳密には
C++言語は
>>806 の様なコメントの扱いをします。
C++言語は
>>806 の様なコメントの扱いをします。
ではなく C++言語は
>>808 の様なコメントの扱いをします。 でした。
1. //でコメント導入を示し、行末までがコメントになります。 var = 42; // comment 2. /*と*/で囲むと、複数行コメントになります。 /*comment*/ aaaコメントでない /*comment comment comment */ 3. コメントの入れ子については C++言語では基本的に前から見ていくので、最初に出現したコメントが優先されます。 (//を無条件で優先するというようなことはありません。) 従って /* foo // bar */ foobar */ は最初の/*を見た瞬間から*/が出現しない限り全て無視する(コメント扱いする)こととなります。 よってC++言語では//を見ても何とも思わずコメント扱いを続け、 その後最初に */を見た瞬間にコメント扱いを終了します。 よって foobar までコメントになるのでははなく、 /* foo // bar */だけがコメントとなりfoobar */の部分はコメントでないことにとなります。 4. 文字列リテラルの扱い C++言語では "" で挟まれた物を文字列として扱います。 "コメントでない"//comment 5. コメントと文字列の入れ子について C++言語では3.と同様に、最初に出現したものを優先します。
809 :
◆Qn5tuAIkhk :2010/02/07(日) 16:32:51
C++言語 コメント&文字列 扱いの例: // comment /* foo コメントでない // comment */ foo /* comment // comment */ // comment /* foo コメントでない foo */ これはコメントでない "// foo" コメントでない // "comment" コメントである /* "comment" コメントである comment // comment */ foo コメントでない "/*" コメントでない foo コメントでない // comment */
自己解決しました。
pythonスレに答え出てる
813 :
810 :2010/02/07(日) 18:00:01
なんだ、マルチポストだったのか。 # そういえば、ふくろう本にサンプルあった気がするけどな。
pythonスレでは不可能じゃね?
という結論になっている。
>>813 > # そういえば、ふくろう本にサンプルあった気がするけどな。
いや、アレは全然だめ。
複数行コメントに対応してないから。
入れ子構造が記述できればいいなら折角なんだからC++のままBoost::spirit使うとか
日本語で\bが使えたらすごいだろうなぁ
入れ子構造を処理する必要があるなら不可能だけど C++のコメントってネストできたっけ
C++のコメントはネストできないしふくろう本の正規表現はちゃんと動くよ。
821 :
819 :2010/02/08(月) 21:34:51
>>820 ああごめん、ネストってもしかして
Cスタイルコメントのネストのこと?
つまり/* */と/* */のネストのことか?
>>821 そう。/* */と//が互い違いになってても階層が無限に深くなることはないはず
823 :
デフォルトの名無しさん :2010/02/09(火) 23:18:12
秀丸の正規表現で質問です 括弧の中の「word:○」の○の大文字の英字一文字だけを\1や\2などで取得する正規表現は動書けばいいでしょうか? 例の場合ですと、AとBを取得できるようにしたいです 【例】 word:A word:C ( word:A word:B ) 【補足】 記述は例の通りなんですが、カッコ内のデータは2つとは限りません。3個の場合もあれば100個の場合もあるので決まってないです。 ( word:Z word:V word:R word:F ) 【自分で書いてみたけどダメだった正規表現】 \(.*(word:([A-Z]+?)){1,}.*\)
>>823 たしか括弧って一番外側に無いと\1とかで取得できないんだよねぇ。
うーむ。。。
秀丸エディタのヘルプ 目次− 検索系コマンド− 正規表現−一般的正規表現互換のタグ付き正規表現 には "タグの対象となるのはあくまで一番ネストの浅いカッコだけ" とありますね。 つまりカッコがいくつ出てくるか分からない場合, 番号指定による文字列取得はできません。 まずマクロなどで括弧内の文字列を分離したうえで word:([A-Z]+)で処理するしかないと思います。 この場合,各々の大文字が\1で得られます。
困っているわけじゃないんだけど、{0}って出現しないって考えでいいんだよね? じゃあ何で (東京都){0}新宿区{0} が 東京都新宿区 にマッチするんだろう・・・。 試したのは.NetのRegex
空文字列にマッチしてんじゃねーの?
いや、どうも"新宿"にマッチしたことになってるんだけど。 なんか間違ってたのかな。
新宿区{0} この{0}は区にしかかかってない
あ〜、空文字って "空文字""新宿""空文字" ってことか〜。 なるほど。ありがとう。
そりゃそうなるわな
adcという文字列にはマッチしてabcdやabcdeなどはマッチしないようにするにはどうしたらいいでしょうか?
・/adc/
\bで挟む
曖昧で質問の意図がわかりにくいが ^ と $ で挟むとか。
提示された条件だけなら、文字列として"adc"と比較すればいい これが望む回答だとは思えないので、高確率で質問自体が無意味
>>4 どおりでなくてもいいけど情報なさすぎの質問では答えにくいよね。
>>832 正規表現エンジンによるな
秀丸(hmjre.dll)なら"単語の検索"にチェックをいれるか,もしくは"\< abc\> "
鬼車なら"\babc\b"
adcだよ?
孔明の罠かっ!!!
多数のレスありがとうございます 情報がすくなかったようですみませんでした 参考にさせてきただきます
842 :
デフォルトの名無しさん :2010/02/12(金) 06:29:48
PHP 5.2の環境です。 タグが1つだけの場合に消去したいです。 下のような文章があったとして… あああ<br /><br />いいい<br />ううう<br />えええ 次が希望する結果です。 あああ<br /><br />いいいうううえええ php.netとか見てると、言明とかなんとか辺りだとおもうんですが…上手くできません。
843 :
842 :2010/02/12(金) 06:31:30
ああ補足、マルチバイトに対応した置換です。
(?<!<br />)<br />(?!<br />)
おっと失礼 (?<!<br />)(<br />)(?!<br />)
pregなら /(?<!<br \/>)(<br \/>)(?!<br \/>)/
847 :
842 :2010/02/12(金) 08:00:08
ありがとーございます。 試してみます。 ああ、でもこれだけだと必要な改行まで省いてしまうかも。改行直後の文字を判別して改行するか決めるのも手間だなぁ。自然な文章に整形するのも結構大変だ。
848 :
デフォルトの名無しさん :2010/02/12(金) 10:45:12
グループを <a href=" URL部分 "> に分けてマッチした場合に <a href=" URL部分 追加した文字列 "> でいいのでは?
(<a href=\")(s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)(\">) $1$2xxxx#3 yahoo pipesは知らんけどperl5(.netもこれ)だとこんな感じでだめかな?
ミスった 置換側は $1$2xxxx#3 じゃなくて $1$2xxxx$3
.+?は使えない環境なのか…?
(<a href=\")(s?https?://[-_.!~*'()a-zA-Z0-9;@@@.co.jp/?:@&=+$,%#]+)(\">) でOKですか?
文字クラスの意味わかってるのかなぁ
860 :
826 :2010/02/12(金) 17:04:19
また質問なんですが、 ^(A{0}){1}$ で A にマッチしないのはどういう解釈なんでしょう?
^$
最終的にそうなるのか。 わかりました。ありがとう。
{0}と??は名前付き捕獲式集合(田中哲スペシャル/Tanaka Akira Special)で パターンを定義する時に便利だよ
あ田中哲スペシャルって名前付き捕獲式集合じゃなくて 部分式呼出しのことだったっけね
"03秒", "22分 15秒", "69時間 30分 08秒" ↑のような文字列にマッチして、数字部分を抜き出したいんですが、今は ((\\d+)時間)?\\s?((\\d+)分)?\\s?((\\d+)秒) で$2,$4,$6を持ってきてるんですが、 もっとクレバーな方法ってありますか? Perl 5.10
>>866 クレバーじゃねえwww
>>865 秒と分の\d+を[0-5][0-9]にする
抽出不要なカッコは非捕獲式集合にする
868 :
865 :2010/02/13(土) 14:34:47
非捕獲式集合を知りました どうもでした
>>863 使い方をまったく思いつけなかった俺に具体例をplz
それとa??がaにマッチすることってあり得るの?
>>869 簡単な例が思い浮かばないが
日付を表す正規表現で使ったことがある(Ruby1.9/鬼車)
RE = /
(?<sep>[\- \/_.]*){0}
(?<year>\g<y_normal>|\g<y_leap>){0}
(?<y_normal>(\d{2})?\d{2}(?!\g<sep>\g<m_feb_leap>)){0}
(?<y_leap>\g<y_leap_mother>?\g<y_leap_child>(?=\g<sep>\g<m_feb_leap>)){0}
(?<y_leap_mother>[02468][048]|[13579][26]){0}
(?<y_leap_child>0[48]|[2468][048]|[13579][26]){0}
(?<month>\g<m_feb_normal>|\g<m_feb_leap>|\g<m_short>|\g<m_long>){0}
(?<m_feb_normal>0?2(?=\k<sep>\g<d_1_28>)){0}
(?<m_feb_leap>0?2(?=\k<sep>\g<d_29>)){0}
(?<m_short>(11|0?[469])(?=\k<sep>(?:\g<d_1_28>|\g<d_29>|\g<d_30>))){0}
(?<m_long>(1[02]|0?[13578])(?=\k<sep>(?:\g<d_1_28>|\g<d_29>|\g<d_30>|\g<d_31>))){0}
(?<day>\g<d_1_28>|\g<d_29>|\g<d_30>|\g<d_31>){0}
(?<d_1_28>(2[0-8]|1[0-9]|0?[1-9])(?!\d)){0}
(?<d_29>29(?!\d)){0}
(?<d_30>30(?!\d)){0}
(?<d_31>31(?!\d)){0}
(?<date>\g<year>\g<sep>\g<month>\k<sep>\g<day>){0}
\A\g<date>\Z/x
>>870 そうかそうか定義だけするわけね
・・・こんなのよく書いたなw
閏年判定を正規表現でやろうという発想すらなかった
1〜3桁までの数字(全角含む)にマッチして 4桁以上だとスルーするようにはどうしたらよいでしょうか? (例) あいうえお 12 かきくけこ→12がマッチ あいうえお 123 かきくけこ→123がマッチ あいうえお 1234 かきくけこ→スルー .NETのRegexです 単純に\d{1,3}で良いのかと思ったら、4桁あっても最初の3桁がマッチしてしまいました・・
\d{1,3}[^\d]
それも最後の1〜3桁にマッチする罠がww
>>873 それだと
あいうえお 1234 かきくけこ→234がマッチ
となってしまいませんか?
と思ったんですが [^\d]\d{1,3}[^\d] でやったら思った通り動いてくれてる感じです
ありがとうございました。
「数字がない」でなくて「数字でない文字にマッチ」なので、 それだと、 123 にマッチしない。それでいいならいいんだけど。
そういうときには、先読み/戻り読みを使う (?<!\d)\d{1,3}(?!\d) 「1〜3桁の数値」ではなく「1〜3個の数字」でいいんだよな?
意外と深いなw
>>876 おっしゃるとおりでした・・
そんで悩んでる最中でした
>>877 ありがとうございます
>「1〜3桁の数値」ではなく「1〜3個の数字」でいいんだよな?
その通りです
教えて頂いたのでうまくいってるようです。
先読み/戻り読みってのはまだ知らないのでとりあえず調べてみます。
マッチさせるだけなら簡単だけど マッチさせたくないものにマッチさせない条件がつくと複雑になるよな
>マッチさせたくないものにマッチさせない条件 そもそもこれがないと文字列の集合が確定できない => 正規表現じゃない 正規表現はワイルドカードじゃないんよ。
正規表現はマッチしたいものを書くのが基本だからなぁ。 有限状態オートマトンをひっくり返せば補集合にマッチ するのになるけど、いざ正規表現で書こうとすると大変。 結局先読み・戻り読みみたいな飛び道具に頼ることになる。
>>882 文字列集合の確定をどこまで厳密にしようとするかで
複雑さは変わってくるよね
たとえば
>>870 に出てるような日付の(拡張)正規表現もあれば
d{4}/\d{1,2}/\d{1,2}
なんて表現もありうる
あまりに複雑になるようならパーサジェネレータを使うべきだとは思う
極窓などのファイル名置き換えで、 01_1. xxxx 10_10. xxxx を 01_xxxx 10_xxxx のように変えたい場合はどう記述すればいいんでしょうか?
>>884 search: ^(\d+_)\d+\.\
replace: $1
●正規表現の使用環境 VB.NET ●検索か置換か? 置換 ●説明 置き換えの正規表現で前後関係を記述する方法があったら教えて頂きたいです。 ●対象データ あいうえお123ABCかきくけこ さしすせそ123ABCたちつてと あいうえお123ABCかきくけこ ●希望する結果 あいうえお***かきくけこ さしすせそ123ABCたちつてと あいうえお***かきくけこ
$url = "/search/value/num=1234/location=add"
http:// 〜ではなく、このような相対URLのみにマッチさせたいときは
/\/search\/value\/num=\d+\/location=add/
をどうなおしたら良いですか?
絶対urlにパターンが含まれる場合はマッチしますが、相対の場合はマッチしません。
次の文字列からhogeだけマッチさせたいのですが可能でしょうか? ? KEY = "hoge" ? KEYは固定の文字列です イコールの左右には0個以上のスペースがはいります。 ?は不特定な文字列です 肯定後読みを使うとしたのですが思うように動きません jdk1.4です
javaでは後読みに+と*は使えなかったと思うけど、その辺かな?
一般的な実装だと後読みは固定長文字列限定だな。
>>889 俺ならば、イコール右のスペースをtrimしてから正規表現に掛ける。
つまり、作業用配列か何かに放り込んで、1クッション挟むね。
893 :
デフォルトの名無しさん :2010/02/20(土) 12:55:19
>>889 俺ならば、イコール右のスペースをtrimしてから正規表現に掛ける。
つまり、作業用配列か何かに放り込んで、1クッション挟むね。
大事なことなので(
>>889 KEY *= *"((?:[^"]|(?<=\\)")+)"
みたいな捕獲式集合で妥協してもらえないだろうか
>>892 漢なら正規表現一発でキメるべき
スレ的にはそうなんだろうけど、俺もたぶんクッション挟んで動作の確実性を取るなぁ。
>>889 です。
ありがとうございました。
やはり2回に分けてやってみます。
環境:perl (ファイラーからマスクで使う) 質問です (特定の文字列)+(特定の拡張子or拡張子なし) にマッチにはどのように記述すればいいのでしょうか? (hoge|foo).*(|\.(txt|html)) と試したのですが、拡張子なしの部分で躓いています
(hoge|foo)(\.(txt|html))?
>>889 即レス感謝
出来ました。ありがとうございます。
901 :
898 :2010/02/21(日) 21:52:44
902 :
デフォルトの名無しさん :2010/02/22(月) 11:28:10
お断りします
パーサ使った方が楽なんじゃない。。
yahoo! pipes使ったことないからな~ 如何ともし難い
つか、似たような質問をどこかで見た気がする。 忘れたけど。
>>906 同じような質問に関わったわ・・・
かなり前のような気がしたが
>>848 だった
このスレ進むのおせーなw
#include <windows.h> #include <stdio.h> #include <tchar.h> typedef struct bregexp { const TCHAR *outp; const TCHAR *outendp; const int splitctr; const TCHAR **splitp; INT_PTR rsv1; TCHAR *parap; TCHAR *paraendp; TCHAR *transtblp; TCHAR **startp; TCHAR **endp; int nparens; } BREGEXP; typedef int(__stdcall *bregfnc)(TCHAR*, TCHAR*, TCHAR*, BREGEXP**, TCHAR*); typedef int(__stdcall *bregfnd)(BREGEXP*); bregfnc BSubst; bregfnd BRegfree; void main(){ HINSTANCE hd = LoadLibrary("bregonig.dll"); if(!hd){printf("bregonig.dllを読み込めませんでした\n"); return;} BSubst = (bregfnc)GetProcAddress(hd, "BSubst"); BRegfree = (bregfnd)GetProcAddress(hd, "BRegfree"); BREGEXP *rxp = NULL; TCHAR msg[80], str1[] = "s/う//k", str2[] = "あいうえお"; if(BSubst(str1, str2, str2+_tcslen(str2), &rxp, msg)){ int m = int(rxp->outendp - rxp->outp); printf("置換結果サイズ:%d\n", m); _tprintf(_T("置換結果:%s\n"), rxp->outp); } else printf("置換出来ませんでした\n"); if(rxp) BRegfree(rxp), rxp = NULL; FreeLibrary(hd); system("pause"); } 上記の様にLoadLibraryでDLLを読み込んで使おうと思ったのですが、 VC++2008で /O2 を入れてコンパイルすると置換結果サイズがおかしくなりました。 /O1 や最適化オプションを入れない場合では正常に動きます。 何か使い方が悪いのでしょうか?
>>908 もう少し簡潔にまとめてもらいたいものだ。
で、どんな正規表現をご所望で?
>>909 サクラエディタのソースに呼び出し規約の問題と書いてありました…。
お騒がせして申し訳ありませんでした。
Jane Style 3.21でスレタイにヒットさせる方法で、 A(B偏差値|の試験|Bの試験|の採点|晒し|評価|B試験|うp) をきれいにしたいんですが、わかりません A[Bの]?(偏差値|試験|採点|晒し|評価|うp) だと ABの と言うスレタイだけヒットしないんです
[0-9]{1,} のような感じで数字以外を弾きたいのですが、+-等が弾かれません どうしたらいいでしょうか?
*.txt,*.bmp,*.zip などなど 上の文字列(拡張子の数は不定)の拡張子を 参照できるような正規表現はどうするのですか?
^[^\.]+\.(.+)$
916 :
デフォルトの名無しさん :2010/02/25(木) 09:02:41
php5.2.5 タグの後ろにある改行は無視してその他の改行に<br />を入れるという正規表現なんですが、自前で書いた preg_replace( '/[^>]\r\n/', '<br />', $str) って奴だとなぜか行末の1文字が文字化けを起こすか削られてしまいます。 何が悪いんでしょうか?
917 :
デフォルトの名無しさん :2010/02/25(木) 09:07:45
書き忘れてましたが、 なぜか[^>]を消すと症状がなくなりました。
そりゃマッチした部分全体を置き換えるんだから[^>]にマッチしたところが 消えちゃうだろ。昔はキャプチャして戻したもんだが、今なら戻り読みで /(?<!>)\r\n/ かな?
>>914 入力は "*.txt,*.bmp,*.zip" でいいのか?
で、最終的に欲しい出力はどれだ?
{ ".txt", ".bmp", ".zip" } のような配列か?
>>915 ファイル名から拡張子を取る、という正規表現のつもりかな?
その間違いはなんというか
"DENGER.txt .exe"
"DENGER.<RTL>txt.exe"
みたいなのを平気で実行するのに通じるものがあるな
>>919 >>915 じゃないが
validな拡張子付きファイル名がすでに用意されていて
そこからさらに拡張子を分離するための正規表現
と見るなら妥当じゃないか?
文字クラス内のドットにエスケープは必要ないが。
921 :
デフォルトの名無しさん :2010/02/25(木) 12:30:57
[韓国ドラマ] (韓国ドラマ) 【韓国ドラマ】 のいずれかにマッチする正規表現を"韓国ドラマ"が一度だけで済むように 記述する方法はないでしょうか?
(?(condition)yes-pattern)を使えばできる。 /(?:(\[)|(\()|(\【)) 韓国ドラマ (?(1) \] ) (?(2) \) ) (?(3) \】 ) /x
>>920 ドットを複数含むファイル名はvalidだし、
拡張子というのは最後のドット以降のことなんだが
RFCとかあるの? hoge.tar.gzの拡張子は.gz?それとも.tar.gz?
拡張子に統一規格なんてないよ アプリ側が拡張子を見て判断することはあっても
拡張子はあくまでアプリケーションの関連付けとか人間が見て分かりやすくとか そのくらいの意味しかないもな プログラムからすればファイルの先頭のヘッダーを読み取るとかして初めて 中身が自分で処理できるかどうか判断できるわけだし その辺をうまくやってるのが偽装gifか 人間はjpgと判断してるんだが中身がgifってやつ 画像表示ソフトはjpgもgifも対応してるのがほとんどなので 拡張子に関係なく中の情報でgifとして再生するから ああいう結果になる
MacとかDarwinとか拡張子あってもなくても関係ないし
質問者さんが foo.src.tar.gz.md5 でどこまで欲しいのかもわからないし ほかの要件ももひとつわからないから詳細待ちでいいんじゃないかな。
>>924 925の言うように規格は存在しないが、大勢としては"最後のドットとそれに続く文字列"
少なくともWindowsではそうなっている。他にはPythonやRubyの標準ライブラリでも同様
あと、Unix系だとそもそもextension(拡張子)と呼ぶ文化がないけど、
.tar.gzをさして単にsuffix(接尾辞)と呼ぶことはある
httpdでMIME TYPEを決めるのにも使うな
なんでおまえら拡張子の話してんだよ。スレ間違えたかと思ったじゃねーか。
元の質問者が正確に要望を提示できるように?
>>921 鬼車が使えるなら
/(?<e>韓国ドラマ)??\[\g<e>\]|\(\g<e>\)|【\g<e>】/
でもいい。かな?
934 :
914 :2010/02/25(木) 21:27:36
>>915 $1:txt,*.bmp,*.zip
こんな結果が得られました、期待してない結果です
>>919 入力はそれ以外の可能性がああります
"*.txt,*.bmp,*.zip"の数が3個と決まってるなら
正規表現"([^,.]+\\.[^,.]+),?([^,.]+\\.[^,.]+),?([^,.]+\\.[^,.]+),?"で取得できたのですが
入力が3個と決まってないのでどうすればいいのかわからないのです
>>928 foo.src.tar.gz.md5 の場合 .md5が欲しいです
ちなみに正規表現のライブラリにはboost使ってます
>>934 色々突っ込みどころ満載だな。
boost使ったことはないんだけど
boostにはJavaやPerlのsplitメソッドのような関数は無いの?
文字列は本当に"米印dot拡張子"をカンマでつなげたものなの?
実は"foo.txt,bar.bmp,baz.zip,hoge.tar.gz"だったりする?
キャプチャ($1)は部分式の個数の上限が不定の場合には使えないよ。
正規表現一発で解決しなければいけない問題なの?
936 :
914 :2010/02/25(木) 22:14:42
>>935 Perlのsplit
調べてみたら セパレータによる文字列分割 みたいですね
boostにtokenizerというトークン切り分けがあるのでこれが使えるのかな?
>キャプチャ($1)は部分式の個数の上限が不定の場合には使えないよ。
どうやら自分のしたいことは正規表現では無理みたいですね
自分で文字処理していこうと思います
937 :
914 :2010/02/25(木) 22:20:26
書き忘れた
>文字列は本当に"米印dot拡張子"をカンマでつなげたものなの?
>>934 で書いたように”入力はそれ以外の可能性がああります ”
つまり>実は"foo.txt,bar.bmp,baz.zip,hoge.tar.gz"だったりする?
の可能性もあるわけです
my $str = '*.foo,..,*.dummy.*.bar, file.baz,,,foo.src.tar.gz'; my @suffix = $str =~ /(\.[^.,]+)(?:,|$)/g; print join ' ', @suffix; .foo .bar .baz .gz boost のことはよくしらない。
はげしく香ばしいな
test
941 :
デフォルトの名無しさん :2010/03/05(金) 14:30:14
秀丸エディタで正規表現がうまくいきません。 コメントで挟まれた文章(/*と*/も消します)を消したいのですがうまくできません。 ちなみにここでは文章は3行ですが、文章の量がいつも変わるので10行のときもあれば100行のときもあります。 検索→/\*.*?\*/ 置換→ 内容↓ /* さようなら わたしの こいびとよ */
ひでまるw
943 :
デフォルトの名無しさん :2010/03/05(金) 15:48:08
テキストエディタ固有の正規表現はよくわからんけど (/\*[改行コード])([有象無象の文字コード])(*/[改行コード]) []で囲ったのは自分で対応してね で引っかかるんじゃないの?
ちょっとミスった (/\*[改行コード])([有象無象の文字コード])(\*/[改行コード])
>>941 秀丸じゃ無理だよ。
理由はヘルプに書いてある。(\nを使った複数行検索の際の制限について)
s/\(ん\)\(ち\)/\2\1\2\1/g
複数行も扱えないエディタってカスだな
vim使えビィームッ!
950 :
デフォルトの名無しさん :2010/03/06(土) 09:42:36
Perl5.8で置換したい
JSON.pmを使わずに「=>」を「:」に変換し、各項目を「"」で囲みたい
とくに項目を「"」で囲む部分が分かりません
↓変換前
xml.data = {
xmlns =>
http://aaaa.org/rss/1.0/, item => [
{
dc:subject => あいうえお,
description => 本日は雨なり。
},
]
}
↓変換後
xml.data = {
"xmlns" : "
http://aaaa.org/rss/1.0/ ",
"item" : [
{
"dc:subject" : "あいうえお",
"description" : "本日は雨なり。"
},
]
}
誰だ性器表現書いた奴は……
perl使用 入力はCSVで1行ずつ、行中のハイフン1文字をゼロ文字列または 数字のゼロにしたいのですが書き方が判りませぬ。 無い頭で「s/-/$_/」こう書いたらひどいことになりましたw アドバイス下さい。
なぜ置換文字列にそんなものを書くのか理解できないw
955 :
953 :2010/03/08(月) 16:34:43
>>954 どうも根本的なことが理解できていないようで…
956 :
953 :2010/03/08(月) 16:35:45
途中で送信しちゃったorz 正規表現は諦めてsplitで分割してチマチマとif分かませることにしました
$ echo 'hoge-fuga--boo' | perl -pe 's/-/0/g' hoge0fuga00boo
958 :
デフォルトの名無しさん :2010/03/08(月) 16:45:10
>>958 「.jpg を含まないもの」というのが「URL中のどこにも含まない」という意味であれば
^<BR/><A href="
http:// ((?!\.jpg).)*?">.*?</A>
「拡張子としては含まない」という意味(多分こっちの意味だと思うけど)であれば
^<BR/><A href="
http:// ((?!\.jpg").)*?">.*?</A>
否定先読みを使うから処理系依存だね。
>>958 質問する前に自分で考えた解を書け
何回目だ
961 :
デフォルトの名無しさん :2010/03/14(日) 01:53:37
否定先読み(?!...)でできるけどそのやり方が一番いいよ
963 :
デフォルトの名無しさん :2010/03/14(日) 02:14:47
レスありがとうございます。 今までどおりプログラム側で処理しようと思います。
全角と全角に挟まれた一個の半角スペースにマッチさせるにはどう書いたらいいですか?
966 :
965 :2010/03/17(水) 04:18:39
UTF-8の全角文字です すいません
Perlであれば。 $str =~ /[\x80-\xBF] [\xC2-\xFD]/; でいけると思う。 UTF-8の文字コードで、マルチバイト文字の始まりは必ず0xC2〜0xFDの間で、マルチバイト文字の終わりは必ず0x80〜0xBFだから、 ただ、マルチバイト文字ではなく全角文字という条件であると、半角カタカナの扱いをどうするか、などがあります。
それだと半角スペースの前後もマッチ結果に含まれるから 先後読み入れた方がいいんじゃないかな
ああ、1個の半角スペースにマッチさせる、ってあるからその通りだね。 でもマッチ結果に半角スペース1個って必要なの?
つ 痴漢
HTMLのようにホワイトスペース(改行含む)をまとめられたとかで 英単語境界を壊さずに日本語の 間に挟まった スペースを 取り除きたい のかもしれない
マッチングに気を取られてて置換を忘れてた・・・死にたい・・・
確かにこのマッチングで
>>971 のことができるね
<p>全角に挟まれた→ ←半角スペース(xhtmlのソース)</p> これをレンダリングすると1行目の改行が半角スペースになって"→ ←"になる というのを想像したが、これの除去が目的だと改行がマッチ対象だな
>これをレンダリングすると だからそれをブラウザからコピペすると挟まるんだよ 改行を処理すれば済むケースはレンダリングしてないデータ
975 :
965 :2010/03/17(水) 16:12:26
>>971 まさしくその通りです!エスパーさんありがとう
処理系も書かなきゃダメだったんですね
えと、Vimの置き換えで使おうと思ってました。
マッチ /[\x80-\xBF][ ]\{1}[\xC2-\xFD] 削除 :%s /[\x80-\xBF][ ]\{1}[\xC2-\xFD]//g こうかな?
vimだと1個の数量指定が必要なのか
いや、
>>965 が一個の半角スペースって言ってるから
全角文字と半角文字(ただし空白文字でない)が連続しているところをみつけたら
半角スペースを挿入する処理はどう書けば良いでしょうか。
#############################################################################
●正規表現の使用環境
秀丸エディタ
ttp://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular.html ttp://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular_PerlTag.html ●検索か置換か?
置換
●説明
<全角文字><半角文字(ただしタブ\tでも半角スペース でも改行\nでもない)>
または
<半角文字(ただしタブ\tでも半角スペース でも改行\nでもない)><全角文字>
となっているところをみつけたら
半角スペースをその間に挿入する置換正規表現を教えてください。
空白文字
●対象データ
秀丸エディタは最初OS/2用に開発され、その後Windowsへ移植された(OS/2版はフリーソフトウェア)。Win
dows 3.1時代より、定番のエディタとして使われてきた。1995年に32bit対応をした後は、Windows を代表するエディタ
として広くその名を知られるようになる。公開当初より本体価格が4000
円(現在では消費税により購入価格4200円になる)のシェアウェアであるにも関わらず、
人気は高く、企業で一括して導入される場合もある。
●希望する結果
秀丸エディタは最初 OS/2 用に開発され、その後 Windows へ移植された( OS/2 版はフリーソフトウェア )。 Win
dows 3.1 時代より、定番のエディタとして使われてきた。 1995 年に 32bit 対応をした後は、 Windows を代表するエディタ
として広くその名を知られるようになる。公開当初より本体価格が 4000
円(現在では消費税により購入価格 4200 円になる)のシェアウェアであるにも関わらず、
人気は高く、企業で一括して導入される場合もある。
#############################################################################
よろしくお願い申し上げます。
春だなぁ
こうかなし
こうかりんご
青葉りんご
>>988 分かりました。
ありがとうございました。
>>988 せっかく答えてくれた人いるのに後だし条件だした上に自分で調べる気もなさそう、ということで秀丸エディタのスレで拒否られてる
で、秀丸エディタのスレであって正規表現を聞くところじゃないんだって言われて、また正規表現スレで聞けとか言われてる
思わずワロタ
質問者がただいま秀丸スレで暴れてるので引き取りに来ていただけますか?
>>991 このスレなら引き取ってもどうせすぐなくなるからいいんでない?
と言うか何で暴れ出す流れになったの?
回答できない秀丸住人が暴れてるとエスパー
セルフエスパー現る
あと5レス分で良ければ快く引き取ろう。 でも次スレまで持ち越したくはないな。
990の流れの後 お前らに聞いても無駄っぽいから自力で解決したぜ宣言して退場 結果的にスレは荒れたし顰蹙は買ってるが暴れまわってるわけではない
結局 自決したのか。 見に行ってみようかな
998 :
997 :2010/03/21(日) 23:25:44
見てきた。 便乗して荒らすヤツが居て良い荒れっぷりだった。 スレ梅。
スレ梅。
スレ梅。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。