正規表現 Part8

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

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

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

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

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
5デフォルトの名無しさん:2011/03/26(土) 13:27:53.72
6デフォルトの名無しさん:2011/03/27(日) 17:45:43.26
この勢いだとdat落ちしそうだな
7デフォルトの名無しさん:2011/03/27(日) 18:17:41.22
8デフォルトの名無しさん:2011/03/27(日) 19:28:21.14
>>7
perlのってないですかね
9デフォルトの名無しさん:2011/03/30(水) 11:49:01.94
どなたかご教授ください・・・
●正規表現の使用環境
EmEditor

●検索か置換か?
置換

●説明
鍵カッコ内の文字列と前方の文字列を入れ替えたい。

●対象データ
AAA「BBB」/CCC「DDD」/EEE「FFF」…YYY「ZZZ」

●希望する結果
BBB「AAA」/DDD「CCC」/FFF「EEE」…ZZZ「YYY」
10デフォルトの名無しさん:2011/03/30(水) 16:26:48.54
>>9
試してないけど
検索: ([^「」/]+)「([^」]+)」
置換: \2「\1」
11デフォルトの名無しさん:2011/03/31(木) 09:04:29.54
>>10
ありがとうございます!
12デフォルトの名無しさん:2011/04/03(日) 22:46:00.44
●正規表現の使用環境
秀丸(複数行置換)
●検索か置換か?
置換
●説明
上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ
変更したいです。

●対象データ
name=Relative
color=#000000
style=0

●希望する結果
name=Relative
color=#000000
style=2

********************************************
下のようにnameとcolorは値が変わるので.*としているのですが、
置換文の置換時に変更しないという書き方が分かりません。
分かる方おりましたら教えて下さいませ。

[検索条件]
name=.*
color=.*
style=0

[置換文]
name=
color=
style=2
13デフォルトの名無しさん:2011/04/03(日) 23:22:18.38
検索 name=(.*)\ncolor=(.*)\nstyle=0
置換 name=\1\ncolor=\2\nstyle=2
14デフォルトの名無しさん:2011/04/03(日) 23:37:55.17
>>13
無事出来ました、どうもありがとうございます!
15デフォルトの名無しさん:2011/04/07(木) 17:46:48.45
Excelの置換で、
マッチした文字列を、マッチした文字列の最初の一文字で置換したいです。

たとえば、

りんご
ごりら
ぼーる

だと、





に置換したいです。
置換前の正規表現と、置換後の正規表現はどのようにすればよいのでしょうか?
16デフォルトの名無しさん:2011/04/07(木) 18:00:09.97
最近のExcelって正規表現で検索・置換ができるようになったの?
17デフォルトの名無しさん:2011/04/07(木) 18:02:48.07
>>16
アドオンみたいなのでいけるようになります。
18デフォルトの名無しさん:2011/04/07(木) 19:57:20.75
検索 (.).*
置換 \1
19デフォルトの名無しさん:2011/04/10(日) 01:24:00.50
繰り返しの処理は分かるので正規表現の書き方を教えて頂きたいです。
よろしくお願いします。

●正規表現の使用環境
VB.NET2003

●検索か置換か?
検索

●説明
果物の名前を検索したい

●対象データ
箱の色・箱A/緑、箱B/橙、箱C/黄、箱D/赤
箱の中身・箱A/メロン、箱B/みかん、箱C/バナナ、箱D/りんご
箱の大きさ・箱A/100cm、箱B/120cm、箱C/140cm、箱D/160cm

●希望する結果
メロン
みかん
バナナ
りんご

20デフォルトの名無しさん:2011/04/10(日) 01:46:27.24
メロン|みかん|バナナ|りんご
21デフォルトの名無しさん:2011/04/14(木) 23:47:33.90
.replace(/^(http:\/\/[\w-]+\.ggpht\.com\/(?:[\w-]+\/){4})s[\w-]+\/([\w-]+\.[\w-]+)$/, "$1$2")

「%20」や「%26」や2バイト文字を含むURLで動作しないので

例:http://lh5.ggpht.com/_yIvKcqI3wVA/TabN39xH8HI/AAAAAAAADbA/JAurXpYyStQ/s128/open%20mouthed%20scared%20cat.jpg

動作するように、ご教授お願います
22 忍法帖【Lv=23,xxxPT】 【東電 80.1 %】 :2011/04/15(金) 12:38:43.75
23デフォルトの名無しさん:2011/04/15(金) 15:51:46.12
var url = "http://lh5.ggpht.com/.../s128/open%20mouthed%20scared%20cat.jpg";
var elems = url.split(/\//); /* このあたりがそこはかとなくスレの趣旨に合致 */
var filename = elems.pop(); elems.pop(); elems.push(filename);
var new_url = elems.join('/');
24デフォルトの名無しさん:2011/04/16(土) 16:39:05.13
●正規表現の使用環境
C#.Net


●検索か置換か?
検索


●対象データ
data
(data
data)
(data)
Xdata
dataY

●希望する結果
data


dataが()XY以外と隣接している場合は検索を一致させたくないのですが、
それが中々できません。
よろしくお願いします。
2524:2011/04/16(土) 17:12:20.27
すいません、追記です。
dataの部分をグループにまとめたいです
26デフォルトの名無しさん:2011/04/16(土) 20:41:22.03
思いついたのをそのまま書いたらすげー長くなってしまった
((?<=[()XY])data|data(?=[()XY])|(?<=[()XY])data(?=[()XY]))

一番上のdataも含めるなら
((?<=[()XY])data|data(?=[()XY])|(?<=[()XY])data(?=[()XY])|^data$)

追記はよくわからん
27デフォルトの名無しさん:2011/04/16(土) 21:58:05.25
^(data)$
とは違うのか?
28デフォルトの名無しさん:2011/04/16(土) 22:12:13.20
最初はそれかと思った。でも
>()XY以外と隣接している場合は検索を一致させたくない
ということなので()XYに隣接してるdataが引っかかるようにしといた
29デフォルトの名無しさん:2011/04/16(土) 23:02:36.31
皆さんありがとうございます。
現在出先なのでまだ確認できませんが、家に帰ったらやてみようと思います。

>>28
data
(data
dataY

などは一致させたいのですが、

bigdata
などは一致させたくないのです

分かりづらくてすいません
30デフォルトの名無しさん:2011/04/17(日) 13:54:16.70
V2Cとか正規表現を使える2ch専ブラってマジ便利すぎるな。
31 忍法帖【Lv=4,xxxP】 :2011/04/17(日) 16:20:34.48
正規表現でとあるスレの、特定のURLを含まないレスをあぼーんにしたいと考えています
特定のURLは"mt=8"と"hibari"が含まれたURLです
[^(mt=8)(hibari)]
と試しましたが駄目でした。どのようにすればよいのでしょうか?
32デフォルトの名無しさん:2011/04/17(日) 18:00:16.76
mt=8とhibariを含まないURLにマッチでいいんだよね?

^((?<!mt=8).(?!mt=8))*$
^((?<!hibari).(?!hibari))*$

正規表現を複数登録できるならこの2つでいける
なんとか1つにまとめようとしたんだけど無理だったわ。

1つにまとめれる人いたらやり方教えて
33 忍法帖【Lv=4,xxxP】 :2011/04/17(日) 20:43:46.93
>>32
二つを併用しようとしたら全部のレスが消えてしまったのですが、上の
^((?<!mt=8).(?!mt=8))*$
だけでも絶大な効果だったので下のは諦めることにします

有難うございました!
34デフォルトの名無しさん:2011/04/17(日) 20:52:05.01
>>31,32
(Perl正規表現雑技を見ながら)

両方の文字列を共に含まないなら
    ^(?:(?!mt=8.*hibari)(?!hibari.*mt=8).)*$
どちらか一方でも含まないなら
    ^(?:(?!mt=8)(?!hibari).)*$
でいけるっぽい
3532:2011/04/17(日) 21:28:07.66
>>34
量指定子って先後読みには使えないと思ってたけど
使えないのは後読みだけなのか。間違って覚えてた

先後読み両方使うより先読みだけのほうがスマートだな
勉強になった。ありがとう
36 忍法帖【Lv=4,xxxP】 :2011/04/17(日) 23:44:32.70
>>34
おお、下の
^(?:(?!mt=8)(?!hibari).)*$
で望み通りになりました

>>34-35
本当に有難うございます!
3724:2011/04/18(月) 21:16:19.92
>>26
ようやく自宅のPCを付けて確認することができました。
ありがとうございます。
私が望んでいた動きができました!
38デフォルトの名無しさん:2011/04/19(火) 02:20:36.99
>>22-23
[^/]でいけました
ありがとうございましたm(_ _)m
39デフォルトの名無しさん:2011/04/21(木) 21:50:15.99
Windowsなんですが、
C:\work\20110410dsk30.jpg
C:\work\2011419100002.jpg
D:\My Pictures\保存画像\カレイドスター\e2498f54.jpg
D:\My Pictures\保存画像\プリキュア\03cde8e1.jpg
D:\My Pictures\保存画像\プリキュア\10mai458354.jpg
こう言うフルパスからファイル名だけ抜き出したいのですが、「.*\\」とすると最後の10mai458354.jpgだけしか残りません。
どうすれば、1行毎に、行頭からその行の最後の\記号までを指定できるのですか?
40デフォルトの名無しさん:2011/04/21(木) 22:11:05.31
ロゼッタの画像うpしてくれたらがんばって答える

それはともかく使ってる処理系かエディタの名前書いたほうがいいよ
バックスラッシュがややこしい
41デフォルトの名無しさん:2011/04/21(木) 22:15:07.07
ロゼッタって誰?
バックスラッシュがややこしいとは?
42デフォルトの名無しさん:2011/04/21(木) 22:16:47.46
43デフォルトの名無しさん:2011/04/21(木) 22:17:03.21
円記号
44デフォルトの名無しさん:2011/04/21(木) 22:17:49.21
>>43
どう考えてもURLからしてロゼッタストーンです
本当にありがとうございました
45デフォルトの名無しさん:2011/04/21(木) 23:07:35.97
>>42
うーん…
ピリオドが一文字を表してて、その繰り返しだからアスタリスクを使ったんだけど。
[^\n]は、[]の中は先頭が改行じゃ無いって事だとは解るんだけど。
[]で囲むのと、どれかに一致で、先頭が改行の時は除外するって事になるのかな。
最初、ピリオド・アスタリスクとしていたけど、アスタリスクの意味を理解して無かったって事かな?
46デフォルトの名無しさん:2011/04/21(木) 23:29:26.29
アスタリスクの意味はあってるよ
文字クラスの理解が怪しい感じかな
http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE#.E6.96.87.E6.B3.95

ところで>>42で希望通りの動作になった?
47デフォルトの名無しさん:2011/04/21(木) 23:30:45.33
[]で囲っている文字クラス内の^は先頭じゃなくて否定
.は任意の文字で通常は改行は含まれないがオプションなどで動作が変わる
.*は欲張りなマッチとか言われてて、とりあえず取れるとこまで進めてから
バックトラックしながらその後の条件があれば取捨選択していく
48デフォルトの名無しさん:2011/04/21(木) 23:50:00.45
>>46
あ、スミマセン。
実験したのですが、何もヒットしないでした。

使ってる状況なんですが、TeraPadと言うテキストエディタの外部ツールのTpRegExpなんです。

なんか、正規表現が、こんなに方言化してると思わず、状況後出しに成ってるのが、申し訳ないです。
49デフォルトの名無しさん:2011/04/22(金) 00:16:11.73
^が行頭じゃない環境なのか、じゃあこっちで
\f[^\n]*\\

一応リファレンスは調べてみたけど試してはいない。
これでだめだったら、いっそのこと別のエディタにしてしまったほうが楽な気がする

こっちの環境(Mery)だと
.*\\
でも希望通りの動作になるよ
50デフォルトの名無しさん:2011/04/23(土) 05:36:55.82
どうもです。
望んだ動作に成りました。
この外部ツールが曲者なのかな。sakuraエディターだと、.*\\で望みの動作しました。
どうもでした。

毎回呪文を打ち込むのも面倒だなと、VBスクリプトでやろうとしたんだけど、挫折しました。
51デフォルトの名無しさん:2011/04/25(月) 08:30:22.42
///
52デフォルトの名無しさん:2011/05/06(金) 19:40:46.16
PHP の preg に関して質問です。http://www1.axfc.net/uploader/File/so/62486.txt
php 4.4.9 だとマッチしますが、php 5.3.5 だとマッチしません。
何か原因がわかればご教示ください。よろしくお願いします。
53デフォルトの名無しさん:2011/05/06(金) 20:58:11.44
Linux (CentOS) 上の PHP 5.1.6 だとマッチしました。
memory_limit は php5は 128M に、php4 は 32M にしています。
>>52 の OS は WindowsXP Home SP3 です。
54デフォルトの名無しさん:2011/05/06(金) 22:05:22.99
mb入ってんの?
55デフォルトの名無しさん:2011/05/08(日) 11:41:05.08
mbは有効になっています。
一応 php.ini です。 http://www1.axfc.net/uploader/File/so/62697
>>52 の aaaaaaaaa の部分を短くするとマッチします。
なんでかな…
56デフォルトの名無しさん:2011/05/09(月) 17:22:10.19
なんだろうねぇ。
対象の文字列を減らすとマッチするのはこちらでも再現した。
なんだろうねぇ。。。。
57デフォルトの名無しさん:2011/05/09(月) 17:41:43.51
58デフォルトの名無しさん:2011/05/09(月) 17:51:47.67
ありがとうございます。それでした。
pcre.backtrack_limit=200000 で動くようになりました。
59デフォルトの名無しさん:2011/05/09(月) 19:02:42.70
勉強になった。
なるべくその設定を変更せずにすむように心がけよう。
60デフォルトの名無しさん:2011/05/11(水) 09:47:04.06
よろしくお願いします。

●正規表現の使用環境
PHP 5.2.9 (XAMPP 1.7.1)

●検索か置換か?
検索

●説明
入力文字が+、-、数字以外ならエラーを返す

●コード
preg_match("/^[+|-]*\d+$/g", $string)
(1行ごとに処理するので、/mは不要です)

●希望する結果
+100→○
-488→○
1024→○
*300→×
/200→×
Aaaa→×
ああ→×
61デフォルトの名無しさん:2011/05/11(水) 10:06:04.62
[0-9\+\-]

(\+|\-)[0-9]
62デフォルトの名無しさん:2011/05/11(水) 11:11:25.84
>>61
> (\+|\-)[0-9]
こちらを使用しました。意図した通りになりました。
正規表現に関係なく、素直に書いてみることが大事なんだと認識しました。

ありがとうございます。
63デフォルトの名無しさん:2011/05/11(水) 11:13:41.25
A+10 ○
でもいいの?
64デフォルトの名無しさん:2011/05/11(水) 12:38:21.59
突っ込みどころ満載だが
とりあえず (\+|\-) なんて書くくらいなら [\+\-] でいいだろ……

* 小数点や指数表記を考えない
* 最上位の桁が 0 の場合ははじく
* 符号のみの場合もはじく
って感じなら ^[\+\-][1-9]\d*$
65デフォルトの名無しさん:2011/05/11(水) 13:17:27.58
>>62
>> (\+|\-)[0-9]
>こちらを使用しました。意図した通りになりました。
1024 → × になりませんか?
66デフォルトの名無しさん:2011/05/11(水) 13:21:49.74
(\+|\-)?[0-9]+

67デフォルトの名無しさん:2011/05/11(水) 14:11:09.38
回答により実装し、問題が分かってきましたので、本来欲しかった結果と合わせて再度質問します。

●正規表現の使用環境
PHP 5.2.9 (XAMPP 1.7.1)
●検索か置換か?
検索
●説明
入力された文字列のエラーチェックで使用します。
入力文字が+、-、数字以外ならエラーを返します。
●正規表現を確認したサイト
HiFi Regex Tester
http://www.gethifi.com/tools/regex
●コード
if( !preg_match("/^(\+|\-)?[0-9]+$/", $string) ) {
  エラー文生成
}
(1行ごとに処理するので、/mは不要です)
●希望する結果
○:エラーではない、×:エラーとなる

0→○
+0→○
-0→○
+100→○
-488→○
1024→○
/200→×
Aaaa→×
ああ→×
12+1→×
5-10→×
68デフォルトの名無しさん:2011/05/11(水) 14:17:50.19
>67
^[-+]?\d+$
69デフォルトの名無しさん:2011/05/11(水) 15:34:39.84
>>67
希望する結果にならなかった例を挙げない人だよね。
70デフォルトの名無しさん:2011/05/11(水) 15:59:24.60
>>69
情報の小出しになっていることは認めます。
71デフォルトの名無しさん:2011/05/11(水) 23:07:49.36
1→○
01→?
72デフォルトの名無しさん:2011/05/22(日) 14:18:14.06
長い文字列から文字列を抽出したいんだけど、どうすれば簡単ですか?
122ch345673ch89
この文字列から2chと3chの間の文字だけを取得したいです
73デフォルトの名無しさん:2011/05/22(日) 14:25:18.65
正規表現自体は2ch(.+?)3chとかだけど
実際にどう抜き出すかは使ってる言語やツール次第
74デフォルトの名無しさん:2011/05/22(日) 14:32:36.53
>>72
(?<=2ch).*?(?=3ch)
75デフォルトの名無しさん:2011/05/22(日) 14:32:52.41
>>73
VB.NETです
76デフォルトの名無しさん:2011/05/22(日) 14:54:38.68
じゃあC#でも大丈夫だよね
正規表現は>>74のを使わせてもらった

using System;
using System.Text.RegularExpressions;

...
Match m = Regex.Match("122ch345673ch89", @"(?<=2ch).*?(?=3ch)");
Console.WriteLine(m);

34567
77デフォルトの名無しさん:2011/05/22(日) 15:05:07.94
VBじゃないと読めないかもしれない

Imports System.Text.RegularExpressions

Module Module1

 Sub Main()

  Dim m As Match = Regex.Match("122ch345673ch89", "(?<=2ch).*?(?=3ch)")

  If m.Success Then
   '隊長!発見しましたぞ!
   Console.WriteLine(m.Value)
  End If

 End Sub

End Module
78デフォルトの名無しさん:2011/05/22(日) 15:50:24.68
隊長なごんだ。
79デフォルトの名無しさん:2011/05/23(月) 10:39:22.11
aaa=bbb;ccc=ddd;eee=fff

という感じの文字列からcccの値dddを取得したいです。
dddは可変でその部分にはセミコロンとカンマは入ることはありません。
(セミコロンは区切りとしては使いますが値としては使いません。)
cccは最後に書かれてる場合もあり、その場合は、
上記のeee=fffのように最後にセミコロンがつきません。

そこで正規表現なんですが、
ccc=(.*?;|[^;\,]+$)
という感じにしました。
後方参照で()内の部分を取り出したとき、
ccc=ddd;のときは、「ddd;」といった感じにセミコロンつきで取得され、
ccc=dddのときは、「ddd」といった感じにセミコロンなしで取得されます。
ccc=ddd;のときでもセミコロンなしで取得したいのですが、
正規表現のみで可能でしょうか?
80デフォルトの名無しさん:2011/05/23(月) 11:16:21.88
ccc=([^;,]*)
だけじゃだめなのかな?

先読み使えばこう書けるけど
ccc=(.*?(?=;)|[^;,]+$)
81デフォルトの名無しさん:2011/05/23(月) 11:31:28.50
>>80
ありがとうございます!
>ccc=([^;,]*)
これでとることができました。
正規表現難しいです><
82デフォルトの名無しさん:2011/05/23(月) 13:48:15.55
C#で以下のように書いた場合、これってASCIIコードをさすんだよね?
「\x○○」のところ。 

str=@"[^\x00-\x22\x27-\x2D\x3A\-\x3B\x3F\x5B\x5D\x5E\x60\x7B-\x7D\x7F]+" ;
83デフォルトの名無しさん:2011/05/23(月) 13:55:18.15
asciiなら、"[#$%&./0-9<=>@A-Z\\_a-z~]"と同等だね。
84デフォルトの名無しさん:2011/05/24(火) 08:08:29.88
Perl互換表現の\wからアンダースコアをとったものの連続を表現
ようするに[0-9a-zA-Z]+と同等なことをしたいのですが
[\w^_]+とかでは動きませんでした
どう書くのが正しいのでしょうか?
[0-9a-zA-Z]+でもいいのですが後学のために教えてください
85デフォルトの名無しさん:2011/05/24(火) 08:13:54.23
[0-9a-zA-Z]+
8684:2011/05/24(火) 08:17:33.28
すみません自己解決しました
[\w][^_]+でたぶんいけました
スレ汚しすみません
87デフォルトの名無しさん:2011/05/24(火) 08:22:48.26
それ間違ってるよ
場合によっては正しく判定してるように見えることもあるけど
本質的には正しくない
8884:2011/05/24(火) 08:25:36.61
>>87
そうですね
色々値かえて@とか想定外のもの入れたらマッチしてしまいましたorz
89デフォルトの名無しさん:2011/05/24(火) 08:58:22.69
つーかさ、[0-9a-zA-Z]+で完璧に条件満たしてるんだから
それ以外の書き方をしようとするのがそもそもの間違いだ

初心者の頃って、短く書くことが良いことで正しいとか勘違いしてる奴も多いけど
短く書くより分かりやすく書いた方が絶対いいから
まあ[0-9a-zA-Z]+を[a-zA-Z\d]+とするくらいなら、分かりやすさを損なってないからいいけどね

先読み、後読み使えば、\wから_除外したものの連続って表現も出来るけど
この程度のことに先読み、後読み使うなんて余りにも無駄すぎるので、
本当に分かってる奴は[0-9a-zA-Z]+か[a-zA-Z\d]+を使う

とりあえず、メタ文字として用意されているもの以外の文字集合はベタ書き、これ基本な
「5以外の数字」とかも\dから5を除外するのではなく[0-46-9]が一番良い
90デフォルトの名無しさん:2011/05/24(火) 09:43:43.83
>>84
文字クラスのintersection(&&)が使える処理系なら [\w&&[^_]]+
91デフォルトの名無しさん:2011/05/24(火) 10:28:01.22
後学のためっていってるのに説教垂れる奴はなんなんだ
92デフォルトの名無しさん:2011/05/24(火) 11:15:05.61
後学のために、短くまとめることにこだわるより
分かりやすく書いた方が良いというアドバイスをしているのでは?
93デフォルトの名無しさん:2011/05/24(火) 11:25:02.36
ところでa-zA-Z0-9の順番が一般的だけど、
なんで0-9が先にこないのか不思議。
n進数表記でも0からだし、ASCII char codesは0-9A-Za-zの順番だし、
なんか理由とかあるのかな?
94デフォルトの名無しさん:2011/05/24(火) 12:21:01.67
alphanumeric
英数字
95デフォルトの名無しさん:2011/05/24(火) 12:57:46.19
[^\W_]
\Wがあるならこんなふうに書けるけどちょっと分かりづらいよね
96デフォルトの名無しさん:2011/05/24(火) 15:22:48.24
>>95
まさに逆の発想
97デフォルトの名無しさん:2011/05/24(火) 16:51:40.00
読解性って大事だよね。
読解性犠牲にして短くしてもしょーがない。
誰が見ても、人目で何を意味してるか解る、それが一番大事。
98デフォルトの名無しさん:2011/05/24(火) 17:21:52.95
その意見には同意だけど正規表現に限っては難読でもいいわ
そういうもんだし
そもそも読みやすさを求めるなら規約で正規表現禁止にするわ
99デフォルトの名無しさん:2011/05/24(火) 17:51:31.12
> そういうもんだし
君にとってはそうなのかもしれないし、個人的にどう思ってようと勝手だけど
世間的にはそういう認識ばかりじゃないので、主観で断定するのは良くない
100デフォルトの名無しさん:2011/05/24(火) 17:56:10.91
世間的にはそういう認識ばかりだと思いますよ
実際コーディング規約で禁止にしてるところは多い
理由は複雑だから
101デフォルトの名無しさん:2011/05/24(火) 17:58:40.47
そういう奴等は、コンピュータなんて複雑なものには一切かかわらないようにしたほうがいいね。

やめちまえ。
102デフォルトの名無しさん:2011/05/24(火) 17:59:15.17
そうでもないか
103デフォルトの名無しさん:2011/05/24(火) 17:59:25.70
(?#comment) とか x オプションで空白無視させたり、
見やすくする方法は色々あると思うけどな
104デフォルトの名無しさん:2011/05/24(火) 18:44:42.90
\Wは、半角文字(#$%&など)にしかマッチしないことがある
[^a-zA-Z_0-9]だと「いろは」とか「阿伊宇」にもマッチするのに
\Wだと「いろは」とか「阿伊宇」にマッチしない

ということはと思って試してみたら、
[^\W_]+が、「いろはabc阿伊宇」の全体にマッチした
[a-zA-Z0-9]+だと、当然「abc」にしかマッチしないけどね

まあ俺が作ったプログラムではなく、他人が作った物での話だけどね
105デフォルトの名無しさん:2011/05/25(水) 18:14:45.81
正規表現や三項演算子が業務で禁止されてる表向きの理由は複雑だからだけど、
文字列解析やif-else switch文でダラダラ書いたほうが、
コード量を稼げるからという裏向きの理由もあるんだな。
106デフォルトの名無しさん:2011/05/25(水) 20:16:36.23
20年位前ならそうかもね
107デフォルトの名無しさん:2011/05/25(水) 22:37:29.83
>>105
ひどいなそれは…
108デフォルトの名無しさん:2011/05/25(水) 23:22:56.81
こんばんは、質問させてもらいます
マッチさせたい対象文字列が18xgameとあった場合に、
fps18xgameというのがマッチしてしまいます
このfpsという部分だけを除外させてマッチさせるには、どう打ち込めばいいのでしょうか?
pc18xgameとか、エロゲ18xgameとかがあった場合は、マッチさせたいので、この「fps」だけを除外したいのです
どうかよろしくお願いします
109デフォルトの名無しさん:2011/05/25(水) 23:40:59.36
否定後読み
110 忍法帖【Lv=1,xxxP】 :2011/05/26(木) 04:03:00.84
>>109 遅れました。返信ありがとうございます。ルールの名前があると、
探しやすくて助かりました。
111デフォルトの名無しさん:2011/05/26(木) 12:54:22.56
否定後読みの説明があるようなところだと他のもいろいろ載ってていろいろ勉強になると思う
がんばれ
112uy:2011/05/27(金) 17:00:13.06
本気でがんばれば正規表現だけで言語処理系の字句解析部分を書けそうな気がするんだけど
やってる奴いない?
113デフォルトの名無しさん:2011/05/27(金) 17:25:25.97
本気も何も、字句解析をtokenizationの意味で言ってるのだとしたら当然できる。
正規表現ってもともとそこに来歴があるし。
flexのinfoは日本語訳もあるから読んでみたら?
114デフォルトの名無しさん:2011/05/27(金) 17:33:24.61
複雑さによるんじゃない
正規表現は万能じゃないしな
115デフォルトの名無しさん:2011/05/27(金) 17:43:07.30
確かFORTRANがいやらしい。
116デフォルトの名無しさん:2011/05/27(金) 17:45:07.48
(COBOL) ///
117デフォルトの名無しさん:2011/05/27(金) 21:11:38.19
言語処理系の字句解析って、形態素解析のこと?
特徴抽出やかな漢字変換には使えないよ。
形態素解析も正規表現でしたのは手軽だけど問題だらけ〜
118デフォルトの名無しさん:2011/05/27(金) 21:11:40.85
FORTRANやCOBOLにも正規表現あるんか?
どっちももう10年以上は見てないなぁ
119uy:2011/05/27(金) 21:14:08.29
>>113
できるんだ、じゃあこれを正規表現で字句解析かくとどうなる?
#include <stdio.h>
struct A {
int x;
}a;
int main(){
return(0);
}
120デフォルトの名無しさん:2011/05/27(金) 21:14:21.79
COBOLは今でも銀行系で仕事あるんだよね〜
10年単位で拘束される案件なんだけど、興味ある?
121デフォルトの名無しさん:2011/05/28(土) 00:55:28.05
●正規表現の使用環境
Apache RewriteRule

●検索か置換か?
検索

●説明
1〜5つのカンマ区切りの単語を一致させたい
連結数は不定

●対象データ
apple
apple,orange,pineapple,grape,melon
orange,pineapple,melon

●希望する結果
○apple
○orange,pineapple,melon
× ,apple

不定数連結されたパターンに悩んでいます
122デフォルトの名無しさん:2011/05/28(土) 01:02:35.63
^(([^,\n]+),?)+$
123121:2011/05/28(土) 01:12:38.70
>>122
こちらの希望結果が説明不足でした。
せっかくレス下さったのに申し訳ないです。

●希望する結果(追加)
× apple,
△apple,pineapple/peach ・・・ /peachの手前まで一致

五つの単語以外は一致しないようにしたいのです。
お手数おかけします。
124デフォルトの名無しさん:2011/05/28(土) 04:03:59.55
>>121
たかだか4個までのカンマを含むアルファベットならびに
一致するという意味かな?
125デフォルトの名無しさん:2011/05/28(土) 04:16:19.58
先頭と最後はカンマであってはならないという条件も付くか。
126デフォルトの名無しさん:2011/05/28(土) 04:19:01.64
多分カンマが連続してもいけないんだろうな。
127デフォルトの名無しさん:2011/05/28(土) 05:15:52.64
^(\w+)(?:,(\w+)){0,4}$
128デフォルトの名無しさん:2011/05/28(土) 05:17:18.27
> △apple,pineapple/peach ・・・ /peachの手前まで一致
^(\w+)(?:,(\w+)){0,4}
129デフォルトの名無しさん:2011/05/28(土) 05:28:17.49
>>123
> 五つの単語以外は一致しないようにしたい
apple
orange
pineapple
grape
melon
限定でいいのね?重複は許可するの?
否定先読みとか使えれば何とかなりそうだけどどうなんだろ
130デフォルトの名無しさん:2011/05/28(土) 08:52:51.42
5回IF文をかませるとか、
SELECT CASE文で分岐するとか、
そういう実装ではダメなのでしょうか?
131デフォルトの名無しさん:2011/05/28(土) 09:24:11.50
^((apple|orange|pineapple|grape|melon),)*(apple|orange|pineapple|grape|melon)(?!,)

ながい
132デフォルトの名無しさん:2011/05/28(土) 09:27:00.77
エスパー的にこれとみた

[a-zA-Z]+(?:,[a-zA-Z]+){0,4}
133デフォルトの名無しさん:2011/05/28(土) 10:25:47.90
>>131
せっかく長くしても、apple,melonsoda → apple,melonにマッチ
しちゃうから、\bを入れるか(?![,a-zA-Z])にした方が良いのかも
^((apple|orange|pineapple|grape|melon),)*(apple|orange|pineapple|grape|melon)\b(?!,)
^((apple|orange|pineapple|grape|melon),)*(apple|orange|pineapple|grape|melon)(?![,a-zA-Z])
134131:2011/05/28(土) 10:29:24.27
なるほど、気付かんかった
135デフォルトの名無しさん:2011/05/28(土) 12:12:17.95
エロサイトかアフィサイトのアレか
136121:2011/05/28(土) 13:34:52.46
>>124-126
そうです。説明不足しすぎですね・・・

>>129
重複しても問題ないです。

>>130
難しい状況です・・・。
137121:2011/05/28(土) 13:38:50.15
>>128,131,132,133
今、手元に環境がないので確認出来ませんが試してみます
ありがとうございます!!
138デフォルトの名無しさん:2011/05/28(土) 21:05:05.25
>>133
melonsoda、ワラタ センスありますね
139デフォルトの名無しさん:2011/05/31(火) 16:51:50.50
ttp:// が入っていない文章にマッチさせるにはどう書けばいいですか?

POSIX又は拡張POSIXでお願いします
140デフォルトの名無しさん:2011/05/31(火) 20:37:43.77
POSIXはよくわからんけど、とりあえず

^((?!ttp://).)*$
141デフォルトの名無しさん:2011/06/01(水) 00:00:21.37
142デフォルトの名無しさん:2011/06/01(水) 03:30:06.43
>>141
(((((((((([^t]*)*(t+[^t][^t]*)*)*)*(t+[^p][^t]*)*)*)*(t+[^:][^t]*)*)*)*(t+[^/][^t]*)*)*)*(t+[^/][^t]*)*)*

このスレのレス全部あぼーんしたw
143デフォルトの名無しさん:2011/06/01(水) 04:23:56.92
>>142
滅茶苦茶な正規表現力だな
144デフォルトの名無しさん:2011/06/05(日) 05:10:16.10
(本文が長すぎるというメッセージが出るので2つに分けています)

●正規表現の使用環境
ActionScript 3.0

●検索か置換か?
検索

●説明
文字列の先頭が「プラス符号かマイナス符号か数字か」と
末尾が「数字か」でBoolean判定を行いたい。

●対象データ
1.2345  +123.45  -3.1245  青3.1245  3.1245赤

●希望する結果
1.2345→true  +123.45→true  -3.1245 → true  青3.1245→false  3.1245赤→false
145デフォルトの名無しさん:2011/06/05(日) 05:14:14.02
^[-+0-9].*[0-9]$
146144:2011/06/05(日) 05:15:57.11
続き)

試したコードは下記です。
var patt0 = new RegExp("^(\d|[-]|[+])");//先頭部分の判定
var patt1 = new RegExp("\d$");//末尾
if (patt0.test(str0) == true && patt1.test(str0) == true) {
//trueと出力
} else {
//falseと出力
}

最初と最後の文字のみに注目しているのでフラグ("g"など)は無しにして
いますが、上の記述だと 1.2345 でもfalseが出力されます。

どう変えれば良いでしょうか?
因みに、ActionScriptはJavaScriptと同じECMAスクリプトを起源にしています。
(正規表現も共通点が多いようです)
147144:2011/06/05(日) 05:28:11.19
>>145
光の速さでレス有難うございます。
動作OKでした。
148デフォルトの名無しさん:2011/06/09(木) 05:36:32.37
戻り読み条件が、長さ固定でないとダメなのって
なんでなのかな?そんな難しいことなの?
149デフォルトの名無しさん:2011/06/09(木) 09:59:11.59
>>148
何でだろうね。
Perlなら\Kでできるけど。
150デフォルトの名無しさん:2011/06/09(木) 12:17:45.37
>>148
正規表現を実装することを考えればわかると思うけど試行回数がとんでもない数になる
151デフォルトの名無しさん:2011/06/09(木) 17:06:40.09
なんで?
ふたつの正規表現が、並んでるか並んでないかだけの話じゃないの?
152デフォルトの名無しさん:2011/06/09(木) 19:04:29.76
エンジンにもよるだろうけど戻り読みの場合は右から左にマッチさせていくため
バックトラックの回数が多くなって難しいんじゃない
http://practical-scheme.net/wiliki/wiliki.cgi?Rui%3A%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%AE%E6%8B%A1%E5%BC%B5
たしかフクロウ本にも戻り読みの動作について説明されてたと思うから
興味があれば引いてみては
153 忍法帖【Lv=7,xxxP】 :2011/06/09(木) 21:13:43.74
主旨から外れますが、
>>149の言うように「perlは正規表現から始まった」という印象がありますが、
実際、perlは正規表現については今でも特異な地位(優位性)を持っているのでしょうか?

Java、PHPを業務で触ってきましたが、perlはまだなので気になっています。
154デフォルトの名無しさん:2011/06/09(木) 22:03:53.58
>>149言ってないし
155デフォルトの名無しさん:2011/06/09(木) 22:14:09.55
perlに優位性は特にないけど
perl風に実装することにはあるんじゃないかな
156デフォルトの名無しさん:2011/06/10(金) 15:19:21.28
●正規表現の使用環境
PHP 5.1

●検索か置換か?
検索

●説明
角括弧が対応する始点から終点までをすべて抽出したいです。

●対象データ
[[hoge:f1=piyo,f2=fuga]foobar[[hogera:]]baz][[qux:a=xyzzy]]

●希望する結果
ほげ[[hoge:f1=piyo,f2=fuga]ふが[[hogera:]]ぴよ]ほげら[[foo:]ぴよぴよ][[qux:a=xyzzy]]
  1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   2^^^^^^^^^^^^^^^3^^^^^^^^^^^^^^

ご教授よろしくお願いします。
157デフォルトの名無しさん:2011/06/10(金) 15:21:25.44
対象データが誤ってました。すみません。下記の通りです
●対象データ
ほげ[[hoge:f1=piyo,f2=fuga]ふが[[hogera:]]ぴよ]ほげら[[foo:]ぴよぴよ][[qux:a=xyzzy]]
158デフォルトの名無しさん:2011/06/10(金) 15:26:20.46
159デフォルトの名無しさん:2011/06/10(金) 17:59:09.73
括弧の入れ子はイヤズラ
()
160デフォルトの名無しさん:2011/06/10(金) 18:55:08.22
>>156
\[((?>[^[\]]+)|(?R))*\]
161デフォルトの名無しさん:2011/06/11(土) 04:56:57.88
>>159
> 括弧の入れ子はイヤズラ
> <hr>
> ()

になってんだけどどうなってんの?
ノtasukeruyoみたいな。
162デフォルトの名無しさん:2011/06/11(土) 09:27:21.26
忍法帖関係でその時間帯にbbs.cgiの変更やってたせいじゃないかな
163デフォルトの名無しさん:2011/06/11(土) 10:02:14.73
なるほど
d
164デフォルトの名無しさん:2011/06/12(日) 05:57:20.48
javascriptの正規表現って、改行で終わる文字列の終端に行頭がマッチしちゃうのか
変なの
165デフォルトの名無しさん:2011/06/12(日) 21:55:15.07
>>160
報告遅くなりましたがそれでできました!ありがとうございます。
166デフォルトの名無しさん:2011/06/14(火) 19:24:59.26
おしえてください

●正規表現の使用環境
perl

●検索か置換か?
置換


これはどういう置換でしょうか

$salt =~ s/[^\.-z]/\./go;
167デフォルトの名無しさん:2011/06/14(火) 19:42:08.00
166
自己解決しました。
'.'(0x2e)から'z'(0x7a)までの文字以外の文字は'.'(0x2e)にするのですね
168デフォルトの名無しさん:2011/06/15(水) 19:57:29.96
よろしくお願いします

●正規表現の使用環境
PHP

●検索か置換か?
置換

●説明
いくつか連続した\nを、すべて<br />に置換

●対象データ
\n
\n\n\n
(連続数は1〜n)

●希望する結果
<br />
<br /><br /><br />
169デフォルトの名無しさん:2011/06/15(水) 20:00:46.86
それはもうエディタの検索置換機能でいいのではまいか…
170デフォルトの名無しさん:2011/06/15(水) 20:04:53.35
>>169
DB上に入ってる文字列データをHTMLとして出力するのに使いたいんです・・・

171デフォルトの名無しさん:2011/06/15(水) 20:05:26.01
うん、いま気づいた。ごめん
str_replace("\n", "<br />", $src);
172168:2011/06/15(水) 20:19:42.53
提示した条件がちょっと違うようで、
もうちょっと複雑にパターンを考えなきゃいけないようでした。
すぐに説明するのが難しいので一度出直してきます。

お手間取らせて申し訳ないです。
173デフォルトの名無しさん:2011/06/15(水) 20:41:36.48
何故わざわざ「連続」というのかサッパリ分からん。
174デフォルトの名無しさん:2011/06/15(水) 20:52:49.25
PHPならnl2brで良いと思うのだが・・・
175デフォルトの名無しさん:2011/06/15(水) 22:01:34.54
もしかしてこういうことなんかな?w
str_replace('\n', "<br />", $s)
176デフォルトの名無しさん:2011/06/16(木) 22:37:16.72
言語:JAVA
次の例文で、[ ]の部分にひらがなの「ぺ」が27回続く場合にのみマッチする正規表現

  ゆうていみやおうきむこうほりいゆうじとりやまあきら[ ]

処理対象文字
ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺ
ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ
ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ

実行した正規表現
.*ぺ{27}

実行結果
ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ
ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ

何で27回以外の「ぺ」が出力されるのか訳ワカメちゃん
177176:2011/06/16(木) 22:39:33.33
あああああああああああああああああああ
すいません。
そりゃ

.*ぺ

に「ぺ・・・」が含まれるからだよね。

ほんとすいまぺぺぺぺぺぺぺ
178デフォルトの名無しさん:2011/06/16(木) 22:56:49.13
処理対象文字の三番目のが27個だと思ったら違った
ひどいいじめだ
179 忍法帖【Lv=11,xxxPT】 :2011/06/16(木) 23:20:40.01
ロトの剣で我慢しましょう
180デフォルトの名無しさん:2011/06/17(金) 01:19:28.83
巨大なファイルとか、一度に全部変数に読み込みたくない場合
正規表現に途中までマッチしたとか、もうちょっと食わせれば完全に
マッチするとか知ることできれば便利だと思うのですがそのような方法はありますでしょうか?
181デフォルトの名無しさん:2011/06/17(金) 05:08:04.43
> もうちょっと食わせれば完全にマッチする
エスパーな小人をパソコンにいれるとか。
182デフォルトの名無しさん:2011/06/17(金) 07:06:16.71
java.util.regex.MatcherのhitEnd(), requireEnd()とか、PCREのpartial matchingとか?
183デフォルトの名無しさん:2011/06/17(金) 16:27:44.21
●正規表現の使用環境
Visual Basic Script

●検索か置換か?
置換

●説明
タイトルを抜き出して一行目の先頭に書き入れたい

●対象データ
誤爆防止のため、書き込みは移行しました<h1 id="topic_title"><strong><span class="subj">2ちゃんねるたかじんのそこまで言って委員会</span></strong></h1>

1:<strong><span class="name"> </span></strong>
:
<p class="date">2011/04/16 (Sat) 15:38:46</p> </dt>
<dd>
2ちゃんねるマスコミ板スレッド「たかじんのそこまで言って委員会

●希望する結果
2ちゃんねるたかじんのそこまで言って委員会

1: :2011/04/16 (Sat) 15:38:46
2ちゃんねるマスコミ板スレッド「たかじんのそこまで言って委員会
184デフォルトの名無しさん:2011/06/17(金) 20:52:22.93
とりあえずタイトルだけ抜き出し
^.*<.*"topic_title">(<[^>]*>)*([^<]+).*$
\2
185デフォルトの名無しさん:2011/06/17(金) 21:31:35.38
>>184
http://lavianrose.s56.xrea.com/desktop/img/1693.png
http://lavianrose.s56.xrea.com/desktop/img/1692.png
http://lavianrose.s56.xrea.com/desktop/img/1691.png
うまくいきませんでした、もしかしたらこちらで何かミスをしてるかもしれません。
正規表現を少し削ってみたりしたけどこちらの勉強不足で判断できませんでした。
186デフォルトの名無しさん:2011/06/17(金) 21:38:57.91
検索パターン
^.*<.*"topic_title">(<[^>]*>)*([^<]+).*$

置換文字列
\2

これでもダメ?
187デフォルトの名無しさん:2011/06/17(金) 22:23:44.19
>>186
VBscript内で
repText5 = "\2"
objRep.Pattern = "^.*<.*"topic_title">(<[^>]*>)*([^<]+).*$" ←---★
newText = objRep.replace(newText, repText5)
objFile.Close
' 書き込み
Set objFile = objFSO.CreateTextFile(var1,2,false)
objFile.WriteLine (newText)

って正規表現入れたんですが★の行でステートメントの末尾が不正です。
と、恐らくダブルクォート関連のエラーがでてしまって
実際のプログラム上ではどう動くかまだ実験できてないんです、すみません。
str ="^.*<.*"topic_title">(<[^>]*>)*([^<]+).*$"
objRep.Pattern = str
とかもしてみたんですけど、ちょっと時間掛かりそうです
188デフォルトの名無しさん:2011/06/17(金) 22:40:43.32
>>187
objRep.Pattern = "^.*<.*""topic_title"">(<[^>]*>)*([^<]+).*$"
189デフォルトの名無しさん:2011/06/17(金) 23:20:38.04
>>188
--------------結果---------------------------
\2

1:<strong><span class="name"> </span></strong>
:
<p class="date">2011/04/16 (Sat) 15:38:46</p> </dt>
<dd>
2ちゃんねるマスコミ板スレッド「たかじんのそこまで言って委員会
--------------ここまで---------------------------
まだよくわかってないんですが
もしかして、\2のところにタイトル文の
2ちゃんねるたかじんのそこまで言って委員会
は代入されないですか?
190デフォルトの名無しさん:2011/06/18(土) 00:04:08.75
\2じゃなくて$2じゃね?
191デフォルトの名無しさん:2011/06/18(土) 00:14:58.63
>>190
うおおおおおおお
すごいいいいいい
正規表現って変数に入れられるんですね
うまくいきました!
ありがとうございました!
192デフォルトの名無しさん:2011/06/18(土) 19:08:41.62
https://github.com/k-takata/Onigmo
Onigmo is a regular expressions library forked from Oniguruma.
だそうだ。perlの名前参照とか\R,\Kなどが使えるようになってるっぽい。
193デフォルトの名無しさん:2011/06/20(月) 00:12:52.55
正規表現がいまいち苦手だ。
194 忍法帖【Lv=13,xxxPT】 :2011/06/20(月) 01:05:13.35
test
195デフォルトの名無しさん:2011/06/20(月) 06:38:00.21
>>192
鬼車の開発がRuby作者との揉め事以降、止まってたから
開発を引き継ぐ人が現れたには大きいね

ところで\Rや\Kってどういうメタ文字なの?
Googleは記号や大文字が検索できないからググってもよくわからないんだ
196デフォルトの名無しさん:2011/06/20(月) 06:49:41.88
perlの正規表現はperlreでググればよい。
http://perldoc.perl.org/perlre.html 最新(5.14)英語版
日本語訳の最新版は5.9.5か?
\RはCRLFを含めた改行1つにマッチ。
\Kは戻り読みとほぼ同等。ただし可変長が使える。
197デフォルトの名無しさん:2011/06/20(月) 09:54:21.05
>>195
Rubyと揉めてたのって2007年頃では?
鬼車の最終更新は2010/01/09
198デフォルトの名無しさん:2011/06/20(月) 10:22:41.55
正規表現ってすげぇ難しいよな
どっかに例題つきのわかりやすいサイトとかってないのかな
2chのdatファイル整形とか掲示板のhtml整形とかやりたいんだけど
例えば<br>か</br>までとか複数細かくやりたいときとか多くて勉強したいんだよな、興味深いし
199デフォルトの名無しさん:2011/06/20(月) 11:42:16.31
サイトは腐るほどあるけど、正規表現の実装も沢山あってどのサイトを見ていいか解らん
200デフォルトの名無しさん:2011/06/20(月) 14:33:01.04
●正規表現の使用環境
VBScript

●検索か置換か?
検索

●説明
http://upload.jpn.ph/500/bin/とんこつ.zip
だけを変数に入れて、後で変数を利用したい

●対象データ
</style>

<META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://upload.jpn.ph/500/bin/とんこつ.zip">
</HEAD>

●希望する結果
適当な変数=http://upload.jpn.ph/500/bin/とんこつ.zip
例:もし変数 var5 とかにとんこつ.zipを代入できるなら
WScript.Echo var5
としたときにhttp://upload.jpn.ph/500/bin/とんこつ.zip
と出力できるようにしたいです。

もし上手く説明できてなかったらごめんなさい。
よろしくお願いします。
201デフォルトの名無しさん:2011/06/20(月) 14:36:34.81
正規表現でがんばるよりXMLとしてスクレイピング可能なら、
素直にスクレイピングしたほうがいいように思うけどねぇ。
202デフォルトの名無しさん:2011/06/20(月) 15:06:12.81
自分では
(http:\/\/[\x21-\x7e]+)
で抜き出してみたんだけど、そうすると
"> まで$1に変数としてはいっちゃうんだ
203デフォルトの名無しさん:2011/06/20(月) 15:50:58.65
>>202
ウソつけ
それじゃ対象データに対して取得できるのは
http://upload.jpn.ph/500/bin/
までだろ
とんこつ.zipが入らん
(http:\/\/[^"]+) とでもしとけ
VBSだと " → "" か \x22
204デフォルトの名無しさん:2011/06/20(月) 15:57:52.77
>>203
すごいです!
ありがとうございます。
今回のでもの凄く正規表現の参考になりました!
205デフォルトの名無しさん:2011/06/20(月) 18:27:04.93
>>201
質問内容からして、厳密なマッチは望んでないんでね?
URLだって本来はRFCの定義までさかのぼって考える必要があるものだが
自作ツールなら多少適当でも十分役立つことが多いし
206デフォルトの名無しさん:2011/06/20(月) 21:58:58.58
>>197
鬼車の開発は実質2007年に止まったようなものだよ。
207デフォルトの名無しさん:2011/06/20(月) 23:33:30.26
>>198
定番だがいろいろなサイト回るよりフクロウ本買って読んだほうが手っ取り早い
それなりの大学図書館なら置いてあるからお金が無いなら借りるって手もある
208デフォルトの名無しさん:2011/06/20(月) 23:42:21.14
フクロウ本を読んだら

プログラマの危ない会話
http://hibari.2ch.net/test/read.cgi/prog/1169899012/

で、正規表現ネタを一発かます

これで一人前
209デフォルトの名無しさん:2011/06/21(火) 00:25:48.31
>>207
大学図書館って誰でも入れるの?
210デフォルトの名無しさん:2011/06/21(火) 00:31:31.50
入れるところの方が多いんじゃね?
211デフォルトの名無しさん:2011/06/21(火) 00:41:06.85
ネットの国会図書館で見られるやつにしてよ
212デフォルトの名無しさん:2011/06/21(火) 00:43:08.68
学歴とか年齢とか風貌とか関係なく?
入り口の守衛のとこで身分証明証が必要だったり記入したりする事無いの?
一度大学ってものを見学してみたい。
213デフォルトの名無しさん:2011/06/21(火) 01:08:46.20
うわ、高卒乙
214デフォルトの名無しさん:2011/06/21(火) 02:21:15.61
俺が学生だった頃は、徒歩で入ってくる奴は誰でもわからんかったけど
今は学生証はICカードだし、監視カメラで顔識別・虹彩認証されて
関係のない人間はレーザーで焼き殺されるから、気をつけろよ>>212
215デフォルトの名無しさん:2011/06/21(火) 02:35:49.32
>>213
中卒……。

>>214
レーザーでローストされるのは嫌だ
やっぱ行くのやめとく
216uy ◆yyC0rYWEq2 :2011/06/21(火) 04:57:05.12
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙うわ、中卒乙
うわ、中卒乙うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
うわ、中卒乙
217デフォルトの名無しさん:2011/06/21(火) 07:04:27.15
国公立はたいてい自由に使える(だいたい入り口で名前と目的を書かされる、ぐらい。
「研究」と書けばおk)。私立だとダメだったり地元民に限ってたりすることも多くて、
自分の所属機関か地元の図書館からの一筆を要求されたりする。

あと図書館とは関係なく大学の出入りは最近チェックがやかましいので、
入構するときに持たされる確認証を図書館でチェックされることがあるので、
無理して潜り込もうとしないほうが無難。
218デフォルトの名無しさん:2011/06/21(火) 07:05:45.66
あー、自由と言っても閉架への立ち入りとか計算機の利用とかは制限あるかも。
219デフォルトの名無しさん:2011/06/21(火) 18:36:48.13
うちの大学図書館は学生しか立ち入れない部屋とかはあるけど一般にも公開していたかな
今はどうか知らんが通ってた頃は学食とかにリーマンとかも混ざって食事していた
220デフォルトの名無しさん:2011/06/24(金) 23:27:08.46
●正規表現の使用環境
grepとかegrepとか

●検索か置換か?
検索

●説明
a,nの2文字のみが含まれる行を検索したい

●対象データ
aaa
ann
nana
anana
sin
anans

●希望する結果
上4つのみ出力
下二つは引っかからない
221デフォルトの名無しさん:2011/06/24(金) 23:33:00.00
^[an]+$
222デフォルトの名無しさん:2011/06/24(金) 23:38:03.82
>>221
ありがとうございます
できました
223デフォルトの名無しさん:2011/06/28(火) 22:21:04.59
●正規表現の使用環境
jane?

●検索か置換か?
置換

●説明
文字レスを排除したい


http://kamome.2ch.net/test/read.cgi/kao/1305395856/
このスレの文字レスのみを排除してAAだけを表示させる事は出来ますでしょうか?
224デフォルトの名無しさん:2011/06/28(火) 23:40:45.09
これは正規表現に対する挑戦なのであろうか

それはともかく、AAかわいいね
225デフォルトの名無しさん:2011/06/28(火) 23:42:57.50
ズバリ、無理でしょう。
多少の誤爆覚悟で、1〜3行のレスを排除する、くらいか。
226デフォルトの名無しさん:2011/06/29(水) 00:10:46.88
お題もスレ趣旨も棚上げするけど
そのスレの332の本文でレス抽出すれば割りと希望の状態になるはず。
227デフォルトの名無しさん:2011/06/29(水) 00:19:07.06
"  |  " だな
228デフォルトの名無しさん:2011/06/29(水) 00:21:13.83
それだけで一つのテーマになりそうなお題
ベイジアンフィルタとか使ってみるか?w
229223:2011/06/29(水) 00:46:23.81
皆様レスありがとうございます!
うーんやっぱり難しいというか、こりゃ無理ですねw(汗

ただ、全角スペース3個並びを抽出したり
"  |  "を抽出する、でかなり理想通りになりました
アドバイスありがとうございました!
230デフォルトの名無しさん:2011/06/29(水) 07:56:09.29
231デフォルトの名無しさん:2011/06/29(水) 16:36:55.29
<(.*)>を取得したいのですが
<aiueo>
<aiueo<kakikukeko>
これはaiueo kakikukekoの2つを取得したいのですが
このままだと
aiueoとaiueo<kakikukekoが取得されてしまいます
どうしたらいいでしょうか?
232デフォルトの名無しさん:2011/06/29(水) 16:50:07.50
<([^<]+)>

* のほうが都合よければそっちで。
233231:2011/06/29(水) 17:12:48.09
ありがとうございます!
動きました
意味が分からないので調べタイと思います
234天使 ◆uL5esZLBSE :2011/07/06(水) 02:51:45.56
-----
[[[[[ <(.*)>を取得したいのですが ]]]]](キリッ!キリッッ!!!!キリッッッ!!!!
----
[[[[[[[ <aiueo<kakikukeko> ]]]]]]](キリッッ
----
[[[[[[ これはaiueo kakikukekoの2つを取得したいのですが ]]]]]](キリ!!!!キリッッッッ!!!!キリきリッッ!!!キリッ
--
[[[[[[[ aiueoとaiueo<kakikukekoが取得されてしまいます ]]]]]]](キリッッッッ!!キリッッッ!キリキリッ
----
[[[[[[[[ どうしたらいいでしょうか? ]]]]]]]](キリッッッ!キリッッッッ!キリッッッッ!!
---------------(キリ
235デフォルトの名無しさん:2011/07/06(水) 08:24:21.91
引用してるつもりなのかな
236デフォルトの名無しさん:2011/07/06(水) 21:09:55.97
英数字プラスセミコロンはとれるのですが英数字の桁数が{3}をつけてもうまくいかず悩んでいます。


●正規表現の使用環境
VBA

●検索か置換か?
検索

●説明
対象データのフォーマットチェックをしたいです

A01;B02;C03;…
英数字3桁がセミコロンで区切られたデータに対して様式通りならtrueを返します
一番最後にはセミコロンはつきません

●対象データと希望する結果
A01;B02;C03 →true
A01;B02;C03; →false
A01;B092;C03 →false
237デフォルトの名無しさん:2011/07/06(水) 21:18:35.73
([A-Z]\d\d;)*[A-Z]\d\d でどうだろう
238デフォルトの名無しさん:2011/07/06(水) 21:32:14.23
ええと、セミコロン以外は半角英数字3文字なので、
901;B02;C3J
といったものでもtrueにしたいのです。
239デフォルトの名無しさん:2011/07/06(水) 22:03:51.96
^([a-zA-Z0-9]{3};)*([a-zA-Z0-9]{3})$

ながい
半角英数で一文字で表現できたっけ?
240デフォルトの名無しさん:2011/07/06(水) 22:06:45.25
×半角英数で一文字で表現できたっけ?
○半角英数って一文字で表現できたっけ?
241デフォルトの名無しさん:2011/07/06(水) 22:07:41.42
\wは_が入っちゃうからなあ
[:alnum]とかないことはないけど使ったことが無い
242デフォルトの名無しさん:2011/07/06(水) 22:16:09.56
後半のカッコ削って [0-9] を \d にして別クチで IgnoreCase にするぐらいかな。
\w は指摘出てるし環境的に [:alnum:] も使えないみたい。
243236:2011/07/06(水) 22:27:43.30
即レス有難うございます。
([a-z0-9]{3};)*([a-z0-9]{3})と考えていたんですがこれだと
001;002;003;0084でもTrueになってしまって困っていました。
^$入れると変わるんですね。。。
244デフォルトの名無しさん:2011/07/08(金) 15:07:14.12
よろしくお願いします。

●正規表現の使用環境
JavaScript

●検索か置換か?
検索

●説明
xという文字から、xという文字までの取得
ただしyxというパターンが含まれている場合は飛ばして、次のxを探す
x((?!yx).)*xを試しましたが、途中で検索が打ち切られて思うようになりません

●対象データ
"ab\"c",'def'

●希望する結果
"ab\"c"
245244:2011/07/08(金) 15:09:19.28
すみません追記です
検索表現にgをつけて使用します
while(a = /reg/g.exec(str))〜のようにして
246デフォルトの名無しさん:2011/07/08(金) 16:51:20.14
C++ boost の正規表現なのですが、質問です。
hoge="3"
fuga="5"
という文字列があったとき".*"でマッチしたところ、"3","5"という結果でした
サルにもわかる正規表現入門では、.*というのは、可能な限り合致するものまで繋がる
と書いてあったので、"3"fuga="5"とマッチされる気がするのですが、
なぜこうなるのでしょうか?
247デフォルトの名無しさん:2011/07/08(金) 16:58:00.90
ドットは改行にはマッチしないからじゃまいか
外してるなら周辺コードも貼ると答えやすい
248デフォルトの名無しさん:2011/07/08(金) 17:41:26.86
>>246
match_not_dot_newline
249246:2011/07/08(金) 18:24:28.65
なるほど・・・改行か、調べが甘かったです。確かに改行のせいでした。

247-248さん
ありがとうございました。
250デフォルトの名無しさん:2011/07/08(金) 21:24:59.44
>>244
x.*(?<!y)x

x.*?(?<!y)x

javascriptはわからん
251デフォルトの名無しさん:2011/07/08(金) 22:29:59.64
>>244

"(.*[^\\])?"
252デフォルトの名無しさん:2011/07/08(金) 23:48:40.84
>>244
エスケープありのダブルクォート文字列: "(?:\\.|[^\\"])*"
さらに改行のエスケープも認めない: "(?:\\.|[^\\"\n])*"
253デフォルトの名無しさん:2011/07/09(土) 00:29:29.23
>>244
"(.*?[^\\])?"
254244:2011/07/09(土) 02:56:37.06
>>250-253
回答ありがとうございました
試してみた結果、x.*(?<!y)xはjs非対応っぽいです
"(.*?[^\\])?"だと、"abc" + "def"という表現を全部取得しちゃう(これは>>244の例が悪かったです。すみません。"でくくった文字列を取得したいと書けばよかった)
"(?:\\.|[^\\"])*"は望みの動作でした。\\.で、エスケープされた文字を表現するんですね
255デフォルトの名無しさん:2011/07/10(日) 01:39:13.22
質問失礼します。
http://stocks.finance.yahoo.co.jp/stocks/history/?code=9984.T
.
.
.
<td>2011年6月30日</td>
<td>3,010</td>
<td>3,050</td>
<td>2,986</td>
<td>3,030</td>
<td>8,376,600</td>
<td>3,030</td>
.
.
このページのソースから正規表現で、下記のように日付と株価の部分だけ抜き出すにはどうしたらよいでしょうか?
2011年6月30日
3,010
3,050
2,986
3,030
8,376,600
3,030
.
.
.
.

言語はRubyで、([^<>]+)などで色々やってみましたが、どうにもうまく抜き出せません。
また、webのHTMLから、正規表現である程度特定して文字列を抜き出し、
その特定して抜き出した文字列に再度正規表現で、文字列を特定していくという
方法は可能でしょうか?
よろしくお願いします。
256255です。:2011/07/10(日) 01:44:18.09
よろしくお願いします。
●正規表現の使用環境
Ruby
●検索か置換か?
検索
●説明
株価のみを抜出し、DBに入れていく予定でいます。
●対象データ
http://stocks.finance.yahoo.co.jp/stocks/history/?code=9984.T
のソースから

●希望する結果
2011年6月30日
3,010
3,050
2,986
3,030
8,376,600
3,030
.
.
.
日付、始値、高値、安値、終値、出来高、調整後終値
です。
257デフォルトの名無しさん:2011/07/10(日) 02:05:48.29
^</tr><tr>\n((^<td>.*</td>\n){7})
\1
で一塊ずつ抜き出して、

^<td>(.*)</td>$
\1
でさらに中身の抜き出し
258255:2011/07/10(日) 02:39:16.37
>>257
ありがとうございます。
しかしながら、うまくいきませんでした。自分はwindowsを使っていますが、プログラム初心者なので
うまく理解できていない部分がたくさんある可能性が高いので一つ一つ分解して勉強させてもらいます。
259デフォルトの名無しさん:2011/07/10(日) 02:52:28.77
株価が取り出せれば良いなら、Rubyや正規表現に拘らなくて良いじゃん。
どの言語でも良いけどループ使えば簡単だし。
260255:2011/07/10(日) 03:06:58.57
>>259
ありがとうございます。まだ、Rubyとjava以外ほとんどさわったことがないです。
毎日の株価を自動で取得したり、過去の株価データ10年分、全銘柄をDBにいれて、ストラテジーをバックテストできる環境を作ろうと思いまして
javaなどをやってみたりしたんですが、プログラミングがむずかしくてうまくいかず、一番しっくりきたのがRubyでした。
株価ですが、ある程度期間がたつとwebのHTML形式が細かく変わっていくので正規表現を覚えてwebからスクレイピングしていくのが一番良いと判断しました。
まだ、株価を綺麗に抜き出す段階で苦労しています。
261デフォルトの名無しさん:2011/07/10(日) 23:28:05.15
>>260
正規表現じゃなくて、XMLパーサ使ったほうが簡単だよ。Nokogiriをつかえば、

# coding: utf-8
require 'open-uri'
# require 'rubygems' # 1.8系では必要
require 'nokogiri'
Nokogiri(open('http://stocks.finance.yahoo.co.jp/stocks/history/?code=9984.T').read)\
.search('table.boardFin tr').map{|e| e.children.map(&:content).reject{|ee| ee == "\n"}}
# => [["日付", "始値", "高値", "安値", "終値", "出来高", "調整後終値*"], ["2011年7月8日", "3,190", "3,190", "3,105", "3,110", "6,151,100", "3,110"], ...
262255:2011/07/12(火) 22:21:39.52
>>261
ありがとうございます。やりたいことが完璧にできました。
感謝です。
263デフォルトの名無しさん:2011/07/13(水) 02:16:06.17
●正規表現の使用環境
Boost.Regex
●検索か置換か?
検索

●説明
文字列の要素を抜き出したい

●対象データ
[push x ='100' y= '200' name = 'aaa']
[ins x = '100' y='200' z='300' name='ppp']
●希望する結果
push
x
100
y 200
name aaa
-------------------
ins
x
100
y
200
z
300
name
ppp

\\[(\\w+) +(\\w+) *= *'(.*)' +(\\w+) *= *'(.*)' +(\\w+) *= *'(.*)'\\]
で、あらかじめ要素数が決まっていれば可能なのですが、
[A B='C' ...] と要素数が不定な数ある場合どうすればいいでしょうか?
264 忍法帖【Lv=21,xxxPT】 【東電 55.8 %】 :2011/07/13(水) 03:06:31.07
Boost.Regex知らないからNCNRでお願いします
標準的正規表現で
[^\[\s='\]]+
これをグローバルマッチさせればいいんでないの
ただし、クオーテーション内に[]\s=は使用不可
イテレータとか違うのかな
265デフォルトの名無しさん:2011/07/13(水) 05:45:12.43
>>263
例えば、一行目の
name aaa と
二行目の
x
100
の差が何によって起こるのかわからない。
オペレータ '=' と左右の空白は同一の
形式だと思うが。
266デフォルトの名無しさん:2011/07/13(水) 06:45:58.05
●正規表現の使用環境
PHP 5.2.5

●検索か置換か?
置換

●説明
<a>でリンクされていないURLだけをリンクしたい

●対象データ
<a href='http://aaaaaa/aaa'>http://aaaaaa/aaa</a>
<a href='http://aaaaaa/aaa'>bbb</a>
http://aaaaaa/aaa
http://aaaaaa/aaa

(httpの前に改行は無いです)

●希望する結果

<a href="http://aaaaaa/aaa">http://aaaaaa/aaa</a>
<a href="http://aaaaaa/aaa">bbb</a>
<a href="http://aaaaaa/aaa">http://aaaaaa/aaa</a>
<a href="http://aaaaaa/aaa">http://aaaaaa/aaa</a>


↓これではダメでした。。
/((?![\"\'>])(https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)(?![\"\'<]))/

267デフォルトの名無しさん:2011/07/13(水) 06:59:17.97
>>263
while や for で何度もマッチさせるんだよ
268。 ◆oDupeixhZv52 :2011/07/14(木) 09:10:15.15
>>266
/((?<![\"\'>])(htt〜
269デフォルトの名無しさん:2011/07/15(金) 03:48:07.73
>>268
エラーになってしまいます

[^\=\"\'>](https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
これでできたので、とりあえず書いてみます。
270デフォルトの名無しさん:2011/07/18(月) 07:06:17.74
いつもお世話になっております。
>>261
この ('table.boardFin tr')というのは、Xpath、正規表現、またはnokogiri専用の表記のうち
どれにあたるのでしょうか?ぐぐってみても見つからずどうやって、この辺の表記の仕方を勉強すればよいでしょうか?
271デフォルトの名無しさん:2011/07/18(月) 10:07:57.66
>>270
rubyは触ったことないけど、そのいずれにも当てはまらなくね?
どう見てもCSSセレクタの表記にしか見えない
272デフォルトの名無しさん:2011/07/19(火) 03:05:23.86
>>270
>>271の言うとおりただのCSSセレクタ
意味は「クラス属性のひとつがboardFinのtable要素 の 子孫要素 の tr要素」
id属性だけで特定できるならxpathが簡単だけど、クラス属性を使わないと特定できないなら
属性を簡潔に書けるCSSセレクタの方が好きかな。
Nokogiriはどっちにも対応してるし、ちゃんぽんにしても書けるみたい。
273270:2011/07/19(火) 19:57:43.31
>>271>>272
ありがとうございます。CSSセレクタ勉強します。
274270:2011/07/20(水) 00:30:34.52
>>272
重ね重ね申し訳ないのですが、

map{|e| e.children.map(&:content).reject{|ee| ee == "\n"}}について

.reject{|ee| ee == "\n"}これは、改行の\nを取り除くということは、わかったのですが

.map{|e| e.children.map(&:content)

はchilderenの中の数字の部分を取り出すという意味だとおもうのですが
&:content ここの部分がどこを指すのか、わかりませんでした。

HTMLソースの<meta http-equiv="Content-Type" content="text/html; charset=utf-8">に
contentという文字を見つけたのでここ由来でテキスト表記を取り出すという意味なのかなと考えて
いますが、あっていますでしょうか?
また&:はどういう意味で下記で言えばどこの部分になるのでしょうか?

[#<Nokogiri::XML::Element:0x1def1d8 name="td" children=[#<Nokogiri::XML::Element:0x1def1d8 name="td" children=[#<
1def156 "2011\345\271\2647\346\234\21019\346\227\245">]>,#<Nkogiri::XML::Text:0x1db3f84 "\n">

よろしくお願いします。
275デフォルトの名無しさん:2011/07/20(水) 00:33:39.01
なぜそれを正規表現スレで聞く
276270:2011/07/20(水) 00:59:54.16
>>275
申し訳ないです。
最初は正規表現で抜き出そうとしていたのですが、XMLパーサーの方がよいというアドバイスをうけ質問を続けてしまいました。
あと、272さんに是非聞いてみたくて、これを最後にここでのXMLパーサーの質問はやめます。
277デフォルトの名無しさん:2011/07/20(水) 03:11:53.36
>>274
contentはNokogiri::XML::Nodeクラスのメソッドでノード(要素)の中身(文字列or nil)を取り出す。
enum.map(&:meth)はenum.map{|e| e.meth}の簡略表記。
スクレイピングはライブラハックみたいな事件もあるから注意してやってね。
これ以降はRubyスレで。
278255:2011/07/20(水) 04:38:35.98
>>277
大変ありがとうございます。勉強になりました。
ライブラハックぐぐってみました、自分が買ったシステムトレードの本にも
アクセスは10秒に一回程度にしてと書いてありましたし、人様に迷惑のかからない範囲で
最新の注意を払ってやります。
279デフォルトの名無しさん:2011/08/03(水) 12:40:03.46
●正規表現の使用環境
C# 4.0

●検索か置換か?
置換です

●説明
HTMLファイルのソースコードの
<script type="text/javascript">〜省略〜</script>
scriptタグ開始を含めてscriptタグ終了タグまでを消去したいんです

●対象データ
<script type="text/javascript">
<!--
// 〜コメント〜
内容
// -->
</script>

<script type="text/javascript" src="script.js"></script>

上記のどちらも以下のものでやったのですが、どうもヒットしません
<script\s[a-zA-Z0-9<>()-\.!_~*,;/:@&=+$,%#'""]+>[a-zA-Z0-9<>()-\.!_~*,;/:@&=+$,%#]+\</script>

解答よろしくお願いします
280デフォルトの名無しさん:2011/08/03(水) 16:06:12.44
C#分からんけど、こんなのでどう?
<script\s[\s\S]*?<\/script>
281デフォルトの名無しさん:2011/08/03(水) 18:56:01.78
>>279
DOMで消したほうが確実ではないか?
属性としてもJavaScriptとかつけれるわけだし
282デフォルトの名無しさん:2011/08/05(金) 22:49:53.78
○ds
○nds
○gameds
○gamends
×legends
検索したときに、○だけヒットさせるにはどうすればいいか教えてください
283デフォルトの名無しさん:2011/08/05(金) 22:56:39.12
ds|nds|gameds|gamends
284デフォルトの名無しさん:2011/08/05(金) 23:31:06.88
(?<!legen)ds
285デフォルトの名無しさん:2011/08/05(金) 23:33:12.65
(game)?n?ds
286デフォルトの名無しさん:2011/08/05(金) 23:50:06.43
\b(ds|nds|gameds|gamends)\b
287デフォルトの名無しさん:2011/08/06(土) 00:25:08.04
○(?=ds|nds|gameds|gamends)
288デフォルトの名無しさん:2011/08/06(土) 00:56:27.17
たくさんの回答ありがとうございます
うまくできました
289デフォルトの名無しさん:2011/08/06(土) 01:04:00.57
どれでうまくできたんだよ
毎度のことだけどヤレヤレだな
290デフォルトの名無しさん:2011/08/07(日) 03:15:33.89
●正規表現の使用環境
Emacs Lisp

●検索か置換か?
検索

●説明
C++などでよく使われる構文にマッチさせたい。
具体的にはクラスインスタンスへのアクセスアローやドットにマッチさせたい。

●対象データ

class A;
A a;
A* a_ref = &a;

a.m_hoge;
a->m_hoge;

●希望する結果
これにマッチさせる場合
"\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z0-9][_a-zA-Z0-9]*\\)?\\)\\="
が正解らしいですが
なぜ正解かわからない部分があるので教えてください。
まず"?"演算子の使い方ですが・・・直前の文字列(空文字込み)にマッチさせるために置いてあるとして
直後の ":"が理解不能です。
後半でも、":"が出てきますがこれも不可解。名前空間の"::"などにマッチさせたいのであれば
::や:?:とかならわかるのですが・・



291デフォルトの名無しさん:2011/08/07(日) 04:32:22.75
>>290
> 直前の文字列(空文字込み)にマッチさせるために置いてあるとして
?の後ろの文字(列)で意味が変わってくるんですよ
とりあえず、>>2のサイトを?:で検索してみて
292デフォルトの名無しさん:2011/08/07(日) 13:44:09.10
>>290
(?:pattern) は変数にキャプチャしない
293デフォルトの名無しさん:2011/08/07(日) 23:22:49.99
●正規表現の使用環境
LINUX grepコマンド

●検索か置換か?
検索

●説明
ドットで行に一文字追加されたもののみ検索したい

●対象データ
ABC
ABCD
ABCDE

●希望する結果
ABCD

grep ABC. sample.txtとしても
結果 2文字追加されているABCDEまで出てきてしまいます。。。
ドットは一文字と習ったのですが、
なぜなのかわかりません・・。
294デフォルトの名無しさん:2011/08/08(月) 00:39:46.75
^ABCD.$
295デフォルトの名無しさん:2011/08/08(月) 00:51:07.33
>>291
> > 直前の文字列(空文字込み)にマッチさせるために置いてあるとして
> ?の後ろの文字(列)で意味が変わってくるんですよ
> とりあえず、>>2のサイトを?:で検索してみて

>>292
>(?:pattern) は変数にキャプチャしない

>>2で調べて解決しました。
正規表現はマッチング程度しかつかってなかったので
後方参照とかあまり考えたことなかったですね。
?:をつかっていた解答はパフォーマンス等を気にしていたのかな・・・。
いろいろ勉強になりました。ありがとう。


296デフォルトの名無しさん:2011/08/08(月) 01:01:24.59
>>294
Dが余計
297デフォルトの名無しさん:2011/08/12(金) 16:27:24.00
お願いします

●正規表現の使用環境
Hex Editor Neo

●検索か置換か?
検索

●説明
1文字目と3文字目が同じで、2文字と目と4文字目が同じの4文字の文字

●対象データ
ABAB
PAPA
0101
298デフォルトの名無しさん:2011/08/12(金) 16:35:50.95
>>297
(.)((?!\1).)\1\2
299デフォルトの名無しさん:2011/08/12(金) 20:35:16.89
1文字目≠2文字目 は別に条件に入ってなくね?
300デフォルトの名無しさん:2011/08/12(金) 22:51:52.90
んだんだ
301297:2011/08/12(金) 23:36:38.97
>>298
ありがとうございました。
目的のデータを探す手がかりが出来ました。
ヒットが多いので応用して絞り込みます。
\1を否定しているところがよく解らないので、ここを勉強してみます。

御世話になりました。
302デフォルトの名無しさん:2011/08/13(土) 14:26:16.55
>>299
実は入ってる

まあ、説明で「1文字目と2文字目は別文字とする」と明確に書くのが一番だが
その説明が無い場合、というか「1文字目と2文字目が同じ場合を含む」あるいは
「連続する4文字が全て同じ場合を含む」などの条件が明確に書かれている場合を除いて
>>297の説明だけでも1文字目と2文字目は別文字と解釈するのが正解
303デフォルトの名無しさん:2011/08/13(土) 14:55:39.43
そんなバナナ!
304デフォルトの名無しさん:2011/08/13(土) 15:21:36.42
>>302 とは仕事したくない。
305デフォルトの名無しさん:2011/08/13(土) 15:33:36.73
>>302の人気に嫉妬
306デフォルトの名無しさん:2011/08/13(土) 16:15:41.73
以前会社にいた山田君を思い出した
307デフォルトの名無しさん:2011/08/14(日) 07:18:27.49
むしろ>>302を理解できないような融通の利かない奴とは仕事したくないな。
常識的に解りそうなことでも、事細かに指示や伝達をしないと、
そんなこと言われてないとか屁理屈でゴネるような奴と仕事するとフォローやストレスで大変そうだ。
308デフォルトの名無しさん:2011/08/14(日) 07:51:21.44
勝手な思い込みで仕事をしてもらっては困る
なぜ一言俺に聞かなかった(ドスンッ

まで読んだ
309デフォルトの名無しさん:2011/08/14(日) 09:14:21.19
「あ〜、そこは適当にやってもらえばいいから」って言ってた客が、出来上がり
見て「そこは、こう動くのが当たり前だろ」って言う手のひら返しする話をよく聞
くが >>302=>>307 みたいな奴に当たったんだろうな。

まあ、文句言われても「適当にやってもらえばいいから」って言うのを議事録に
書いとくしかないわな。
310デフォルトの名無しさん:2011/08/14(日) 20:34:31.83
くが?
311デフォルトの名無しさん:2011/08/14(日) 21:45:09.82
1行の文字桁数制限が無いか、あるいは大きなところでまで
固定桁数で改行入れて読みにくい文章書く子って未だに居るよね
そういった書き方見ても、書いてる内容見ても、程度が知れるってものだ
312デフォルトの名無しさん:2011/08/14(日) 21:46:59.96
>>311
>>302さんおちついてください
313デフォルトの名無しさん:2011/08/14(日) 22:52:31.95
314デフォルトの名無しさん:2011/08/14(日) 23:16:13.06
315デフォルトの名無しさん:2011/08/14(日) 23:32:34.98
多くの人に嘲笑されている現実と、自分に反する意見を投げかけているのは皆同一人物という妄想との、区別が付かない人。
316デフォルトの名無しさん:2011/08/15(月) 00:00:50.15
どう考えたって一人だろうw
317デフォルトの名無しさん:2011/08/15(月) 01:17:16.22
>>316
1人だって?プ
318デフォルトの名無しさん:2011/08/15(月) 07:40:32.80
最低でも2人は居る
319デフォルトの名無しさん:2011/08/15(月) 07:45:56.92
一人ってのは>>302,307,311,315が同一人物ってことね
それにツッコミや茶々入れてる人は当然含めてないよ
320デフォルトの名無しさん:2011/08/15(月) 08:04:15.29
11人いる!
321デフォルトの名無しさん:2011/08/15(月) 10:43:10.13
>>309
まさかとは思うが、「適当」≠「適切」だと思っている残念な人?
(指示を出すまでもない当たり前のことだから使用には詳細に書いていないけど)適当にやってくれ。
言わせんなよ、恥ずかしい。
322デフォルトの名無しさん:2011/08/15(月) 11:58:59.29
詳細以前にスレタイ読もうよ。
323デフォルトの名無しさん:2011/08/15(月) 13:08:30.17
>>297をを読んで
「指示を出すまでもない当たり前のことだから仕様には詳細に書いていないけど1文字目≠2文字目だから」
と自信満々言い切る人間がこの世に存在するという事実が、なんというか、すごいです。
324デフォルトの名無しさん:2011/08/15(月) 13:12:54.50
>言わせんなよ、恥ずかしい。

確かにあんな的外れ恥ずかしくて普通は言えないw
そこをあえて言った勇気に敬意を表するw
325デフォルトの名無しさん:2011/08/15(月) 14:03:14.42
そうだね、>297には一致とも不一致とも書かれていないのだから、
どちらの場合も考慮するのが正しいエンジニアリングだね。
だからと言って、2chの回答にそれを求めるのは間違いだと思うが。
326デフォルトの名無しさん:2011/08/15(月) 16:31:31.26
推して知るべし

って言葉を知ってるかい?
327デフォルトの名無しさん:2011/08/15(月) 16:42:06.95
それは知ってるが、知ってるからといっていつもそれを適用しちゃだめだろ。
328デフォルトの名無しさん:2011/08/15(月) 16:53:51.04
正規表現 Part8

って言葉を知ってるかい?
329デフォルトの名無しさん:2011/08/15(月) 17:01:32.21
仕事と2chを一緒にする馬鹿が多いな
仕事なら仕様としての抜けを確認するのが普通だが
2chなら別に通常普通ならこういう動作を求めるであろう答え書いてやれば十分だろ

330デフォルトの名無しさん:2011/08/15(月) 17:09:41.59
仕事でなければバグを指摘しなくていい、とは画期的な意見だな
331デフォルトの名無しさん:2011/08/15(月) 17:25:26.04
バグであるかどうかは本人以外わからん事だろ
332デフォルトの名無しさん:2011/08/15(月) 17:30:18.46
>>321
指示を出すまでもない当たり前のことが標準化されてない事実にいい加減気付け
333デフォルトの名無しさん:2011/08/15(月) 17:37:02.85
指示を出すのは仕事の話だろ
2chで指示を出す奴はいない
334デフォルトの名無しさん:2011/08/15(月) 17:39:37.48
要するに自分では自明だと思っていたことが
他の人にとっては自明でもなんでもなかったって話だね
335デフォルトの名無しさん:2011/08/15(月) 21:43:57.75
ローカルルールさえ守れない間抜けどもがグローバルルールを語るお笑いスレはここですか?
336デフォルトの名無しさん:2011/08/16(火) 06:06:50.67
337デフォルトの名無しさん:2011/08/16(火) 06:27:00.18
>336
"何が来るかわからない"が'.'を含むなら上と下は同じになる。
たぶん"何が来るかわからない"に含まれない文字はわかっているはずだし、
ホスト名/ドメイン名部分の"何が来るかわからない"と
パス部分"何が来るかわからない"の文字種は異なるはず。
338デフォルトの名無しさん:2011/08/16(火) 07:28:43.87
>>336
例えばこんな感じかな?
(「何が来るかわからない.」という部分が1〜何個続いてもマッチする)
http:\/\/([^.]+\.)+?test\.com\/[^\s]*

URLの検索に使う正規表現は用法によって様々
これで問題あれば>>4のテンプレを埋めて詳細に質問すべし
339デフォルトの名無しさん:2011/08/16(火) 13:33:04.04
>>338
>これで問題あれば>>4のテンプレを埋めて詳細に質問すべし
テンプレ云々以前に問題ありまくりだろ
その正規表現だと、例えばこういうのまでマッチするわけだが

http://1249719652/#q=www.test.com/&hl=ja

つか[^\s]*とかもはっきりいって意味不明だし、全然分かってないだろ
340デフォルトの名無しさん:2011/08/16(火) 15:55:21.23
非難する暇があるなら、正解を教えてあげればいいのに。

こんなんではどう?
http:\/\/(.*\.)*test.com\/.*
341デフォルトの名無しさん:2011/08/16(火) 15:58:31.19
>>340
> 正解を教えてあげればいいのに。
と言いながら、正解を教えず、間違いを教えて騙すのは如何なものかと
342デフォルトの名無しさん:2011/08/16(火) 16:09:10.46
それは正解じゃないだろw
https?:\/\/(?:[^./]+\.)*test.com\/\S*
まだやるならこうじゃね?
RFC的には何でもOKになったんだっけか・・・・?
343デフォルトの名無しさん:2011/08/16(火) 16:11:47.58
http:\/\/(\w+\.){1,2}test\.com\/\w+
344デフォルトの名無しさん:2011/08/16(火) 18:25:00.45
「何が来るかわからない」の部分が、ドットは勿論のこと
スラッシュを含まないとは一言も書かれていないな。
これは".test.com/"がパスの構成部分である可能性を排除しない。

オレはまた>>297からの流れで、スレ住人が試されてんのかと思っちまった。
345343:2011/08/16(火) 18:44:45.50
\w は - にマッチしないからまずいね
代わりに [-A-Za-z0-9_:]
346デフォルトの名無しさん:2011/08/16(火) 18:45:40.85
コロンいらないな。スレ汚し失礼
347デフォルトの名無しさん:2011/08/16(火) 18:48:47.82
URLにID,PASSを記述する時には:だけでなく@も必要になるが
348デフォルトの名無しさん:2011/08/16(火) 18:58:11.17
たしかに。ホスト名の前に来るから省いちゃ駄目か
349デフォルトの名無しさん:2011/08/16(火) 21:34:39.53
>>344
スラッシュを含まないとは書いてないから、別ドメインでも構わないってどんな思考してるんだよ
そういうのを屁理屈っていうんだよ
350デフォルトの名無しさん:2011/08/16(火) 21:37:56.54
でも>>297からの流れだと>>344の言うことには一理あるw
351デフォルトの名無しさん:2011/08/16(火) 21:44:07.04
まああれが URL であるって定義もないしな。w
352デフォルトの名無しさん:2011/08/16(火) 21:47:25.58
>>344の回答が見てみたいな
353デフォルトの名無しさん:2011/08/17(水) 00:31:19.22
.*

これは>>336の要求(「上の2つともにマッチさせる正規表現」)を完全に満たす。
354デフォルトの名無しさん:2011/08/17(水) 00:38:21.83
>>353
URLであるとは書かれてないから、ドットの連続も認められるとでも言いたいのか?
ほんと馬鹿じゃね?それより夏休みの宿題は終わったか?
355デフォルトの名無しさん:2011/08/17(水) 00:47:35.48
>354がRFC的に妥当なURLのみマッチする
(=RFC的に無効なURLにはマッチしない)
正規表現を書いてくれるらしいので期待

# まさか「.*」を「ドットの連続」と読んだ
# ってオチじゃないよね...?
356デフォルトの名無しさん:2011/08/17(水) 00:59:29.07
>>355
># まさか「.*」を「ドットの連続」と読んだ
># ってオチじゃないよね...?

お前やっぱ馬鹿だったんだな・・・
.* は改行文字を除く1文字の0回以上の繰り返し
したがってRFCの仕様に反してドットの連続も認められるってことになる

まともな正規表現が書けないなら黙ってろよ
357デフォルトの名無しさん:2011/08/17(水) 01:15:00.57
それ全部理解してるからこその>>355のレスになってると思うんだが・・・
358デフォルトの名無しさん:2011/08/17(水) 01:15:19.79
>>353は小論文で自由に論じなさいと言われて
本当に自由に論じて0点喰らうタイプ
359デフォルトの名無しさん:2011/08/17(水) 01:25:48.91
でもAO入試でひとりから絶賛されるタイプ
360デフォルトの名無しさん:2011/08/17(水) 01:28:38.50
「やっぱ」って、このスレに書いたの
数ヶ月ぶりなんスけど...(^^; ナニコノヒト

> したがってRFCの仕様に反してドットの連続も認められるってことになる

o.k.
つまり「RFCに沿ってドットの連続を認めない
正規表現を書かなければならない」
という意図の発言だったってことね > ドットの連続云々

# だから>355(の前半部)の発言になってるんだけど...
# >357さん、正解です :)

ちなみに、RFC的制限のほんの一例ですが、
ドットによって区切られた各ラベルの先頭及び末尾に
ハイフンを用いてはならないのは当然ご存知ですよね?
(見たところ、この制限を反映させた回答は出ていないようですが...)

では引き続き、>354さんがRFC的に妥当なURLのみ
マッチする(=RFC的に無効なURLにはマッチしない)
正規表現を書いてくれることに期待
361デフォルトの名無しさん:2011/08/17(水) 01:43:35.22
URIのマッチングにRFCに照らして〜とか正気で言ってんのか?

( ゚,_ゝ゚)バカジャネーノ
362デフォルトの名無しさん:2011/08/17(水) 01:46:11.55
答えが出なかったら>>360が正解を書いてくれるんだろう
それはそれでスレにとって有益なんじゃないか
363355=360:2011/08/17(水) 01:50:35.97
>361
ぃゃ、ワタシもそこはテキトーに済ましときゃ
いい部分じゃないかと思っているんですが
(でないと泥沼にはまるのは目に見えてるんで)、
ワタシじゃなくて>356さんにとっては
譲れない部分みたいなんで...(^^A;;
364355=360:2011/08/17(水) 01:54:45.51
>362
いえ、ワタシは「それは現実的じゃない」派なんで
(従って*ワタシは*正解を出せません)、
だからこそ>356さんの回答に期待している
というわけなのです :)
(相当に自信がおありのようなので)
365デフォルトの名無しさん:2011/08/17(水) 02:04:23.82
ま、連続ドット禁止規定のみ反映させて他は反映させない、ってのはネェわな
他にどんな規定があるのかは知らんが

以前どこかで見たRFC的妥当性を考慮したURLの正規表現は
もはや「ほとんど何にでもマッチするような表現」だったような記憶がある・・・
366デフォルトの名無しさん:2011/08/17(水) 02:13:33.46
メールアドレスをRFC完全準拠で抽出しようとすると
携帯メアドの一部を取りこぼしちゃうのは有名な話
367デフォルトの名無しさん:2011/08/17(水) 10:59:03.55
一部のキャリアがRFC非準拠なアドレスを許してるのは有名な話、と、はっきり書こうよw
368デフォルトの名無しさん:2011/08/17(水) 18:27:55.92
Not All RFCs are Standards.
369デフォルトの名無しさん:2011/08/17(水) 19:29:11.74
だからなんだ。
白いカラスがいたからって「カラスは白い」って主張が正しくなるわけじゃない。
370297:2011/08/17(水) 20:26:18.19
以前は大変御世話になりました。
で、自分がいい加減な文章を書いたせいで誤解を招く結果になり、申し訳ありません。
自分の意図は、「1文字目と2文字目は異なる」というものでした。
ですから、教えていただいた方法で正しかったですし
おかげで目的のデータを見つける事ができました。

皆さんを試すとかそんな気は一切ありません。
ただ自分の説明がいたらなかっただけです。申し訳ありません。
そして、どうも有り難う御座いました。
371デフォルトの名無しさん:2011/08/17(水) 20:57:31.71
正規表現だけが唯一習得出来ないスキルだ。


難しい。
372デフォルトの名無しさん:2011/08/17(水) 20:57:50.76
「まともな正規表現が書けないなら黙ってろよ」とか豪語してた>>356の自信作はまだですか?
373デフォルトの名無しさん:2011/08/17(水) 21:02:18.65
書けないから黙ってるんじゃね?
374344:2011/08/17(水) 21:06:37.05
>>370
ああいう流れの中で>>336が投下されたもんだから、もしかして
「この質問でも先と同じ屁理屈をこねてみせるのか?」と誰か(=336)が
スレ住人を試しているのかと思っちゃった、って話だから気にしなくていいよ。
君のことを言ったわけじゃない。紛らわしくてすまん。
375think49 ◆bKk/qcAKuM :2011/08/17(水) 21:21:28.81
RFC3986準拠ならこんな感じ。意外とフリーダムです。
https://gist.github.com/770087
376デフォルトの名無しさん:2011/08/17(水) 21:41:05.10
think49こんな所にも出没してたのかw
377デフォルトの名無しさん:2011/08/17(水) 21:48:57.62
煽りが多いな
378デフォルトの名無しさん:2011/08/17(水) 21:55:14.27
a://hoge/ も有りなのか…
379デフォルトの名無しさん:2011/08/18(木) 10:32:51.42
あほ毛w
380デフォルトの名無しさん:2011/08/26(金) 13:40:20.27
test
381デフォルトの名無しさん:2011/08/27(土) 16:55:45.83
●正規表現の使用環境
C# 4.0

●検索か置換か?
置き換え

●説明
html内の<dd></dd>タグを検索して<dd>と</dd>のみ置き換えたい
ためしに<dd>とだけやってみましたが、<dd>タグは置き換えされませんでした

●対象データ
<dd>文章1</dd>
<dd>文章2</dd>

●希望する結果
文章1
文章2
382デフォルトの名無しさん:2011/08/27(土) 19:21:21.89
すいません、自己解決しました
383デフォルトの名無しさん:2011/08/28(日) 08:52:43.84
よろしくお願いします

●正規表現の使用環境
Perl

●検索か置換か?
置換

●説明
数が一桁の場合、0を加えて二桁に整形したい

●対象データ
2010年5月9日
2011年11月12日
2011年4月30日
2011年6月1日
2011年8月20日

●希望する結果
2010-05-09
2011-11-12
2011-04-30
2011-06-01
2011-08-20
384デフォルトの名無しさん:2011/08/28(日) 09:23:11.79
^(\d{4})年(\d\d?)月(\d\d?)日
\1-\2-\3

-(\d)(?=[^\d]|\n)
-0\1
385デフォルトの名無しさん:2011/08/28(日) 10:41:45.33
>>384
ありがとうございます
386デフォルトの名無しさん:2011/08/28(日) 16:51:25.87
こういう風に画像を置換したいのですが、正解を教えてください

http://*.akamaihd.net/*/*/*.jpg

http://*.akamaihd.net/*/*/o.jpg

.replace(/(http:\/\/[^/]+\.akamaihd\.net\/(.+?\/){2}.+?-).+\.jpg$/i,"$1o.jpg")


http://*.fc2.com/*/*/*/*/*/*.jpg

http://*.fc2.com/*/*/*/*/*/digest_*.gif

.replace(/(http:\/\/[^/]+\.fc2\.com\/(.+?\/){5}.+?-).+\.jpg$/i,"$1digest_$2.gif")
387デフォルトの名無しさん:2011/08/28(日) 17:23:14.67
urlは面倒なので手抜き

/[^/]+\.jpg
/o.jpg

/([^/]+)\.jpg
/digset_\1.gif
388デフォルトの名無しさん:2011/08/28(日) 17:27:49.72

^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$

^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$
389デフォルトの名無しさん:2011/08/28(日) 18:09:38.56
以下で動作しませんでした

.replace(/^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$/i,"$1/o.jpg")

.replace(/^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$/i,"$1/digset_\1.gif")
390デフォルトの名無しさん:2011/08/28(日) 18:44:06.57
>>389
>$1/o.jpg
>$1/digset_\1.gif

なんでわざわざ改悪するんだよ?馬鹿なの?死ぬの?
391デフォルトの名無しさん:2011/08/28(日) 19:04:41.07
[^./]の.ってエスケープしなくてもいいの?
392デフォルトの名無しさん:2011/08/28(日) 19:21:09.39
以下で動作しませんでした

.replace(/^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$)
.replace(/^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$)

.replace(/^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$/o.jpg)
.replace(/^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$/digset_\1.gif)

/([^/]+)\.jpg
/digset_\1.gif
の入れ方を教えてください
393デフォルトの名無しさん:2011/08/28(日) 19:37:53.37
>>387>>388は別人だから組み合わせてもうまくいかないよ
あと言語が何なのか言っといたほうがいい
394デフォルトの名無しさん:2011/08/28(日) 21:01:52.17
>>393
すいません 言語は分かりませんが
普通のユーザースクリプトに使用します。

分かる人は正解を教えてください
おねがいします
395デフォルトの名無しさん:2011/08/28(日) 23:59:16.34
>>391
もちろん必要ない。
396デフォルトの名無しさん:2011/08/29(月) 00:55:09.24
>>394
言語もソフト・アプリ名も言わないの?
それじゃ不明瞭極まりない
何の「普通のユーザースクリプト」か、くらいは説明できるでしょ
最初からテンプレに沿って質問を書いたほうが早道なのになー
397デフォルトの名無しさん:2011/08/29(月) 01:07:04.98
なかなか気が狂ってて笑える
398デフォルトの名無しさん:2011/08/29(月) 02:16:27.36
>>396
ウインドウズのブラウザ(chrome)のユーザースクリプト(拡張)に使うんですけど
script.jsです
399デフォルトの名無しさん:2011/08/29(月) 02:39:44.50
var url = (
location.href
.replace(/^(http:\/\/[^/]+\.ggpht\.com\/(?:[^/]+\/){4})s[^/]+\/([^/]+\.[^/]+)$/, "$1$2")
.replace(/^(http:\/\/[^/]+\.googleusercontent\.com\/(?:[^/]+\/){4})[^/]+\/([^/]+\.[^/]+)$/, "$1$2")
.replace(/^(http:\/\/[^/]+\.bp.blogspot.com\/(?:[^/]+\/){4})[^/]+\/([^/]+\.[^/]+)$/, "$1$2")
.replace(/^(http:\/\/.+?\.photobucket\.com\/(.+?\/){3})th_(.+?\.[^/]+)$/i,"$1$3")
.replace(/^(http:\/\/img\.pics\.livedoor\.com\/(.+?\/){3}.+?-).+\.jpg$/i,"$11024.jpg")
);
if(url !== location.href){
location.replace(url);
}
400デフォルトの名無しさん:2011/08/29(月) 02:45:32.26

のような形式で
>>386の置換がが動作する記述を教えて欲しいのです。
401デフォルトの名無しさん:2011/08/29(月) 03:51:28.85
>>398-400
Google Chromeのユーザースクリプトね
最初にちゃんと説明しようぜ

.replace(/(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")

ちなみにこのスクリプトの言語はJavaScriptですよ
だからscript.jsと、jsが付いてる
402デフォルトの名無しさん:2011/08/29(月) 04:00:33.68
エロサイトの画像を一括DLでもしたいんかね
403デフォルトの名無しさん:2011/08/29(月) 10:03:56.24
●正規表現の使用環境
Excel VBA

●検索か置換か?
置換

●説明
<>で囲まれた文字列を空白に置換したい。

●対象データ
あいうえお<ほげほげ>かきくけこ
みかん<りんご<すいか>ぶどう>メロン

●希望する結果
あいうえおかきくけこ
みかんメロン

---
検索:<*>
置換:
---
というふうにすると、
一番目の例に対してはうまくいくのですが、入れ子になっている場合にうまくいきません。
↓のような結果になってしまいます。
みかんぶどう>メロン


お願いします。
404デフォルトの名無しさん:2011/08/29(月) 11:07:11.10
<[^<>]+>
で何度か置換
405デフォルトの名無しさん:2011/08/29(月) 12:11:43.97
>>403
<(?:[^<>]*<[^<>]*>)*[^<>]*>
406デフォルトの名無しさん:2011/08/29(月) 12:26:37.49
>>405
いちご<みかん<りんご<ぶどう>パイナップル>マンゴー>レモン
407デフォルトの名無しさん:2011/08/29(月) 13:52:51.51
正規表現だと基本的に有限のネストへの対応しかできないんじゃなかったっけ。
408デフォルトの名無しさん:2011/08/29(月) 17:17:06.32
>>403
<(?:[^<>]*<)*(?:[^<>]*>)*[^<>]*>
括弧の対応関係を保証するなら複数回マッチさせる必要がある
409デフォルトの名無しさん:2011/08/29(月) 18:42:33.91
>>401
ありがとうございます

しかし
.replace(/(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")
で動作しませんでした
.replace(/^(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/^(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")
でも駄目でした
410403:2011/08/29(月) 21:09:00.42
>>404,405,408さん
ありがとうございました。
411デフォルトの名無しさん:2011/08/29(月) 21:48:15.16
>>409
ttp://userscripts.org/scripts/review/87889

ぐぐってみたらベースはこれみたいだけど、ちゃんと @include 追加してるのかね?
412デフォルトの名無しさん:2011/08/30(火) 02:23:53.96
>>409
ああすまん、先頭の^をコピペミスしてたな
.replace(/^(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/^(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")
が正しい
まあ、あっても無くても動作するんだけどな
後は>>411が指摘してくれた通り@includeでしょ
413デフォルトの名無しさん:2011/08/30(火) 23:14:48.30
>>411
@includeを登録するのを忘れていました

>>412
動作しました
ありがとうございましたm(__)m
414デフォルトの名無しさん:2011/08/31(水) 23:22:12.28
ttp://msdn.microsoft.com/ja-jp/library/ff650303.aspxから拝借した
^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$
を使ってメールアドレスの書式チェックを行っているんですが、
40文字とか多めの文字数で不一致の文字列を試すと、
フリーズしてしまいます。

一致するケースは問題ないんですが。。。
一致しない時はバックトラッキング?が発生している?
実装言語はaspです。

対象文字列が長くて不一致のケースでも、
動作に問題のない一般的なメールアドレスを許容する表現があれば教えて下さい
415デフォルトの名無しさん:2011/08/31(水) 23:49:58.59
組み合わせ爆発が起きてるかな?
416デフォルトの名無しさん:2011/09/01(木) 02:38:37.05
前半の ([-.\w]*[0-9a-zA-Z])* が原因だと思う
なにがやりたかったんだこれ
417デフォルトの名無しさん:2011/09/01(木) 08:59:22.45
あやしげな奴でもパスさせてしまって、あとでエラーになったらそこでどうにか
リカバリーする、という方針なら適当なパターンでやればいい。

実際に使われているアドレスでもエラーになるかもしれないが、厳密にマッチ
する奴が欲しいなら、RFC 5322 正規表現、とでも検索すればむたくた長い奴が
出てくるからそこらへんを参考に。
418デフォルトの名無しさん:2011/09/01(木) 13:10:51.42
テキスト中の行頭 ; という記号を置き換えようしています
'^\;'とかいたらマッチしません

次に ^\;.* と書いたらマッチするものの
行頭に;がある行の一列すべてがマッチしてしまいます

一体どう書けばよいのでしょうか?
419デフォルトの名無しさん:2011/09/01(木) 13:25:11.38
環境は何よ?
とりあえずセミコロンに \ はいらない
420418:2011/09/01(木) 14:10:27.15
>>419
失礼しました
秀丸の置換です
421デフォルトの名無しさん:2011/09/01(木) 14:56:50.28
それなら普通にこれでできるんじゃないの?

^;
422デフォルトの名無しさん:2011/09/01(木) 15:54:21.54
>>421
できました。どうもありがとうございます
423デフォルトの名無しさん:2011/09/01(木) 16:54:17.50
(;^ω^)
424デフォルトの名無しさん:2011/09/03(土) 11:25:41.47
おつかれさまです。
現在、ニコ生用にゆっくりがコメントを読み上げるソフトウェアを開発しております。
環境は Mac Objective-C でライブラリに RegexKit を利用しております。
質問は正規表現自体に関するものです。

「ww」などを「わらわら」と読ませるために
[WwWw][WwWw]+
とやっているのですが、

「ないすw」など、一文字の「w」記号を「わら」と読ませるのに苦労しております。
「w」全てで引っ掛けるのではなく、
英単語ではないもののみにしようとしております。
なので、
what -> x
いいw -> ok
w -> ok
how -> x
などというような判定を行いたいです。
対象は「大文字小文字、全角半角」のwです。

もしよろしければ、アドバイスいただけないでしょうか。
よろしくお願いします。
425デフォルトの名無しさん:2011/09/03(土) 11:39:21.17
書き忘れましたが、
判定は [^a-zA-Z]*[WwWw][^a-zA-Z]*
としてできているのですが、
「わら」とおきかえる場所は真ん中のみにしたいです。

上記の判定式のまま書くと、
「いいw」 -> 「わら」
となります。
これを
「いいワラ」
としてやりたいです。
426デフォルトの名無しさん:2011/09/03(土) 11:40:40.28
すいません。上記のもやはり挙動がおかしいです。
何度も申し訳ありません。
427デフォルトの名無しさん:2011/09/03(土) 11:40:53.17
s/^([wWwW]+)$/わら/g;
s/([ぁ-んァ-ン亜-Kー])([wWwW]+)$/$1わら/g;
428デフォルトの名無しさん:2011/09/03(土) 11:41:28.43
コードは UTF-8 として、
(?<![a-vx-zA-VX-Z])([Ww]+)(?![a-vx-zA-VX-Z])

前後に wW 以外のアルファベットが含まれていない [wW]+ にヒット。
429デフォルトの名無しさん:2011/09/03(土) 11:46:35.45
>>427
すいません。文字化けで読めないです。

>>428
かなりおしいですw
少し試しましたが、文頭と文末以外だとOKっぽいです。
430デフォルトの名無しさん:2011/09/03(土) 12:06:26.64
(^|[^A-VXYZa-vxyz])([WwWw])\2*\b

$1わら
431デフォルトの名無しさん:2011/09/03(土) 12:24:46.64
みなさま、ありがとうございました。
以下のような順番に置き換えていく実装で期待通りの動作をしました。
集約できておりませんが、
計算量的に問題になっていないので、特にバグがなければこれでいきます。

NSMutableString *subjectString = [NSMutableString stringWithString:kanjiString];
NSString *regexString = @"[WwWw][WwWw]+";
NSString *replacementString = @" ワラワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];

regexString = @"(?<![a-vx-zA-VX-Z])([WwWw]+)(?![a-vx-zA-VX-Z]) ";
replacementString = @" ワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];

regexString = @"^([WwWw]+)(?![a-vx-zA-VX-Z])";
replacementString = @" ワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];

regexString = @"(?<![a-vx-zA-VX-Z])([Ww]+)$";
replacementString = @" ワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];
432デフォルトの名無しさん:2011/09/03(土) 12:50:33.80
適切に場合分けしてやると、より精度が上がって面白いかもね

しかし、これが分からん
[WwWw][WwWw]+
こうじゃないの?
[WwWw]+
全角半角も変わってるから注意
433デフォルトの名無しさん:2011/09/03(土) 12:51:36.21
>>432
wwwwwwwww → ワラワラ
w → ワラ

と書いてあるだろ
434デフォルトの名無しさん:2011/09/03(土) 12:57:59.24
>>433
[WwWw][WwWw]+ = [WwWw]{2,}

[WwWw]+ = [WwWw]{1,}

つまり

[WwWw]{1,} ⊃ [WwWw]{2,}

それなのに [WwWw]+ も ワラ に置換するのはおかしいだろ
435デフォルトの名無しさん:2011/09/03(土) 13:14:35.80
>>434
ヒットしないから無問題。つまり無駄な箇所。
436デフォルトの名無しさん:2011/09/03(土) 13:16:19.84
>>433
ああすまん、2文字以上の場合と理解してたのに勘違いしちまった
>「ww」などを「わらわら」と読ませるために
2文字以上でワラワラね
むしろ他の場所の[WwWw]+が微妙におかしいのか

でも全半角もおかしいぞーWWWWWwwwwwWWWWWwwwww
437デフォルトの名無しさん:2011/09/03(土) 14:43:51.82
やだなにこのスレ
草伸びまくってる
438デフォルトの名無しさん:2011/09/03(土) 14:48:28.10
W杯とかどうなるの?
439デフォルトの名無しさん:2011/09/03(土) 15:09:20.11
わらはい
440デフォルトの名無しさん:2011/09/03(土) 15:59:22.81
(?<![A-VXYZa-vxyz])([WwWw])\1*\b(?![.])

ワロタwwwwww ○
w ○
W杯 ×
how big is ur penis? ×
www.example.com ×
441デフォルトの名無しさん:2011/09/03(土) 18:32:34.71
戻り読みが可能なら>>428に手を加えるだけでいけそうだな
(?<![a-vx-zA-VX-Z])([Ww]+)(?![a-vx-zA-VX-Z])|^([Ww]+)(?![a-vx-zA-VX-Z])
442デフォルトの名無しさん:2011/09/03(土) 18:58:48.92
>>441
お前さ否定戻り読み全然分かってねーだろ
^([Ww]+)(?![a-vx-zA-VX-Z]) の存在意義が皆無

戻り読みって言いたいだけちゃうかと
443デフォルトの名無しさん:2011/09/04(日) 11:41:44.97
ここは草いきれのするスレですね
444デフォルトの名無しさん:2011/09/05(月) 23:42:06.78
よろしくお願いします

●正規表現の使用環境
秀丸

●検索か置換か?
置換

●説明
ダブルクォーテーションの中の文字を空白扱いにしたい

●対象データ
test="daikon"
test="daikon ninjin"
test="daikon ninjin tamanegi"

●希望する結果
test=""
test=""
test=""
445デフォルトの名無しさん:2011/09/05(月) 23:44:08.68
".*"
""
446デフォルトの名無しさん:2011/09/05(月) 23:56:05.76
".+?"
""
447デフォルトの名無しさん:2011/09/06(火) 01:02:02.49
"[^"]+"
""
448デフォルトの名無しさん:2011/09/06(火) 21:21:28.66
皆さん返答ありがとうございました。
>>447さんの正規表現で正常動作しました。
449デフォルトの名無しさん:2011/09/07(水) 20:48:36.46
vbscriptでバックトラッキングを制御する?>のような表現はないのでしょうか?
調べてみたのですが他言語用ばかりで試しに実装して動かしてみましたがエラーになってしまいました
450デフォルトの名無しさん:2011/09/07(水) 21:13:57.96
マニュアル見ればいいじゃないの
MSDNにオンラインもあるよ
http://msdn.microsoft.com/ja-jp/library/cc392020.aspx
451デフォルトの名無しさん:2011/09/07(水) 22:05:17.09
よく聞くバックトラッキングってMSDNとか見てもいまいちピンと来ないんですが、
わかり易く解説されてるとことかないでしょうか?
452449:2011/09/07(水) 23:28:26.52
>>450
ありがとうございます。
453デフォルトの名無しさん:2011/09/07(水) 23:36:53.10
454デフォルトの名無しさん:2011/09/08(木) 19:13:57.41
>>452
>>450みて解決できたの?
455デフォルトの名無しさん:2011/09/08(木) 22:28:14.59
●正規表現の使用環境
C#

●検索か置換か?
置換

●説明
<b></b>で挟まれた文章を抜き出す

●対象データ
<table width="100%" border="1" cellspacing="0" cellpadding="10">
<tr><td><b>ERROR!!<br><br>多重書き込みです。 あと 17秒お待ちください。</b></td></tr>
</table>

●希望する結果
ERROR!!<br><br>多重書き込みです。 あと 17秒お待ちください。

====
これを実行するのに、
responseStr = System.Text.RegularExpressions.Regex.Replace(
responseStr,
@"(.|\n)*<b>(?<sentence>.*?)</b>(.|\n)*",
"${sentence}");

とやっているのですが、
「任意の一文字(改行文字も含む)」
という表現は(.|\n)が最適なのでしょうか。
もっとベターなやりかたがあったら教えて下さい。
456デフォルトの名無しさん:2011/09/08(木) 22:42:08.09
以前、ww を ワラワラ と読ませるという質問をしたものです。
皆様のおかげで無事にアプリを公開することができました。
ありがとうございます。

Macでニコ生を放送したいかたがおられましたら、
是非ご活用ください。
【ゆっくろいど】http://www.yukkuroid.com/yukkuroid/
457デフォルトの名無しさん:2011/09/08(木) 22:58:04.04
>>455
RegexOptions.Singleline
458デフォルトの名無しさん:2011/09/08(木) 23:15:59.05
>>457
ありがとうございます
459デフォルトの名無しさん:2011/09/09(金) 00:38:15.69
タグの中身を操作するってのは定期的に上がる質問だね
まぁフクロウ本でも細かく説明されているほど定番なんだろうけど
460デフォルトの名無しさん:2011/09/09(金) 08:30:36.52
>>456 公開おめ
461デフォルトの名無しさん:2011/09/09(金) 08:44:35.22
>>457
そのサイト、素敵やん?w

あんまスレと関係ない質問だけどトップのバナーって、
なぜ画像分割してるの?結構こういう画像分割してるサイトあるけど、ひとつにまとめたら
ダメなのかなっていつも思ってしまう。
462デフォルトの名無しさん:2011/09/09(金) 08:45:18.59
間違えた>>456だった。
463デフォルトの名無しさん:2011/09/09(金) 09:02:38.82
線が細い環境で、画像のロード中何も表示されないよりも少しずつでも表示された方がいいからだろ。
464デフォルトの名無しさん:2011/09/09(金) 10:06:21.76
インターレースGIFとかあったな…
465デフォルトの名無しさん:2011/09/09(金) 12:35:55.66
>>463
なるほど!どうもです。
466デフォルトの名無しさん:2011/09/09(金) 14:55:57.83
インターレースPNGとかプログレッシブJPEGとかあったな…
467デフォルトの名無しさん:2011/09/09(金) 14:57:35.22
モーションJPEGがどうかしたの?
468デフォルトの名無しさん:2011/09/10(土) 13:10:40.29
「ecv 0000 ef773s 1111 87ed93」と言った数字、文字、スペースが混ざった文字列から
数字だけのブロック("0000"と"1111")を取り出したい場合のパターンを教えてください。

自分で思いつくのは下記。もっとスマートなやりかたないでしょうか
1.\s→\r\nに置換
2.^(\d+)$→●$1に置換
3.^[^●].*$→空白に置換
4.●→空白に置換

ちなみにサクラエディタです。
よろしくお願いいたします。
469デフォルトの名無しさん:2011/09/10(土) 13:19:58.69
\b\d+\b
470デフォルトの名無しさん:2011/09/10(土) 13:48:11.76
男性器で女性器を表現するのが趣味です
471デフォルトの名無しさん:2011/09/10(土) 14:28:04.84
>>468
テンプレに沿って処理前・処理後を示してくれてないからよく分からんけど
\s*\w*[a-z]+\w*\s*|\b\s+\b
\n

改行も揃えたければ
^\n|\n$
空文字

サクラエディタでは試してない、悪しからず
※空白と書くと、通常は空白文字=スペース類のことを指すぞ
472デフォルトの名無しさん:2011/09/10(土) 14:54:54.03
>>468
(?:^|\s)\d*\D\S*(?=\s|$)
473472:2011/09/10(土) 14:57:02.29
数字のみ以外の文字列を削除すると想定
数字のみなら (?:^|\s)\d+(?=\s|$)
474デフォルトの名無しさん:2011/09/10(土) 16:16:05.24
(?<=\b)(\d+)(?=\b)
475471:2011/09/10(土) 16:33:45.00
>>468
一発で済むように改良
(?:\s*\w*[a-z]+\w*)*\s*(\d+)\s*(?:\w*[a-z]+\w*\s*)*\n*
$1\n
476468:2011/09/10(土) 21:56:12.95
>>471-475
ありがとうございました。
477デフォルトの名無しさん:2011/09/10(土) 23:38:59.46
どなたかご教授ください・・・
●正規表現の使用環境
EmEditor

●検索か置換か?
検索

●検索対照データ
(abcdefg:;[]あいうえお))

●希望する結果
(で始まり、途中にいろいろあっても、))で終わる対象データを検索したいです。
すみませんが、よろしくお願いします。
478デフォルトの名無しさん:2011/09/10(土) 23:43:20.20
\(.*\)\)

エスケープの仕方がわからんだけかな
それともホントは対象データがもっと込み入ってんの?
479デフォルトの名無しさん:2011/09/10(土) 23:44:11.21
\(.*?\)\)
480デフォルトの名無しさん:2011/09/10(土) 23:48:51.89
かぶったな
\(.*\)\)と\(.*?\)\)の違いは、以下で試せばわかる
(abcdefg:;[]あいうえお))かきくけこ))
481477:2011/09/11(日) 02:09:01.68
>>478 >>479
おおお、ありがとうございます、すごいです。
あ、はい、エスケープの仕方がわからんだけかと思います;;
\(.*\)\)と\(.*?\)\)の両方を試してみました。
2つの違いがわかりました。2つ教えてもらってありがとうございました。
482デフォルトの名無しさん:2011/09/12(月) 00:05:32.23
どなたかご教授ください・・・
●正規表現の使用環境
EmEditor

●検索か置換か?
置換

●対照データ
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[aa][zy]AC[ab]
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg]

●希望する結果
;AA[ac][ad]・・・・・[zw][zx][zz];AB[aa][zy]AC[ab]     ←;AAの後ろから[aa][zy][ab]を削除
;AA[ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]     ←;AAの後ろから[df][aa][fb]を削除
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg]    ←;AAの後ろから、[bc][fh][ge][eg]を削除

すみませんが、よろしくお願いします。
483デフォルトの名無しさん:2011/09/13(火) 01:22:44.15
●希望する結果
;AA    [ac][ad]・・・・・[zw][zx]  [zz];AB[aa][zy]AC[ab]   ←;AAから;ABまでの[aa][zy][ab]を削除
;AA  [ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]   ←;AAから;ABまでの[df][aa][fb]を削除
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg] ←;AAから;ABまでの[bc][fh][ge][eg]を削除

この結果。。。ムリだ
484デフォルトの名無しさん:2011/09/13(火) 01:24:30.46
>>482
正規表現だけじゃ無理
マクロでこんな感じにすればいけるんじゃね?試してないけど

document.selection.SelectAll();
document.selection.Text = document.selection.Text.replace(/^;AA((?:\[[a-z]{2}\])*);AB((?:\[[a-z]{2}\])*)AC((?:\[[a-z]{2}\])*)$/gm, function(a, b, c, d) {
var e = (c + d).replace(/^\[|\]$/g, '').split(']['),
f = b.replace(/^\[|\]$/g, '').split('][').filter(function(g) {
for (var i = 0, l = e.length; i < l; i++) if (e[i] != g) return g;
}).join('][');
return ';AA['+ f + '];AB' + c + 'AC' + d;
});
485482:2011/09/14(水) 01:36:56.36
>>483 可能かどうかも全然わかってないので、ご意見ありがとうございました。

>>484 正規表現だけでは無理だけど、マクロでなんとかなりますか、ありがとうございます。

・・・ただ僕はマクロっていうと、マウスのクリックを連打させるツールを使うくらいしかわかってないもので、>>484さんの書かれてるすごい内容をどうやって、どうすれば、どのように使えるのか、ほとんど理解できませんorz

何ヶ月、またはそれ以上たって、もっとマクロに詳しくなって理解できるようになったら、この方法を試させてもらいたいと思いますorz
486デフォルトの名無しさん:2011/09/14(水) 09:13:08.91
EmEditorにマクロ機能有るだろ
無料版はマクロ機能ないんだっけか?
487デフォルトの名無しさん:2011/09/14(水) 13:16:37.75
EmEditorのマクロってこんなECMAScript的な実装なの?
488デフォルトの名無しさん:2011/09/14(水) 14:25:13.45
ECMSScript的というかそのものを拡張してあるだけだったはず
489デフォルトの名無しさん:2011/09/14(水) 14:29:29.20
ECMSScriptじゃなくてECMAな(´・ω・`)
490デフォルトの名無しさん:2011/09/14(水) 14:32:37.16
さくらエディタでも使える
491デフォルトの名無しさん:2011/09/14(水) 15:13:53.74
拡張というか、WSHのエンジンをそのまま利用している形だね
だからJScriptとVBScript、どちらでもOk
492デフォルトの名無しさん:2011/09/16(金) 17:59:34.52
●正規表現の使用環境
vxeditor

●検索か置換か?
置換

●説明
「a」という文字を正規表現で検索し、「C:\test\test2」に置換するために、

検索語:[a-z] もしくは \w
置換語:C:\test\test2

と置換したのですが結果は「C:        est        est2」となってしまいます。
置換語を「C:\\test\\test2」としてみたら今度は「\test2」となりました。

●対象データ
a

●希望する結果
C:\test\test2

お願いします
493デフォルトの名無しさん:2011/09/16(金) 18:19:24.57
またエスケープか

C:\\test\\test2

\tはタブ
494デフォルトの名無しさん:2011/09/16(金) 18:20:23.15
>>492
アルファベットのうちの a だけが対象なら [a-z] や \w にする理由が分からん

a

C:\\test\\test2

で十分だろ
495デフォルトの名無しさん:2011/09/16(金) 18:26:13.83
よく見たら
C:\\test\\test2
でもうまくいってないのか。

Perl互換の正規表現にしてもうまくいかない?
496デフォルトの名無しさん:2011/09/16(金) 18:54:40.15
vxeditor 落として試してみたんだが
置換語 C:\\test\\test2 で普通にいけるじゃねーか
正規表現1、正規表現2どっちも問題なかったぞ
497デフォルトの名無しさん:2011/09/16(金) 19:01:51.52
秀丸でHTMLソース内のSmartyタグを強調表示させたいのですが上手くいきません。。
Smartyの開始は {{ で修了は }} としています。
現在は正規表現で {{.+}} を指定しているのですが

<option value="{{$w.cd}}"{{$w.selected}}>ABCDE{{$w.name}}</option>

の場合、Smarty外の 「"」 「>ABCDE 」 も強調表示されています。。
これを何とか強調表示されない指定を教えて下さい神様
498デフォルトの名無しさん:2011/09/16(金) 19:24:57.40
>>492
VxEditor使いだが、
【マクロは】帰ってきたVxEditor【DMonkey】
http://hibari.2ch.net/test/read.cgi/software/1187267009/431
使ってるバージョンが古いのでは?今出てる、Ver 1.0.1を使えば問題ない。
499デフォルトの名無しさん:2011/09/16(金) 19:41:32.39
>>497
秀丸は知らんけど、最短一致を使う。
{{.+?}}
または
{{[^}]+}}
かな
500492:2011/09/16(金) 20:11:17.76
みなさんご回答ありがとうございます。
>>498氏のおっしゃるように、使用しているverが古かったのが原因でした。申し訳ございません
501497:2011/09/16(金) 23:33:54.30
>>499
うおおおおおおおっ!
上はNGでしたが下はバーーーーーーーーーッチリでしたあああ!
あざーすあざーす

「最短一致」勉強します!
教えていた表記も勉強します!

師匠!ありがががとうございましたあ!
502デフォルトの名無しさん:2011/09/17(土) 08:14:25.22
アリガがガトー
503デフォルトの名無しさん:2011/09/17(土) 12:23:10.26
●正規表現の使用環境
oracle(regexp_replace)
●検索か置換か?
置換
●説明
::でタグ名が記載されたデータを<>タグに変換したい
●対象データ
:dog:I like dog
:cat:I like cat
●希望する結果
<dog>I like dog</dog>
<cat>I like cat</cat>
504デフォルトの名無しさん:2011/09/17(土) 12:25:28.34
●試したこと
regexp_replace(data,'^:([^:]*):(.*)$','<\1></\1>\2',1,0,'m');
<dog></dog>I like dog
<cat></cat>I like cat
はできるんですが
regexp_replace(data,'^:([^:]*):(.*)$','<\1>\2</\1>',1,0,'m');
としたら
</dog> like dog
</cat> like cat
となってしまいます。。。。
505503:2011/09/17(土) 12:53:20.88
事故解決しました。
CRLF→LFに変換してから処理すれば問題ありませんでした。
506 ◆36l9l1q57CRh :2011/09/17(土) 23:10:50.96
●正規表現の使用環境
Microsoft .NET Framework (使用ソフトウェアは、Repl-Ace on .NETです。)


●検索か置換か?
置換


●説明
対象データを希望する結果に置換したいです。
対象データ(置換の前後)のフォーマットは、●詳細に書きます。


●対象データ
ABCD 12:34:56 阿あアアAaAa1+-○× : 阿あアアAaAa1+-○×
EFGH 00:59:59 阿あアアAaAa1+-○× : 阿あアアAaAa1+-○×


●希望する結果
ABCD\t12:34:56\t阿あアアAaAa1+-○×\t:\t阿あアアAaAa1+-○×
EFGH\t00:59:59\t阿あアアAaAa1+-○×\t:\t阿あアアAaAa1+-○×

※\tはタブという意味で書いてあります。



長いので続きます。
507506 ◆36l9l1q57CRh :2011/09/17(土) 23:12:34.89
●詳細
■置換前のフォーマット
01.半角 英字 4文字(固定長)
02.半角 スペース(固定長)
03.半角 数字 24時間表示の時刻(固定長)
04.半角 スペース(固定長)
05.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)★
06.半角 空白(固定長)
07.半角 :(固定長)
08.半角 空白(固定長)
09.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)★
10.CR+LF

□置換後のフォーマット
01.半角 英字 4文字(固定長)
02.タブ(固定長)
03.半角 数字 24時間表示の時刻(固定長)
04.タブ(固定長)
05.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)
06.タブ(固定長)
07.半角 :(固定長)
08.タブ(固定長)
09.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)
10.CR+LF



長いので続きます。
508506 ◆36l9l1q57CRh :2011/09/17(土) 23:13:05.44
※★マークの所には、03/06-08と同じ文字列が同じ形式で入る可能性がありますが、
 05と09の部分にそれらの文字列があった場合でもそれは残しておきたいです。
例:
・対象データ(1と+の間に07の:、aとAの間に03の日付)
ABCD 12:34:56 阿あアアAaAa1:+-○× : 阿あアアAa12:34:56Aa1+-○×
・希望する結果
ABCD\t12:34:56\t阿あアアAaAa1:+-○×\t:\t阿あアアAa12:34:56Aa1+-○×


以上、どうかよろしくお願いします。
509506 ◆36l9l1q57CRh :2011/09/17(土) 23:18:17.95
度々すみません。
05と09の位置には、06-08の「 : 」が入る可能性はあるのですが、
実際には入る可能性は低いので、もし無理でしたらこの部分は、
入らない事が前提で構いません。

よろしくお願いします。
510デフォルトの名無しさん:2011/09/17(土) 23:26:14.44
ながい。
プログラムで実現しろよ。
正規表現に拘ることはない。
511デフォルトの名無しさん:2011/09/17(土) 23:35:03.01
^([a-zA-Z]{4}) (\d\d:\d\d:\d\d) ([^ ]+) (:) ([^ ]+\r\n)$
\1\t\2\t\3\t\4\t\5

たしかに長い
512デフォルトの名無しさん:2011/09/17(土) 23:38:50.63
フィールド05と09に空白が入ってるのでやる気を削がれた
そういうとんでもないフォーマットをTSVに直すってことなんだろうけど…
513デフォルトの名無しさん:2011/09/17(土) 23:39:25.67
あー空白もまじってんのか
514デフォルトの名無しさん:2011/09/17(土) 23:43:19.70
^([a-zA-Z]{4}) (\d\d:\d\d:\d\d) (.+) (:) (.+\r\n)
\1\t\2\t\3\t\4\t\5

こうか
515デフォルトの名無しさん:2011/09/18(日) 01:38:41.83
>>514
それだと
" : "
こういった文字列が05に含まれていた場合変になるな
05、09は色々条件書いてるけど等ってなってるから
曖昧なんだよなー・・・
516デフォルトの名無しさん:2011/09/18(日) 02:13:05.19
>>515
5に" :"が入った場合は結果が一意に決められなくなるので無視するしかないかと
517デフォルトの名無しさん:2011/09/18(日) 04:44:55.16
>>509
06と08が全く同じだけれど、間違いではないのかな?
518デフォルトの名無しさん:2011/09/18(日) 04:47:52.57
>>509
それから(固定長)の意味を教えてください。
519デフォルトの名無しさん:2011/09/18(日) 13:32:27.04
いくら考えても分からないので、教えてください。

Flexible Renamer8.4というファイル名変更ソフトに「条件付正規表現」というのがあるのですが、どう使うのか分かりません。
ネットで調べるとPearl、PHPなんかで、同じような書式があるようなんですが、挙動がまったく理解できません。
ネット上には

(?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

という式があり、aをアルファベット、dをアルファベットとして上式で検索すると
dd-dd-ddとdd-aaa-ddがヒットする、と書いてありますが、dd-aaa-ddはヒットするものの、
dd-dd-ddがヒットしません。

それからよくわかりませんが、

(?(1以上の数字)\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
とするとdd-dd-ddがヒットします。
自分の理解では条件式にある正規表現があれば真の場合の正規表現をマッチさせ、
条件式にある正規表現がなければ偽の場合の正規表現をまっちさせるのだと理解するのですが、
どうも条件式の書き方と制約、そしてその結果と条件式が真、偽のときにどういう挙動をとるのかがよくわかりません。
誰か分かる人教えてください。すみません教えて君でorz もうアタマが痛くなるくらい調べましたが
私には無理でした。
520 ◆/91kCCQXBo :2011/09/18(日) 14:15:57.46
> (?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
(?=なんとか)あれ|それ ← なんとかあれ または なんとかそれ にマッチしてあれ・それを取り出す「先読み」。
1111A11-DEC-12
1112A11-12-12
1234B12-JUN-01
C31-MAR-12
D12-03-11
外側の(?....)の方は、わたしじゃわからないわ
521デフォルトの名無しさん:2011/09/18(日) 14:44:44.43
>>519
if 〜 then 〜 else 〜 と同じ

> (?(?=[^a-z]+[a-z])\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
「(?=[^a-z]*[a-z])」という条件(英字が0文字以上の繰り返しの後に、英字1文字が
出現する)にマッチしたら、真パターンである「\d{2}-[a-z]{3}-\d{2}」でマッチングが行われる。
そうではないなら、偽パターンである「\d{2}-\d{2}-\d{2}」でマッチングが行われる。
従って「dd-aaa-dd」または「dd-dd-dd」のどちらかの文字列にマッチする。

>(?(1以上の数字)\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
これはちょっと違う
([a-z]{3}-)?(?(1)\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
例えばこれだと、「[a-z]{3}-」で始まる場合は、「キャプチャグループ1」に記憶される
そして「キャプチャグループ1」が存在するなら、真パターンである「\d{2}-[a-z]{3}-\d{2}」で
マッチングが行われる。
そうではないなら、偽パターンである「\d{2}-\d{2}-\d{2}」でマッチングが行われる。
従って「aaa-dd-aaa-dd」または「dd-dd-dd」のどちらかの文字列にマッチする。
522521:2011/09/18(日) 14:51:24.41
英字が0文字以上の繰り返しの後に、英字1文字が

英字以外の文字が0文字以上の繰り返しの後に、英字1文字が
523520:2011/09/18(日) 15:03:48.05
(?(condition)yes-pattern|no-pattern) だそうなので、これやってみて。
> (?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
 ↓
  (?([^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
524521:2011/09/18(日) 15:10:13.77
>>523
それじゃエラーになる
条件に使えるのは先読みか戻り読みか1以上の数字だけだよ
525デフォルトの名無しさん:2011/09/18(日) 15:38:15.08
>>402
irvineとかで十分と思う。
526デフォルトの名無しさん:2011/09/18(日) 15:40:35.79
>>467
死にました。
527デフォルトの名無しさん:2011/09/18(日) 15:47:18.69
>>521
ありがとうございます。
>if 〜 then 〜 else 〜 と同じ
そうですよね。そう考えているのですが、条件式の書き方が分からないのと、
結果が分からないのです。さきほどから取り上げている

(?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

だと、おっしゃられるようにたとえば条件式が真の場合の12-abc-34とか、
偽の場合の12-34-56がヒットするはずですが、実際には偽の場合がヒットしません。
FlexRenamer8.4のバグなんでしょうか?

それから、やはり条件式の書き方がわかりません。上式で条件式を.*とした
(?(.*)\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
としたら、とうぜんすべてが真になるはずなので、dd-aaa-ddがヒットするはずですが、ヒットしません。
同様に条件式を
\d*
\d\d
実際の文字列そのものとしてdd-aaa-dd(12-abc-34など)
としてもうんともすんとも言いませんorz なんでなんですかね???
528520:2011/09/18(日) 16:09:24.11
(?=^[^A-Z]+)
なら先頭がA-Zの場合、偽になるはず。ソフト入れてないので中途半端ですみません。

(?(?=^[^A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
1234B12-JUN-01
C31-31-12
529デフォルトの名無しさん:2011/09/18(日) 16:11:40.70
>>524
おお、そうなんですね。条件式の件はちょっと進歩。しかし偽の場合がマッチしないのは謎。
530デフォルトの名無しさん:2011/09/18(日) 16:19:15.86
>>527
たぶんバグなんじゃないかと思う

>やはり条件式の書き方がわかりません。
条件に使えるのは>>524で書いたように(肯定or否定)先読み、(肯定or否定)戻り読み、1以上の数値のいずれか

>(?(.*)\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
「dd-dd-dd」または、直前に「.*」のある「dd-aaa-dd」にマッチさせたいってこと?
それとも「(?=.*)dd-aaa-dd」または「dd-dd-dd」にマッチさせたいってこと?
前者だと (?<=.*) ということになるが、戻り読みは固有長じゃないといけないのでエラーになる
後者だと「.*」は改行以外の0文字以上の繰り返しなので、これでは真パターンのみしか
使われないから、エラーにはならないけど、表現としておかしい

どういう文字列にマッチングさせたいのかいまいち分からない
531520:2011/09/18(日) 16:37:15.08
(?=)は先読みなのでパターンの前に書くなら、戻り読み(?<=)使わないと。
それと[^A-Z]*[A-Z]にマッチしないのは[^A-Z]のみの連続。11-12-20など。
以上 <おじゃましました>
532519:2011/09/18(日) 17:10:05.69
ここID出ないんですね。失礼しました。
職場で扱っているファイルを一気に変更するためにいろいろ調べていたら
当ソフトに突き当たり、いろいろいじっていて、マニュアルを見たところ、条件付正規表現
というものがあり、いろいろ調べていたところでした。まだ具体的にこれが使えるのかどうかは
分からず調べていたところです。しかし、このソフト、(?(条件式)真の場合|偽の場合)という形で
使えるんでしょうかね??? 非常に高機能ではあると思うんだけど。

>>520
最初に提示した式は他のサイトにあったコピペです。それがなぜかそのまま動作しないので
こちらに質問してみました。そもそもPHPとperlとかで動作は違うんでしょうが。
http://www.phppro.jp/phpmanual/php/regexp.reference.conditional.html
http://manual.xwd.jp/reference.pcre.pattern.syntax.html  下のほうの条件付サブパターン
どちらにも同じ式が載っています。
533デフォルトの名無しさん:2011/09/18(日) 18:08:31.74
PHP の PCRE は Perl Compatible Regular Expressions の略だから、ちょっと違うとこはあるけど、大体同じだよ

ttp://www.php.net/manual/ja/reference.pcre.pattern.differences.php

ちなみに Flexible Renamer は Boost.Regex ライブラリを使ってるって書いてあるから、
条件付きサブパターンも使えるっぽいんだけどなあ

ttp://www.boost.org/doc/libs/1_34_1/libs/regex/doc/syntax_perl.html
534デフォルトの名無しさん:2011/09/18(日) 18:19:53.67
>>527
>(?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
>だと、おっしゃられるようにたとえば条件式が真の場合の12-abc-34とか、

大文字小文字が合っていないが? 通常大文字小文字は区別される。
535519:2011/09/18(日) 20:33:03.70
>>534
正規表現の大文字小文字はどちらでも結果は一緒でした。

どなたかこのソフトできちんと条件付正規表現が動くか試していただけません?
なんか意味がわからないです。
536デフォルトの名無しさん:2011/09/18(日) 20:38:42.87
リネーマならRubyやPythonで書いた方が速いかもよ
ここプログラマ板だし
537デフォルトの名無しさん:2011/09/18(日) 20:39:37.33
s/プログラマ/プログラム/
538520:2011/09/18(日) 20:40:49.13
●正規表現の使用環境 Flexible Renamer
●検索か置換か? 置換
●説明
日付の前の文字を入れ替える
●対象データ
ABC11-12-31 \d{2}-[A-Z]{3}-\d{2}
ABC11-DEC-31 \d{2}-\d{2}-\d{2}
ABC2011-12-31 \d{4}-[A-Z]{3}-\d{2}
ABC2011-DEC-31 \d{4}-\d{2}-\d{2}
●希望する結果
XYZ11-12-31
XYZ11-DEC-31
XYZ2011-12-31
XYZ2011-DEC-31
●コメント:こんな感じか書いて投稿してみた
539デフォルトの名無しさん:2011/09/18(日) 20:58:44.06
>>538
条件分岐を使う必然性が感じられないな。対象データはなんか合ってないし。

ABC(?=\d{2}{1,2}-(?:[A-Z]{3}|\d{2})-\d{2}) → XYZ
でいいんじゃね?
540539:2011/09/18(日) 21:01:10.78
あ、>>520さんは質問者ではなかったか。勘違い。
541デフォルトの名無しさん:2011/09/20(火) 02:59:51.01
●正規表現の使用環境
一般社会

●検索か置換か?
検索

●説明
すぐにやれる女を見つけたいです

●対象データ
OL
女子大生
女子高生
キャバ嬢
ヘルス嬢
近所のおばさん
母親

●希望する結果
させこ
やりまん
公衆便所
542デフォルトの名無しさん:2011/09/20(火) 03:12:07.21
>すぐにやれる女を見つけたいです
お前には一生涯マッチしないっ!
543デフォルトの名無しさん:2011/09/22(木) 16:07:10.57
>>527
横、亀ですまんが、バグじゃないよ。
普通にマッチする。
マッチするだろうと思っている対象データがおかしいんでないの。
544デフォルトの名無しさん:2011/09/22(木) 16:11:56.59
蛇足かもしれんが、>>520で書かれてる
D12-03-11
はマッチしないよ
545デフォルトの名無しさん:2011/09/22(木) 16:15:57.42
ごめん。D12-03-11マッチするね。かさねてごめん。
546デフォルトの名無しさん:2011/09/23(金) 14:38:20.95
●正規表現の使用環境
Microsoft .NET Framework

●検索か置換か?
検索

●説明
下記条件(AND条件)のURLを検索したいです。
・特定のドメイン(yahoo.co.jp)がhttp://直後に含まれない
・特定の拡張子(jpg,gif)で終わらない。

●対象データ
1.http://yahoo.co.jp/?=abc
2.http://yahoo.co.jp/abc.jpg
3.http://2ch.net/?=abc
4.http://2ch.net/abc.jpg
・・・など複数URL

●希望する結果
3のみを検索したいです。

よろしくお願いします。
547デフォルトの名無しさん:2011/09/23(金) 14:52:28.06
^http://(?!yahoo\.co\.jp)[^/]+/(?!.*\.(?:jpg|gif)$).*$
548デフォルトの名無しさん:2011/09/23(金) 14:54:24.49
ちょっと修正
^http://(?!(?:[/]+\.)?yahoo\.co\.jp)[^/]+/.*(?!\.(?:jpg|gif))$
549デフォルトの名無しさん:2011/09/23(金) 15:26:19.22
>>548
横レスだけど
それだと
http://2ch.net/abc.jpg
にマッチすると思う
550デフォルトの名無しさん:2011/09/23(金) 15:57:55.44
(.(?!\.(jpg|gif)))*$
にしないとだめぽ
551デフォルトの名無しさん:2011/09/23(金) 18:03:40.59
>>548
>>550
試してみましたがマッチしないです。。。
552デフォルトの名無しさん:2011/09/23(金) 18:32:13.71
あ、できました!
(?!yahoo\.co\.jp)([-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#](?!\.jpg|\.gif))*
553デフォルトの名無しさん:2011/09/23(金) 19:32:38.77
^http://(?!(?:[/]+\.)?yahoo\.co\.jp)[^/]+/(?!.*\.(?:jpg|gif)$).*$

これでおk
554デフォルトの名無しさん:2011/09/23(金) 23:32:29.42
(う|ち|ま)んこ
555デフォルトの名無しさん:2011/09/24(土) 01:17:45.25
^http://(?!([^/]+\.)?yahoo\.co\.jp/)([^/]+/)+[^.]*(?!.*\.(jpg|gif)$)
やってみた
556デフォルトの名無しさん:2011/09/24(土) 01:19:43.58
他の拡張子でも検索されてしまう
557デフォルトの名無しさん:2011/09/24(土) 01:23:25.36
こういう場合は二回に分けるのがセロリ
558デフォルトの名無しさん:2011/09/24(土) 02:08:01.06
逆に考えて、
http://(?:(?:[^/]+\.)?yahoo\.co\.jp/|[^/]+/.+\.(?:jpg|gif)$)
にマッチしないものを検索とかじゃダメなのかな?
559519:2011/09/24(土) 16:28:10.96
>>543
お返事ありがとうございます。
そうですか。対象データがおかしい、というのがよく分からないのですが、うちでは

・アプリケーション Flexible Renamer v8.4
 「高度なリネーム」「正規表現」
・検索の正規表現
 (?(?=[^a-z]*[a-z])\d{2}-[a-z]{3}-\d{2}\|\d{2}-\d{2}-\d{2})
 (?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

・OS Win7 HomePremium 64bit
・対象データ たとえば以下の例
 d12-03-11.pdf、12-03-11.pdf……ともにマッチせず。
 22-asd-12.pdf……マッチする

でNGです。状況を再現したいので、ぜひ実験の詳細を教えてください。
560デフォルトの名無しさん:2011/09/24(土) 17:48:55.34
>>559
543ではないが、
>・検索の正規表現
> (?(?=[^a-z]*[a-z])\d{2}-[a-z]{3}-\d{2}\|\d{2}-\d{2}-\d{2})
"|"の前の"\"は不要だよね
それからリネーム方法:−正規表現の右側のボタンを押して、
大文字と小文字を区別するとわかってくるかもしれない
561デフォルトの名無しさん:2011/09/24(土) 17:49:20.01
>>559
×12-03-11.pdf
○12-03-11
○d12-03-11
562デフォルトの名無しさん:2011/09/24(土) 20:39:30.02
>>560>>561
ありがとうございます! やっと望む結果が出ました! このソフト、拡張子は除外するものと
思い込んでいたことがまずかったみたいです。12-03-11.pdfだと、真の条件でマッチさせる
ことになって、偽の場合になってなかったことが原因のようです。
それに加えて正規表現のスペルミスとかもしてたのかもしれません。スペルミスを防ごうと
WEBからコピペしてたんですが、逆にそれがアダになりました。
たいへん、たいへんお騒がせしました。とても勉強になりました。ありがとうございます。
563デフォルトの名無しさん:2011/09/25(日) 00:15:30.57
●正規表現の使用環境
Perl5 or Javascript

●検索か置換か?
検索

●説明
ダブルクオートに囲まれた文字列を取得したい
ただ、「\」の次の文字はエスケープされた文字として扱う

●対象データ
"hogefuga"
"hoge\"fuga"
"hoge\\"fuga"

●希望する結果
hogefuga
hoge"fuga
hoge\


上記のようなありきたりな命題にトライしていたのですが、以下の正規表現のうち1ではうまくいくのに2ではうまくいきませんでした
1. /"((?:(?:\\.)|[^"])*)"/
2. /"((?:[^"]|(?:\\.))*)"/


ただ、僕にはこれが両方同じ意味に見えるのです

なぜこの場合、2ではうまくいかないのでしょうか
気になって眠れません
詳しい方解説お願いします
564デフォルトの名無しさん:2011/09/25(日) 00:33:43.88
>>563
\ は [^"] を満たしますから、(?:\\.) は永遠にパスしません。
565デフォルトの名無しさん:2011/09/25(日) 00:38:16.13
>>563
| は左側から評価されるからね。
566デフォルトの名無しさん:2011/09/25(日) 00:51:44.06
>>563 寝ちゃったかな?
パターン1|パターン2 のとき、パターン1のマッチを調べてダメだったらパターン2のマッチを調べるってことですよ。

ところで、結果はこうですよね。
hogefuga
hoge\"fuga
hoge\\
567デフォルトの名無しさん:2011/09/25(日) 01:07:16.19
>>564-566

なるほど!
2では[^"]がエスケープまで食ってしまってたわけですか
/"((?:[^"\\]|(?:\\.))*)"/
なら同じ意味ですね
分かってしまえばなぜこんなことで悩んでいたのか・・・

これでゆっくり眠れます!
ありがとうございました
568555:2011/09/25(日) 08:29:07.36
>>553 その前の人のレスからいろいろ勉強になった。(※)
^http://(?!([^/]+\.)?yahoo\.co\.jp).+/(?!.*\.(jpg|gif)).*

bregonig.dll Ver.1.43 with Oniguruma 5.9.1
sakura Ver.1.6.4.0 (※)C#で試したかったが、だれかソースくれないか?
>>557 前後に分けるとこうなる。
^http://(?!([^/]+\.)?yahoo\.co\.jp).*
.*/(?!.*\.(jpg|gif)).*
569デフォルトの名無しさん:2011/09/25(日) 22:36:07.14
>>568
>^http://(?!([^/]+\.)?yahoo\.co\.jp).+/(?!.*\.(jpg|gif)).*
これでOKそうすな・・・
570デフォルトの名無しさん:2011/09/27(火) 14:27:43.37
小文字英字、大文字英字、数字、「@_#」、のどれか3つが入っているかの条件は正規表現で可能でしょうか?
どれか3つのやり方がわかりません。

以下は全く動作せず…
^(?=(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])|(?=.*[A-Z])(?=.*[a-z])(?=.*[@_#])).*$
571デフォルトの名無しさん:2011/09/27(火) 15:00:10.40
^(?:[^0-9A-Za-z#@_]*[0-9A-Za-z#@_]){2}[^0-9A-Za-z#@_]*$

言ってることがよく分からないけどこういうこと?
572デフォルトの名無しさん:2011/09/27(火) 15:16:26.09
>>571
説明が下手くそですみません。
各パターン4種類の内、必ず3種類以上なのです。

なので頂いたものだと必ず3種類以上にならないので、他のパターンが必要です。
573デフォルトの名無しさん:2011/09/27(火) 15:18:40.10
次のように24通りを列記すれば良い。
逆に言えば列記しないとダメじゃないかな。

^(.*
([A-Z].*([a-z].*[0-9@_#]|[0-9].*[a-z@_#]|[@_#].*[a-z0-9])
|[a-z].*([A-Z].*[0-9@_#]|[0-9].*[A-Z@_#]|[@_#].*[A-Z0-9])
|[0-9].*([A-Z].*[a-z@_#]|[a-z].*[A-Z@_#]|[@_#].*[A-Za-z])
|[@_#].*([A-Z].*[a-z0-9]|[a-z].*[A-Z0-9]|[0-9].*[A-Za-z])
).*)$

長いので入れた改行は無視してね。
574デフォルトの名無しさん:2011/09/27(火) 15:20:14.73
そんなの正規表現一発でやろうとすんなよ
575デフォルトの名無しさん:2011/09/27(火) 16:14:59.93
正規表現エンジンが何かわからんけど、鬼車ならこんな感じ?
^((?-i)(?=.*[A-Z])((?=.*[a-z])(?=.*[0-9])|(?=.*[a-z])(?=.*[@_#])|(?=.*[0-9])(?=.*[@_#]))|(?=.*[a-z])(?=.*[0-9])(?=.*[@_#])).*$
最初の(?-i)は大文字小文字を区別
576デフォルトの名無しさん:2011/09/27(火) 19:26:35.96
>>572
24パターンをorで繋げるしかない
どう考えても効率が悪いと思うが
577デフォルトの名無しさん:2011/09/27(火) 21:40:41.11
>>574同意。perlなら、こんな感じか。
$_='hogehoge';
if (/[A-Z]/ + /[a-z]/ + /[0-9]/ + /[\@_#]/ >= 3) { OK }
578デフォルトの名無しさん:2011/10/03(月) 23:01:42.29
Jscriptであるフォルダにあるpdfファイルを「フォルダ名_設計図.pdf」というようにしたいのだけど
先読み肯定で使った正規表現のグループのフォルダ名を置換文字列に使うことってできるんでしょうか?
なんどやってもできないんだけど、、、、、、
579デフォルトの名無しさん:2011/10/03(月) 23:45:16.17
(?=フォルダ名)
ってなってるなら
(?=(フォルダ名))
ってやる

てか、どう書いてダメだったか書いてくれると助かるなぁ。
上記のように書いてもダメだったとか言われると寂しいし。
580デフォルトの名無しさん:2011/10/04(火) 09:40:31.62
>>579
スクリプトが手元になくてスペルミスとかしてたらややこしくなるので書きませんでした。できるのか。頑張ってみます。
ありがとうございます!
581デフォルトの名無しさん:2011/10/04(火) 09:49:14.19
>>579
書き込みしてから気づいたけど
(?=(フォルダ名)別の文字列)
としてます。これがだめなんでしょうか?
582デフォルトの名無しさん:2011/10/04(火) 10:20:36.31
お前の目は節穴か? 窓の外を見ろ
583582:2011/10/04(火) 10:21:37.16
誤爆スマソ
584デフォルトの名無しさん:2011/10/04(火) 20:45:19.89
フォルダ名をわざわざキャプチャする必要あんのかこれ
変数に格納されてるやつをそのまま使えばいいんじゃないの?
585デフォルトの名無しさん:2011/10/04(火) 22:12:43.34
>>584
WSHのJscriptでそんなことできるん? できるなら教えてくれ。
結局WScript.argument(0).split("\\").slice(-2,-1)とかなんとかやってごまかそうかなと思っているけど。
586デフォルトの名無しさん:2011/10/04(火) 22:28:21.34
具体例をあげてみたらどうだろう。
できるできないのどっちかもわかると思うし
587デフォルトの名無しさん:2011/10/04(火) 23:05:06.46
正規表現の配列があって各正規表現にIDが振ってあります。
ある入力について、どれかの正規表現がマッチするならそのIDを返す!
というのを効率的にやるテクニックとかないでしょうか。

前方一致ならトライ木を使うのですが
正規表現の場合にどうするのがいいのか分からない。
言語はrubyを使っています。
588587:2011/10/04(火) 23:23:07.32
>>587
> p Regexp.new("(pattern1)|(pattern2)|(pattern3)").match("pattern2")
#<MatchData "pattern2" 1:nil 2:"pattern2" 3:nil>

()と|で結合したあと、MatchDataを1からlengthまでみてnil以外がヒットした正規表現の添え字+1か。
きっとエンジンが効率よくやってくれそうだし、解決しました。
589587:2011/10/04(火) 23:39:38.93
patternの中に()があると$nがずれるのでだめでした。
590デフォルトの名無しさん:2011/10/04(火) 23:48:56.34
もしその()をあとで使う予定がないのなら(?:)にして捨ててしまえばいいと思う
591デフォルトの名無しさん:2011/10/05(水) 04:28:39.04
>>587
そういう時こそ名前付きキャプチャ

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
re_table = { :one => /(?<one>a+)/, :two => /(?<two>b+)/, :three => /(?<three>c+)/ }
re = /\A(?:#{Regexp.union(*re_table.values)})/

%w(abc bca cab).each do |s|
  match = re.match s
  p match
  re_table.keys.each do |name|
    p match[name]
  end
end

outputs:
#<MatchData "a" one:"a" two:nil three:nil>
"a"
nil
nil
#<MatchData "b" one:nil two:"b" three:nil>
nil
"b"
nil
#<MatchData "c" one:nil two:nil three:"c">
nil
nil
"c"
592デフォルトの名無しさん:2011/10/05(水) 16:34:14.94
性器表現
593デフォルトの名無しさん:2011/10/09(日) 09:09:28.47
ボウヤ、それ面白いと思ってるの?
594デフォルトの名無しさん:2011/10/10(月) 17:03:52.30
正規表現は、既出かどうかってのがわかりにくいね。

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

●検索か置換か?
検索

●説明
変数文字列とその添字の取得

●対象データ
$AAA.BBB+$CCC.DDD.EEE(1234)-#FFF*#GGG.HHH(567)

●希望する結果
検索1回目
group1 : $AAA.BBB

検索2回目
group1 : $CCC.DDD.EEE
group2 : 1234

検索3回目
group1 : #FFF

検索4回目
group1 : #GGG.HHH
group2 : 567


($.*)\\(([0-9]*)\\)
これで、$CCC.DDD.EEE(1234)をみつけれるのは出来たけど、添え字が無い場合を引っ掛けるのができない。
595デフォルトの名無しさん:2011/10/10(月) 17:13:24.51
添え字を検索してる部分のケツに「?」つけてみたら?
596デフォルトの名無しさん:2011/10/10(月) 17:23:36.99
>>595
御幣があったかも。

($.*)\\(([0-9]*)\\) これで
$CCC.DDD.EEE(1234) この文字列から

group1 : $CCC.DDD.EEE
group2 : 1234

といのが取れるところまで出来てて

$AAA.BBB+$CCC.DDD.EEE(1234) この文字列から

1回目
group1 : $AAA.BBB

2回目
group1 : $CCC.DDD.EEE
group2 : 1234

という結果を取得する方法がわからない。
597デフォルトの名無しさん:2011/10/10(月) 18:04:55.62
(\$[A-Z]{3}(?:.[A-Z]{3})+)(?:\(([0-9]+)\))?
598デフォルトの名無しさん:2011/10/10(月) 20:42:05.60
>>597
ありがとう。でも、上手くいかなかったよ。

後、伝え方が悪かったので以下のフォーマットなのでピリオドがかならず入るというわけではないのと
3文字という縛りも無い。

$[変数名](添字)
$[変数名]
599デフォルトの名無しさん:2011/10/10(月) 21:11:12.85
([$#][\w.]+)(?:\((\d+)\))?
600デフォルトの名無しさん:2011/10/10(月) 21:23:51.36
601デフォルトの名無しさん:2011/10/10(月) 21:29:59.52
なんでこのスレに質問に来る奴って、
正規表現の前に、日本語での意志疎通能力を身につけろ
って感じの奴が多いの?
602デフォルトの名無しさん:2011/10/10(月) 21:31:34.19
>>599
ありがとう、いけた!
603デフォルトの名無しさん:2011/10/10(月) 21:38:24.99
>>601
答えてるやつも同じような感じだからいいんじゃね?
604599:2011/10/10(月) 22:16:37.55
>>601
まったく同じくことを感じていたよ
質問者の文章に戸惑いを覚えつつ、テキトーに回答してみた
2ch内だとこのスレはまだマシな方でしょ
御幣もち食いたくなった
605デフォルトの名無しさん:2011/10/11(火) 09:58:42.99
●正規表現の使用環境
C#

●検索か置換か?
検索(完全一致)

●説明
・擬似ワイルドカードもどきを作成したい。
・ワイルドカードには"?"のみを10回連続で使用可能、"*"は不可。
・対象データは"'(シングルクウォート)"ではじまり"'(シングルクウォート)"で終わる。
・'(シングルクウォート)内であれば、"?"は複数箇所で使用可能。
・ワイルドカード以外の文字(列)は仮で"○"として考える。

●対象データ
ex.)
'○○???'
'???○○○'
'???○○○???'
'○○???○○○'
'○○???????????○○○'

●希望する結果
'○○???' ←match
'???○○○' ←match
'???○○○???' ←match
'○○???○○○' ←match
'○○???????????○○○' ←unmatch(?が11回連続)
606デフォルトの名無しさん:2011/10/11(火) 11:02:56.24
[^?]\?{1,10}[^?]
607605:2011/10/11(火) 11:44:00.71
>>606
それだと
>'???○○○???' ←match
にマッチしないと思うのですが。
また、対象データはあくまで例であり、
'???○○○???○○○???○○○???○○○???○○○???○○○???・・・'
というように繰り返す可能性もあり、開始と終わりは"'(シングルクウォート)"です。
608デフォルトの名無しさん:2011/10/11(火) 11:52:29.58
11回連続の物にマッチする物を探して
マッチした物をアウトとする方が楽じゃないの?と思ってしまうのだが
609デフォルトの名無しさん:2011/10/11(火) 12:18:36.31
>>605
'[^?]*?{1,10}(?:[^?]+?{1,10})*[^?]*'
610605:2011/10/11(火) 13:20:11.12
>>609
http://regex-recipe.frozenlib.net/
ここで使える形で再度教えていただいてもよろしいでしょうか?
(?:)
この使い方がよくわからないもので。。。
611デフォルトの名無しさん:2011/10/11(火) 14:51:39.91
>>610
>>609じゃないけど
'[^?]*\?{1,10}(?:[^?]+\?{1,10})*[^?]*'
612605:2011/10/11(火) 15:20:38.75
>>609
>>611
(?:)がどうとかではなく、単に?のエスケープが必要だったんですね
ありがとうございました。

追加の要望で申し訳ないのですが、>>605>>607の条件に加えて
・'???'等ワイルドカードのみ、'○○○'等ワイルドカード文字("?")なしはNomatchとする
とした場合はどうなりますか?
613デフォルトの名無しさん:2011/10/11(火) 15:50:26.95
擬似ワイルドカード表現が正当なものかチェックしたいのかな。
追加の要望は別の用途なのか、改良なのか。
>>611だと今でも'ABC'にマッチしないけどいいの?

というかさ、正規表現一発で終わらせようとすると、正規表現自体が思惑通りの結果を
出してるかどうかのチェックに悩まされたり、思わぬバグ混入になるやもしれないよ。
''(空文字)とか'A'B'とかやその他の文字列に完全マッチ/部分マッチしないかとか、
?終わり/始まり、1文字のみはどうかとかね。
実際、あなたも回答者もチェックしきれてないでしょ。
一発で終わらせようとせず、チェック項目ごとに何段階かに分けて処理した方がいい。
>>608の提案もグッドだと思う。

(?:)は記憶(キャプチャ)しないグループ。
繰り返しの\1とか、置換の$1とかに入らない。
繰り返しや置換を使わない場合、ただの飾りです。
614609:2011/10/11(火) 17:35:31.78
>>611
フォローthx

>>612
'(?!\?*')[^?]*\?{1,10}(?:[^?]+\?{1,10})*[^?]*'
615デフォルトの名無しさん:2011/10/11(火) 19:43:37.54
>>613
あとで使わないことを明示することでメモリ節約および速度向上が見込めるよ。
微々たるものの場合が多いけど、クセ付けるとよいかと。
616デフォルトの名無しさん:2011/10/12(水) 18:28:29.06
性器表現
617デフォルトの名無しさん:2011/10/12(水) 18:49:04.20
618デフォルトの名無しさん:2011/10/12(水) 21:18:09.59
定期的に湧くな
619デフォルトの名無しさん:2011/10/12(水) 21:25:55.80
bbspinkに姉妹スレでも作るか
620デフォルトの名無しさん:2011/10/13(木) 20:45:16.60
●正規表現の使用環境
Windowsコマンドプロンプト、filestr

●検索か置換か?
検索

●説明
全角英の大文字または小文字または全角数字が含まれているか検索したい

●対象データ
以下batで失礼します
set a="Ape"
set b="Bape"
set c="222"
●希望する結果
%a%、%b%、%c%から検索して、"Ape"、"Bape"、"222"、という結果を表示できるようする正規表現または、それを含めたコマンド
●試したコマンド
echo %a%|findstr /r "[A-Z]"
echo %b%|findstr /r "a-z"
echo %c%|findstr /r \[0-9\]
echo %c%|findstr /r "\[0-9\]"
echo %a%|findstr "[A-Z]"
echo %b%|findstr "a-z"
echo %c%|findstr a-z
findstr /r [A-Z] %a%
findstr /r [a-z] %b%
findstr /r [0-9] %c%
上記のコマンドは間違っていて結果が全て空欄になっています。正しい場合は
set d=" あああ"
echo %d%|findstr /r /c:"^. ."
こちらの画面を見て頂ければと思います。それではどうかよろしくお願いします。
621デフォルトの名無しさん:2011/10/13(木) 21:23:20.21
>>620
set a="111"
set b="Ape"
echo %a%|findstr "[0123456789]"
echo %b%|findstr "[ABCEDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]"
622デフォルトの名無しさん:2011/10/13(木) 22:02:28.61
>>621
成功する事ができました。ありがとうございます。
"-"は始点と終点の全てを含むみたいな意味では無かったのですね。
なるほど・・・勉強になりました。
623デフォルトの名無しさん:2011/10/13(木) 23:14:43.76
>>622
始点から終点のすべてを含むであってるよ。

ただ、文字クラスがマルチバイトに対応していないんじゃないかな。
echo "a" | findstr "[B]"
このとき、 a(0x61) は [B] ([0x8161]) にマッチしてしまう。
624デフォルトの名無しさん:2011/10/14(金) 18:20:41.89
●正規表現の使用環境
sakura editor

●検索か置換か?
検索

●説明
.jpgや.png、.zipなど特定の拡張子以外のurlを検索したい

●対象データ
http://www.hogehoge.com/aaaa.html
http://www.hogehoge.com/bbbb.jpg
http://www.hogehoge.com/cccc.png
http://www.hogehoge.com/dddd

●希望する結果
http://www.hogehoge.com/aaaa.html
× http://www.hogehoge.com/bbbb.jpg
× http://www.hogehoge.com/cccc.png
http://hogehoge.com/dddd

https?:\/\/[!-~]+ でurl全体は検索できたのですが
お尻が〜以外という条件を加えたく↑に[^(jpg|png)]とか付けてみたけど駄目でした
625デフォルトの名無しさん:2011/10/14(金) 18:46:01.58
>>612はどこへ行った?
626デフォルトの名無しさん:2011/10/14(金) 19:27:35.32
>>624
http://(.(?!\.(jpg|png)))*$
627デフォルトの名無しさん:2011/10/14(金) 19:43:19.86
>>626
ありがとうございます
本当は
「今日は晴れ http://www.hogehoge.com/aaaa.html 明日は雨」
↑の様な文中のurlのような物も検索したかったのですが、
情報小出しになってしまうので、教えてもらったヒントでググってきます
感謝!
628デフォルトの名無しさん:2011/10/14(金) 21:17:23.01
過去ログなんて1ヶ月も経てば忘却の彼方か... (>>546-)

つか、それって「".jpg"も".png"も含まないURL」の検索だよな。
拡張子限定にはなってない。

まぁ実際の運用上問題になることはほとんどないだろうけど。
629624:2011/10/14(金) 22:03:23.94
>>628
返す言葉もありません、申し訳ない
(?!)をうまく使えば行けるか?ということまでは分かったので
後は自力で頑張ってみます、すみませんでした
630デフォルトの名無しさん:2011/10/14(金) 23:43:50.23
>>624
http://(?>[^\s]+)(?<!\.jpg|\.png)
631デフォルトの名無しさん:2011/10/15(土) 10:15:50.41
>>623
亀レスで失礼します。
どうもありがとうございました。確かに半角であれば"[A-Z]"など使えるみたいでした。
/rと書いてましたがデフォで正規表現の状態だったのですね。

あれから安心しきっていたのですが、全角が使えなかったのは
文字クラス[]がマルチバイト文字に対応していないとのことで
ちょっと真剣に精査してみます。ちょうどマルチバイト文字が疑問でした。
(調べていた時にa(0x61) は [B] ([0x8161])といった表現を良く見た気がしたので )

原因追究までどうもありがとうございました。大きく前進できました。
632デフォルトの名無しさん:2011/10/17(月) 20:31:29.89
正規表現を使って2ちゃんねるメニューのカテゴリ周りの太字や改行のHTMLタグを外したいです。

※1----------------------------------
<BR><BR><B>地震</B><BR><A HREF=http://headline.2c.2ch.net/eq/>臨時地震</A><br> ... 緊急自然災害</A><BR><BR><B>おすすめ</B><BR><A HREF=http:// ....

地震<A HREF=http://headline.2c.2ch.net/eq/>臨時地震</A><br> ... 緊急自然災害</A>おすすめ<A HREF=http:// ....
--------------------------------------

そのため以下のように正規表現のコードを作りました。
str.replace(/<BR><BR><B>(.+)<\/B><BR>/, '$1');

実行したところ、

※2----------------------------------
地震</B><BR><A HREF=http://headline.2ch.net/bbynamazu/>地震headline</A><br><A HREF=http://toki.2ch.net/namazuplus/> ...
--------------------------------------

のようになり、メニューデータ中の先頭の"<BR><BR><B>"と末尾の"</B><BR>"を見てしまっているらしく、うまく動作しませんでした。
データを分割してその都度処理をかけようかとも思いましたが、いまいち効率が悪そうです。
どのように書けば※1のように動作させられるのでしょうか?

実装言語はJavaScriptです。
633デフォルトの名無しさん:2011/10/17(月) 21:09:51.15
>>632
最短一致
634デフォルトの名無しさん:2011/10/17(月) 21:29:30.86
>>633
ググッて解決しました。
ttp://hodade.adam.ne.jp/seiki/page.php?study4

ヒントありがとうございました。
635デフォルトの名無しさん:2011/10/18(火) 13:47:19.74
JavaのStringについてですが
str.matches("^[a-zA-Z0-9\\(\\)]+$");
というように()を判定したいのですがエラーになってしまいます。
()はどのように指定すればよいでしょうか?
636デフォルトの名無しさん:2011/10/18(火) 14:15:49.25
>>635
str.match(/^[a-zA-Z0-9()]+$/)
637デフォルトの名無しさん:2011/10/18(火) 16:09:06.31
●正規表現の使用環境
NoEditor
●検索か置換か?
検索
●説明
テキストに書いたURLから特定の場所の文字列を抽出したい。

●対象データ
"http://半角英数列X/a/半角数列A/半角英数列B/"

●希望する結果
半角数列A

どうかよろしくお願いします。
638デフォルトの名無しさん:2011/10/18(火) 17:41:02.84
>>636
それってJavaScriptじゃないでしょうか?
639デフォルトの名無しさん:2011/10/18(火) 18:41:44.95
>>635
[]で指定する時はエスケープいらなかったはずだけど
640デフォルトの名無しさん:2011/10/18(火) 21:45:53.08
>>638
str.matches("^[a-zA-Z0-9()]+$");
641デフォルトの名無しさん:2011/10/18(火) 21:48:14.77
>>640
それダメなんですよねー
642デフォルトの名無しさん:2011/10/18(火) 23:00:00.57
>>641
エラーが出るってのは例外でてるってことでいいの
643デフォルトの名無しさん:2011/10/18(火) 23:34:37.20
そうっす
644デフォルトの名無しさん:2011/10/19(水) 05:09:14.81
これはひどい質問者だな
645デフォルトの名無しさん:2011/10/19(水) 05:56:46.55
JavaのStringのmatchesは完全一致らしいけど
とりあえずこれはtrueになるね

"int fooABC123(void)".matches("[a-zA-Z0-9() ]+");
"\\".matches("\\\\");
646デフォルトの名無しさん:2011/10/19(水) 09:45:17.32
>>634
なかなか初心者向きのページで、これからって人にいいね。
ちょっと勉強してくる
647デフォルトの名無しさん:2011/10/27(木) 00:36:45.31
<hoge>aaa</hoge>
bbb
<hoge>ccc</hoge>

<hoge></hoge>に囲まれてる文字を大文字に置き換える処理をしてるのですが、
<hoge>(.*)</hoge>で一応できます。
<hoge>(.*)?</hoge>と?をつけてもできるのですが、
どっちが正しいのでしょうか?
648647:2011/10/27(木) 00:45:02.81
ちなみに言語はPHPでpreg_replaceで最初にマッチした1つではなく、マッチしたものの全置き換えをしています。
649デフォルトの名無しさん:2011/10/27(木) 00:54:46.79
ちゃんとやるなら
([^<]+)こうすべきだろ
650デフォルトの名無しさん:2011/10/27(木) 02:19:10.46
[[$〜$]]
〜の部分を取りたいのですが
[[$test$]]$]]のように
〜の部分にも$]]を含む場合
test$]]を取りたいのですが
こういう場合はどういう記述をしたらいいのでしょうか?
651デフォルトの名無しさん:2011/10/27(木) 02:29:26.54
>>650
[[$test$]]$]]$]] のときは?
[[$test$]]$]]$]]$]]$]]$]]$]]$]]$]]$]] のときは?
652650:2011/10/27(木) 03:02:31.73
>>651
>[[$test$]]$]]$]] のときは?
test$]]$]]
>[[$test$]]$]]$]]$]]$]]$]]$]]$]]$]]$]] のときは?
test$]]$]]$]]$]]$]]$]]$]]$]]$]
です。

[[$〜$]]は文章中に1箇所だけではなくいくつかあります。
653デフォルトの名無しさん:2011/10/27(木) 04:05:11.32
最長一致でいいなら普通に取ればよくね?
654850:2011/10/27(木) 04:42:40.78
>>853
最長一致がどういうことかはよくわかりませんが、
言葉の意味通りに捉えると
[[$test$]]$]]あいうえお[[$test2$]]の時
『test$]]』と、『test2』の2つに一致してほしいわけですが
『test$]]$]]あいうえお[[$test2』に一致してしまわないでしょうか?
もし違ってたらすみません。
655デフォルトの名無しさん:2011/10/27(木) 05:20:27.99
じゃあ[以外が続いて$]]でよくね
656650:2011/10/27(木) 07:41:09.65
ありがとうございます。
教えていただいた方法で大丈夫そうです。
657647:2011/10/27(木) 09:23:05.93
>>649
レス遅くなってすみません。
(.*)に<が入ってることも考慮したいのですが、
その場合はどうしたらいいでしょうか?
<hoge>hoge</hoge></hoge>
みたいな感じのとかです。
658デフォルトの名無しさん:2011/10/27(木) 11:19:51.80
すいません、ものすごく初歩的なのですが
URL変換の正規表現についてお伺いしたいです。

<rule>
<from>category/(.*)\.html</from>
<to type="forward">/servlet?action=category&type=$1</to>
</rule>
は正常に動作するんですが、パラメータが複数の場合が解りません。
<rule>
<from>category/【(.*)\】/(.*)\.html</from>
<to type="forward">/servlet?action=category&type=$1&type1=【$2】</to>
</rule>
【】内はどのように指定すればよろしいですか?
659デフォルトの名無しさん:2011/10/27(木) 14:16:37.29
>>657
<hoge>([^<]+?)</hoge>
660デフォルトの名無しさん:2011/10/27(木) 17:41:46.66
>>659
たぶん
hoge</hoge>
が取りたいって言ってる
661デフォルトの名無しさん:2011/10/28(金) 02:07:58.52
>>657
<hoge>((.(?!<hoge>))*)</hoge>
>>658
category/([^/]+)/(.+)\.html
662デフォルトの名無しさん:2011/10/28(金) 14:47:11.91
<hoge><hoge>aaa</hoge></hoge>

aaa</hoge> をとりたいのか
わけわからんな
663デフォルトの名無しさん:2011/10/28(金) 18:26:35.79
それを大文字にすると
AAA</HOGE>

>(.*)に<が入ってることも考慮したいのですが、
考慮とは何を意味するのか分からないし、
そもそも質問者は正規表現が知りたいとは一度も言ってないな
664デフォルトの名無しさん:2011/10/29(土) 17:07:50.98
abchjBFG以外の連続する文字というのはどう書けばいいでしょうか?
[^d-gik-zAC-EH-Z]+ではだめなようでした
665デフォルトの名無しさん:2011/10/29(土) 17:19:09.19
[d-gik-zAC-EH-Z]+でいける
ちなみに[^abc]はabc以外の任意の一文字って意味
666デフォルトの名無しさん:2011/10/29(土) 17:27:46.91
どうでもいいけど、それならむしろ[^abchjBFG]+の方が
否定すべき文字が一目瞭然でいいと思う。表現も簡潔だし。
667デフォルトの名無しさん:2011/10/29(土) 17:36:23.11
[^abchjBFG]+は\b\0\0\bにもマッチするよ
668664:2011/10/29(土) 18:07:31.64
>>665-667
みなさんありがとうございます
参考になりました
669デフォルトの名無しさん:2011/10/30(日) 17:10:22.22
文字クラスの積を使っても良ければ、直接書けるけどね。
[A-Za-z&&[^a-chjBFG]]+
670デフォルトの名無しさん:2011/11/01(火) 09:17:55.02
UTF8からSJISに変換する前に
Category propertiesなどで、日本語の範囲内かチェックしておきたいのだけど
何処かに良い見本は無い?
671デフォルトの名無しさん:2011/11/01(火) 12:10:35.18
>>670
文字コード ライブラリでググれ
672デフォルトの名無しさん:2011/11/02(水) 16:58:54.60
URIの正規表現で質問させてください

PHPにて英数字、エンコードした時の文字とか有り得る文字以外はValidateチェックにて弾きたいと思うのですが、どのような正規表現が書けるものなのでしょうか?
[?&/%_-]*とかホワイトリスト的に書き加えようと思ったのですが、それ以外の有り得る文字列が分かりませんでした

・URI指示にてまず有り得ない文字が入っていたら排除したい
・NULLバイトなどセキュリティ的に問題があるものを排除したい

そもそもNULLバイトの場合は正規表現で省くのではなく、preg_match('/\0/', $uri)などで弾くのかもしれませんが
673デフォルトの名無しさん:2011/11/02(水) 17:05:20.24
PHPならなんか素敵な便利関数がありそうな気がするけど
674デフォルトの名無しさん:2011/11/02(水) 17:17:37.83
>>673
最初、|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|iとしたのですがダメで、
Zend_Uriというライブラリがあるのですが、それ使っても普通にパスを通ってしまいました

で、自分で正規表現を使って・・・と思ったのですが、実力不足で・・・
675デフォルトの名無しさん:2011/11/02(水) 18:24:02.87
RFC的に厳密に、ってことなら適当なところで妥協した方がいいと思うけどね。
現実的な方法論ではない。
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
676デフォルトの名無しさん:2011/11/02(水) 18:42:38.64
ていうか今んとこ要求としては、とにかく、絶対にありえない文字がどっかに入ってるものを
排除したい、ということであって、バリデーションじゃないわけだよね。

だったら preg_match('/\0/', $uri) とかの羅列で弾いとけば?
677デフォルトの名無しさん:2011/11/03(木) 01:28:11.97
やっぱ量指定子っておもくなるんだね。100万文字くらいある奴でかなり違った
678デフォルトの名無しさん:2011/11/03(木) 02:17:36.94
環境によって重かったり軽かったりいろいろ。

A{100}
AA{99}
A{99}A
(?:AAAAAAAAAA){10}
AAA・・・AAA (100個)

いろいろな書き方が出来るからその環境に合わせて最速の方法で書く。
679デフォルトの名無しさん :2011/11/03(木) 07:25:59.87
http://sourceforge.jp/projects/regexpress/
の正規表現練習ツールってどうなの?
680デフォルトの名無しさん:2011/11/03(木) 10:06:22.47
>>678
おお。すごいね。こんなにいろいろ書き方あるもんなのか。
681デフォルトの名無しさん:2011/11/04(金) 11:13:49.35
0パディングされてない1〜3桁の数字のみにヒットさせる正規表現ってどのように書けますか?

ヒットする例
0
9
10
19
99
100
999

ヒットさせない例
00
000
09
010
019
099
0100
999
682デフォルトの名無しさん:2011/11/04(金) 11:48:14.93
難しいな、999はヒットするけどヒットさせないのか。
683デフォルトの名無しさん:2011/11/04(金) 12:08:24.08
すいませんヒットさせない例の999の部分は消してください
684デフォルトの名無しさん:2011/11/04(金) 12:09:57.81
言語は問いませんが
例えば
[0-9]|[1-9][0-9]|[1-9][0-9][0-9]
とかけますけど
もっとかっこよく書きたいんです
685デフォルトの名無しさん:2011/11/04(金) 12:26:01.30
[1-9]([0-9]){0,2}
しか思いつかないヘタレです
686デフォルトの名無しさん:2011/11/04(金) 12:30:41.96
それだと0にヒットしない
687デフォルトの名無しさん:2011/11/04(金) 12:58:28.78
[^0-9][0-9]([1-9]){0,2}[^0-9]
688デフォルトの名無しさん:2011/11/04(金) 13:01:11.90
^[1-9]?[0-9]?[0-9]$
689デフォルトの名無しさん:2011/11/04(金) 13:02:39.36
>>687
それは先頭が数字以外のものに引っかかる

>>688
それは01とか03に引っかかる
690688:2011/11/04(金) 13:03:11.06
駄目だった。。
691688:2011/11/04(金) 13:08:34.85
^([1-9][0-9]?)?[0-9]$
これならいけるか。
692デフォルトの名無しさん:2011/11/04(金) 13:14:08.90
(?:[^0-9])([0-9](?:[1-9]){0,2})(?:[^0-9])
(?<=[^0-9])[0-9][1-9]{0,2}(?=[^0-9])
693デフォルトの名無しさん:2011/11/04(金) 13:15:12.17
ああ、普通に01にひっかかるな
694デフォルトの名無しさん:2011/11/04(金) 13:18:39.65
(?<=が使えなきゃ無理じゃない?なんの言語でやるのかは知らないけど。
695デフォルトの名無しさん:2011/11/04(金) 13:20:15.03
とはいえ、>>691だと
hoge123fuga
に引っかからない
696688:2011/11/04(金) 13:27:54.83
あら、それもひっとしないといけなかったのか。。
697デフォルトの名無しさん:2011/11/04(金) 13:37:01.78
(^(0|[1-9][0-9]*)$) じゃだめなん?
698デフォルトの名無しさん:2011/11/04(金) 13:44:03.82
>>697
1000000
にマッチする
699デフォルトの名無しさん:2011/11/04(金) 16:07:27.44
もう既に>>685>>686で答え出てるようなもんだろ

^(0|[1-9][0-9]{0,2})$
700デフォルトの名無しさん:2011/11/04(金) 16:10:26.08
結局どうなったの?

(?:0|[1-9]\d{0,2})
701デフォルトの名無しさん:2011/11/04(金) 16:17:52.54
なんでみんな
> 数字のみにヒット

> 数字のみの行にヒット
って読みかえるの?
702デフォルトの名無しさん:2011/11/04(金) 16:23:59.29
00が0と0の並びだったらとか考えたらキリがないからじゃないか
703デフォルトの名無しさん:2011/11/04(金) 16:33:35.02
00はヒットしないって書いてるのに
704デフォルトの名無しさん:2011/11/04(金) 16:53:35.95
結論的には>>681の書いてる事が曖昧なので答えは出ない
705デフォルトの名無しさん:2011/11/04(金) 17:22:50.69
それは低学歴だから理解できてないだけ
706デフォルトの名無しさん:2011/11/04(金) 17:38:33.51
>>705
高学歴の方。もう一度中学校で国語の勉強をし直しなさい。
707デフォルトの名無しさん:2011/11/04(金) 17:41:38.08
0パディングされてない1〜3桁の数字のみ
って書いてあるのに0とか数字以外にヒットさせたりとかバカが多いな
708デフォルトの名無しさん:2011/11/04(金) 17:59:06.50
既に答えは出てる。
>>684で解決できるそうだから対象は数字のみの文字列なんだろう。
709ぺんた ◆oNQIb2UJK. :2011/11/04(金) 18:00:44.78
perl準拠の拡張正規表現でいいんなら・・
(?<!\d)(?:0(?!\d)|[1-9]\d*)
710デフォルトの名無しさん:2011/11/04(金) 18:05:56.34
>>681,684
^(?:\d|[1-9]\d{1,2})$
(?<!\d)(?:\d|[1-9]\d{1,2})

>>709
4桁の数字にHITする問題がある
711710:2011/11/04(金) 18:06:58.76
失礼、>>710を訂正する。
^(?:\d|[1-9]\d{1,2})$
(?<!\d)(?:\d|[1-9]\d{1,2})(?!\d)
712デフォルトの名無しさん:2011/11/04(金) 18:12:23.00
>>710
ああ、3桁しばりがあったんですか、見落としてました・・。正解は>>711で合ってると思います。
713ぺんた ◆oNQIb2UJK. :2011/11/05(土) 00:13:57.66
あれ、よく見ると合ってないですね。perl準拠の拡張正規表現での正解は↓だと思います。
(?<!\d)(?:0|[1-9](?>\d{0,2}))(?!\d)

(?> ) は使わなくても誤作動はしませんが付けるのが正しい書き方だと思うので付けてあります。
714ぺんた ◆oNQIb2UJK. :2011/11/05(土) 00:26:03.19
あれ、>>711も合ってますね。勘違いしました。失礼しました。
一桁と二桁以上の数字を別処理としてマッチさせてるんですね、その発想は無かった。
715デフォルトの名無しさん:2011/11/05(土) 14:17:18.31
これだけ回答が出ていて>>681,684は放置するのか…
716デフォルトの名無しさん:2011/11/05(土) 14:28:05.76
正直言ってどの回答も >>684 よりかっこわるいからな…
実装する立場からは >>684 が FA でいいよ、もう。
717デフォルトの名無しさん:2011/11/05(土) 14:53:41.92
>>584は "1000" にマッチする上、[0-9] がださいし、不完全な部分一致になってるし、どこがかっこいいと思ってるのかさっぱりわからない件
718デフォルトの名無しさん:2011/11/05(土) 14:59:26.23
Finite AutomatonなのかFinal Answerなのか
719デフォルトの名無しさん:2011/11/05(土) 15:01:43.44
Falsy Answer
720デフォルトの名無しさん:2011/11/05(土) 15:19:38.96
>>681 = >>684 てことでいい?
>>681 の回答例が >>684ということで、これは
「与えられた文字列全体がパターンに一致するか真偽を判定する」
問題なのであって、
「走査して位置を求める」
問題ではないということで異議はない?

Javaでいうとこのmatchesとfindの違いか。
テンプレのジャンルには検索と置換しかないんだけど、「判定」も足そうぜー
721デフォルトの名無しさん:2011/11/05(土) 18:14:41.37
正規表現は見た目どうこうではなく期待通りの動作をするか否かが大事。正しい動作をさせるために
見た目が長く汚い物になることも多々あります。>>711のものは非常によく出来てると思いますよ。
722デフォルトの名無しさん:2011/11/05(土) 18:57:08.76
>>720
たとえばって書いてることを考慮できないってのはひどいもんだな
723デフォルトの名無しさん:2011/11/05(土) 19:35:34.87
せっかくいいものを作ってもらってるのに使わないなんてもったいないなぁ。なんのために質問したのかと。
724デフォルトの名無しさん:2011/11/05(土) 21:09:43.80
最初からおちょくるつもりだったんだろ
725デフォルトの名無しさん:2011/11/05(土) 23:07:54.79
>>684 と等価でよりかっこいい答えが求められているだけの話だろー
オレオレ要件でよってたかってエスパー回答するのも楽しい話ではあるが。
726デフォルトの名無しさん:2011/11/05(土) 23:20:40.68
漫画の見すぎってやつか。俺はもっとかっこいい剣が欲しいんだ!みたいな。
727デフォルトの名無しさん:2011/11/06(日) 00:55:33.98
わかりにくい質問かもしれませんがよろしくお願いします。

●正規表現の使用環境
Java(Android)

●検索か置換か?
検索

●説明
文字列から、数値を含むURLを検索し、その数値を取得したい

●対象データ
http://some_website.net/category:63
http://some_website.net/category:19
・・・
のように、数値を含むURLを含んだ文字列

●希望する結果
http://some_website.net/category:63
だったら、63を取得
728727:2011/11/06(日) 00:57:51.72
String regex = "http://some_website.net/category:([0-9]+)\">";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher m = p.matcher(html);
if(m.find()) {
// 上のregexの([0-9]+)の部分を取得したい
}

よろしくお願いします。
729727:2011/11/06(日) 01:30:21.23
Matcherのgroupメソッドで解決しました。
お騒がせしました。
730デフォルトの名無しさん:2011/11/07(月) 21:14:56.26
>>279に似たような質問があるのですが、
PHP5.3.8にてDOMDocumentにてHTMLファイルを取得し、<body>内のテキストだけを抽出したいです。
タグ部は正規表現で除去出来ますが、問題になるのは<script>でJavaScriptの中身が表示される、<!--などのコメントが表示される事です。
で、<script>とコメントを含む部分を先に除去したいと思います。

/<script[^>]*?>.*?</script>/si
とかやってみたのですが良く分かりません。

アドバイスまたは似たような事を書かれているサイトなどを教えて頂けないでしょうか?
731デフォルトの名無しさん:2011/11/07(月) 21:39:07.16
>>730
PHPスレいっておいで
正規表現使わずにできるから
732デフォルトの名無しさん:2011/11/07(月) 21:48:28.52
>>731
マジですか?
では行ってきます
733デフォルトの名無しさん:2011/11/07(月) 21:50:21.62
>>731
マジですか?
では行ってきます
734670:2011/11/08(火) 10:18:31.06
m/(?:(?:\p{Hiragana}|\p{Katakana}|\p{Han}|\p{Latin}|\p{Common})
(?:\p{Inherited}|\p{Me}|\p{Mn})?)+/x;
735デフォルトの名無しさん:2011/11/08(火) 22:56:34.23
性器表現
736デフォルトの名無しさん:2011/11/09(水) 01:50:21.80
       ∧∧
       (д`* )
       (⊃⌒*⌒⊂)
        /__ノωヽ__)
737デフォルトの名無しさん:2011/11/10(木) 14:52:38.32
皆さんは区切り文字のデリミタにはどの文字を使っていますでしょうか?
"/"だとURIなどでエスケープしなくちゃいけなくなり、見にくくなりますが
"!"とか"@"とか使う可能性が少ないものがいいと思うのですが、どんな文字がいいのでしょうか
皆さんの使っている文字を教えて頂けないでしょうか?
738デフォルトの名無しさん:2011/11/10(木) 14:57:57.97
>>737
その時の状況(エスケープの手間や可読性等々)で使い分けてるから、
「この文字がいい」という提案は不可能。
739デフォルトの名無しさん:2011/11/10(木) 15:13:18.11
ナル
740デフォルトの名無しさん:2011/11/10(木) 21:07:08.63
>>738
でも使う文字ってそんなに種類ないでしょ?
741デフォルトの名無しさん:2011/11/10(木) 21:41:16.77
>>740
まあ「記号類のどれか」であることは確かだわな。
742デフォルトの名無しさん:2011/11/10(木) 23:07:36.02
一文字に限るから困るんだ、という回避方法をとってるものも割とあるよ。2chとか。
743デフォルトの名無しさん:2011/11/10(木) 23:13:25.72
!も@も使われるしな。安全なデリミタなんて無いわな。
744デフォルトの名無しさん:2011/11/11(金) 01:42:09.31
ASCIIコードでは0x1Cから0x1Fまでを
 ファイル、グループ、レコード、ユニット
の順で「セパレータ」と定義しているぞ。
745デフォルトの名無しさん:2011/11/11(金) 05:47:32.27
>>744
で?
746デフォルトの名無しさん:2011/11/11(金) 06:23:00.52
なぜそれらを使うに値しないかの理由を言わずに否定するのはおかしいから、それらを使うのが当然ってことかぁ
747デフォルトの名無しさん:2011/11/11(金) 07:19:41.84
>>744
そのセパレータは意味が全然違う。
748デフォルトの名無しさん:2011/11/11(金) 08:09:54.63
矛盾する?単語羅列がいいよ
記号でやるのは古い

例えば「男爵伯爵」とか
749デフォルトの名無しさん:2011/11/11(金) 08:14:24.50
>>748
Googleでは引っ掛からなかった。 「男爵伯爵」
750デフォルトの名無しさん:2011/11/11(金) 08:17:57.30
>>749
引っ掛からないのは使えるって事だしね
googleで検索するのはいいね
751デフォルトの名無しさん:2011/11/11(金) 13:45:27.17
なるほど、じゃあ都道府県にしようかな
752デフォルトの名無しさん:2011/11/12(土) 00:51:55.12
やっと指定したパターンを含まない行の検索の書き方が理解できたわ
^((?<!abc).)*$
これね。
753デフォルトの名無しさん:2011/11/12(土) 01:59:33.60
何に使おうとしてるんだろう。
754デフォルトの名無しさん:2011/11/12(土) 03:35:55.51
abcだけの行に引っ掛かったが良かったな。
755デフォルトの名無しさん:2011/11/12(土) 11:36:58.38
>>753
テキストエディタでgrepのまねごとするために使う
これで消せばパターンの行だけ残る、という奴
>>754
ほんとや・・・
なんてこった
756デフォルトの名無しさん:2011/11/12(土) 11:41:18.03
757デフォルトの名無しさん:2011/11/13(日) 00:45:47.17
>>755
エディタによっては否定ができて楽なんだけどね
758デフォルトの名無しさん:2011/11/13(日) 04:36:21.07
^(?!.*abc).*$
759デフォルトの名無しさん:2011/11/13(日) 16:39:59.89
文字列を含まないってかなりごちゃごちゃすると思うんだけど
760デフォルトの名無しさん:2011/11/13(日) 19:27:02.75
VSの正規表現がそれに近い
.NETじゃなくてVSのIDEに実装されている方ね
761デフォルトの名無しさん:2011/11/14(月) 10:05:18.60
論理的な作り方さえ学べばそんなにむつかしくはないよ、ごちゃごちゃはするけれど。
762デフォルトの名無しさん:2011/11/14(月) 10:53:23.77
●正規表現の使用環境
MySQL4.1のREGEXP
●検索か置換か?
検索
●説明
カラム内に <> を含むテキストデータがあるのですが
調べたい数字が入っているかを調べたい

●対象データ
3<>4
5<>32<>2
5<>3<>6
3
4

この中から3を含むものを検索したい(32はヒットしないように)

●希望する結果
3<>4
5<>3<>6
3
763デフォルトの名無しさん:2011/11/14(月) 11:33:41.51
>>762
行検索なのかな?
764デフォルトの名無しさん:2011/11/14(月) 12:10:16.52
>>762
^([0-9]+<>)*3(<>[0-9]+)*$
765デフォルトの名無しさん:2011/11/14(月) 12:27:40.68
>>764
ありがとうございます! ばっちりでした。

>>763
1行が1レコードのつもりで書いてました。
結果はヒットするレコードってことで
766デフォルトの名無しさん:2011/11/14(月) 20:42:20.38
否定文なんですが
行頭に特定の文字(★や◆など。文字列じゃないです)が入ってる場合は行末まで無視して
それ以外は行末まで強調させる、という条件はどんな風になるでしょうか?
★や◆の場合のみ一行全てを表示させるものは作っているのですが、否定文になるとなんか難しい……
ソフトはテキストエディタの秀丸です。

最初は順番変えたら何とかなりそうだと思ったんですが、どうも少々凝った否定文が必要なようで
ここで質問させていただきます
767デフォルトの名無しさん:2011/11/14(月) 20:44:02.00
ちなみに作ってる奴はこんな感じです
[◆|★]+([亜-K]+|[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-za-z0-9]+|[\d0-9]+|[\d!”#$%&’()*+−¥、。…・※?〜:「」々人])+[$]
768デフォルトの名無しさん:2011/11/14(月) 20:50:56.29
そのぐちゃぐちゃしてるところは.じゃだめなの?
要件を見ると行頭の特定文字以外には言及してないよね
769デフォルトの名無しさん:2011/11/14(月) 21:38:10.05
ト書きのセリフとかかな。
770デフォルトの名無しさん:2011/11/14(月) 22:43:13.78
>[亜-K]+|[一-龠]+
何かキモい書き方だな。\pが使えるなら\p{Han}+としたいところだが。
行頭云々言ってる割に正規表現が ^ で始まってないとか、末尾の [$] は $ の間違いかとか、
()の中の文字クラス全部まとめてしまっていいんじゃないかとか、つっこみどころがいろいろ。

で、行頭が★と◆以外の1行なら、
^[^★◆].*$
でどうだ。
771766:2011/11/15(火) 00:49:22.72
すみません、自己解決しました。
厳密には解決はしてないのですが
色々と試してたら「 ^(★|◆).*$ 」で問題なさそうだったので、もう止めときます
否定で一行除くの難しすぎる……
秀丸スレでも似た醜態を晒してしまい、申し訳ありません
ゴチャゴチャしてたのは全ての文字に
とにかく符合させようとしてパターンをありったけ突っ込んだ結果です
772デフォルトの名無しさん:2011/11/15(火) 02:22:35.77
厳密にどうしたいのかを書いてればすっきりするのに
773デフォルトの名無しさん:2011/11/15(火) 06:46:26.04

http://example.com/%E3%81%82
↑これをhttp://example.com/index.php?word=%E3%81%82にリダイレクトしてたのですが
この度、http://example.com/%E3%81%82?lang=en にアクセスされた場合
http://example.com/index.php?word=%E3%81%82&lang=en にリダイレクトしたいのですが
うまく行きません。

RewriteRule ^(.*)(\?(.*))?$ /index.php?word=$1&$3

どのようにしたらいいでしょうか
774デフォルトの名無しさん:2011/11/15(火) 13:15:31.02
^([^\?]*)(.*)$
でいいんじゃないかなぁ
775デフォルトの名無しさん:2011/11/15(火) 14:15:58.95
>>766
他のソフトで置換した方が早くね?

/^(!?(★|◆)(.*$)/<b>\1<\/b>/g
776デフォルトの名無しさん:2011/11/15(火) 14:34:17.89
>>773
スレ違いだけど、ちょっとコメント。

mod_rewiteは正規表現だけのルールでは望む結果を得られないので、
マニュアルをちゃんと読むべし。 末尾のオプションの使い方が鍵。
777デフォルトの名無しさん:2011/11/15(火) 16:04:21.31
JavaScriptで
aa1
っていう文字列の塊を1セットで[a-z]{2}[0-9]と表します
この文字列が
fi1cs2bc3wr4
ってう風に4回繰り返されている場合にヒットさせる正規表現はどうかくのでしょうか?
([a-z]{2}[0-9]){4}って感じで書いてみたんですけど(〜){数字}のケースって見たことないんですがどうでしょうか
778デフォルトの名無しさん:2011/11/15(火) 16:43:31.93
この手の人ってどうしてマッチするかどうか実際に試してみないんだろう。
何が減るわけじゃなし。2ちゃんに書き込む労力は払うのに。

煽り抜きで、本当にいつも不思議に思う。
779デフォルトの名無しさん:2011/11/15(火) 18:28:37.23
自分が気に入らないと煽るクセは直したほうがいいよ
780デフォルトの名無しさん:2011/11/15(火) 22:30:45.65
>>774 >>776
ありがとうこざいました!
781デフォルトの名無しさん:2011/11/15(火) 23:31:37.61
正規表現は正しいのですが.htaccessの問題ぽいので.htaccessスレで聞いてみます。
782デフォルトの名無しさん:2011/11/16(水) 06:02:22.65
>>778
誰もが思うことを実際に口に出してツッコミ入れると損するよ。ツッコミ癖は直しておいたほうがいい。
ツッコミキャラほどうざいキャラはないからな。

まぁこのレスもツッコミレスなわけだがw
783デフォルトの名無しさん:2011/11/16(水) 11:05:53.76
>>782
自治キャラのウザさは、遙かその上を行く。
いくら草を生やしても中和されない。
784デフォルトの名無しさん:2011/11/16(水) 11:52:45.41
草がたりないってことは?
785デフォルトの名無しさん:2011/11/16(水) 13:58:16.17
質問です。

文字ストリング「"山田","太郎",,"",,"自宅TEL","03-4567-8901"」から、
「"山田"」、「"太郎"」、「""」、「"自宅TEL"」、「"03-4567-8901"を取り出したいのですが、
対象を「.+?」で指定すると、
「"山田"」、「"太郎"」、「"",,"」、「","」が取り出されます。
どのような指定にすれば良いのでしょうか
786785:2011/11/16(水) 14:01:28.58
誤「.+?」⇒正「\".+?\"」です。
787デフォルトの名無しさん:2011/11/16(水) 14:04:34.81
.*?にする
788609:2011/11/16(水) 14:49:26.15
>>785
CSVは一つの正規表現では無理
パースして順番にマッチしていかないと
789785:2011/11/16(水) 16:16:51.38
>>787,789
レスありがとうございます。



790デフォルトの名無しさん:2011/11/16(水) 20:58:38.08
文字ストリング…
791デフォルトの名無しさん:2011/11/16(水) 21:04:31.23
バイトストリングとかあるから別につっかからなくても
792デフォルトの名無しさん:2011/11/16(水) 22:46:28.66
Excelできちんとインポートした方が早い気がする。
793デフォルトの名無しさん:2011/11/17(木) 23:54:12.68
>>777
どうでしょうね
動くのを正としたいのか、もっとスマートにしたいのか
[0-9]は??dにできるし、正規表現に正解はないよ
794デフォルトの名無しさん:2011/11/19(土) 01:10:32.91
そういえば前に[0-9]だと駄目で\dにしたらちゃんと置換できたことあった
()の指定とか複数あったからどこかしら書き間違ってたのかもしれんけど・・・
795デフォルトの名無しさん:2011/11/19(土) 02:00:57.43
EBCDICな環境だったとか
796デフォルトの名無しさん:2011/11/19(土) 09:24:33.46
>>794
まれに \d に対応しない実装もある
JavaScript は明らかに対応してるけどね
797デフォルトの名無しさん:2011/11/19(土) 11:12:45.90
EBCDICは関係ないだろー。[A-Z] はなんかあるかもしれんが。
798デフォルトの名無しさん:2011/11/19(土) 11:19:34.33
ごめん、そもそもEBCDICに "[", "]" は無かったな。
799デフォルトの名無しさん:2011/11/19(土) 13:01:15.58
●正規表現の使用環境
秀丸

●検索か置換か?
置換

●説明
文字列の中に同じ文字が2つ以上含まれる行を削除したい

●対象データ
aaaaaaaa
abcabcab
abcdefgh
agbchddf
cbfdaehg
dbcahebg
dffbdeha
echfbgad
fbadcaeh
habcdefg

●希望する結果
abcdefgh
cbfdaehg
echfbgad
habcdefg



見づらいかと思いますが
どうかよろしくお願いします。
800デフォルトの名無しさん:2011/11/19(土) 13:37:21.04
>>799
それは正規表現でやる仕事か?
801デフォルトの名無しさん:2011/11/19(土) 14:07:10.47
^.*(.).*(\1).*\n

一応対象データであがってる文字列ではうまくいった
802デフォルトの名無しさん:2011/11/19(土) 14:07:14.42
>>799
検索: (^|\n).*?(.).*\2.*\n
置換: \1
803デフォルトの名無しさん:2011/11/19(土) 14:37:01.04
>>801-802
助かりました!
バッチリな感じで動作中です
スッキリできました、本当にありがとうございました。
804デフォルトの名無しさん:2011/11/19(土) 16:27:42.33
いえいえ
805デフォルトの名無しさん:2011/11/21(月) 06:55:43.01
へ〜検索の中でも参照できるのか!
このスレ勉強になるなw
806デフォルトの名無しさん:2011/11/21(月) 15:26:15.70
出来る場合もあるが、出来ない場合もある。実装次第。
807デフォルトの名無しさん:2011/11/27(日) 22:17:36.13
正規表現で

start.*end
これだと、startから最後のendまで取得してしまう

start.*?end
これだとstartの直近のendまで取得できる

.*の後ろに?を付けると直近のendまでになる理由が理解できません
死んだほうがいいでしょうか(´・ω・`)
808デフォルトの名無しさん:2011/11/27(日) 23:16:54.36
?を付けると最後のendまで検索したあとに手前にendがないかを戻りながら再検索します。
手前にもうendが見付からない場合には最後に見付けたendまでマッチすることが確定します。
809デフォルトの名無しさん:2011/11/27(日) 23:54:06.93
>>807
正規表現は原則よくばりなマッチ(とれるだけとる)をするんだけど、この原則をひっくり返したものが、.*?
810デフォルトの名無しさん:2011/11/28(月) 07:30:19.02
もしかしたら
「0個か1個」を意味するメタキャラクタの"?"で、どういう理屈で最短一致になるのか?
という疑問かもしれん。


(量指定子)?

という表現ひとまとまりで、最短一致を表す正規表現となる。そういう約束。
この場合の"?"は「0個か1個」を意味するメタキャラクタとは別物。

行頭を表す"^"と、文字クラス内で否定を意味する"^"とが別物であるようなもの。
811デフォルトの名無しさん:2011/11/28(月) 13:31:24.66
>>808
>>809
>>810
説明不足なのにエスパーしてくれた>>810さんの通りでした
メタキャラクタの"?"とは切り離して考えないといけないんですね。

ありがとうございました!
812デフォルトの名無しさん:2011/11/29(火) 22:16:38.47
SoftalkWEBっていう2chスレ音声読み上げソフト使ってます。

そこで、
>>9

みたいにレスに返事をする部分を
レス9へ返事

と変換したいのですが変換対象と変換結果をどのように指定すればよいでしょうか
813デフォルトの名無しさん:2011/11/29(火) 22:26:54.43
>>812
安価以外の「『>』×1〜2+数字」にも絶対反応するけどそれはどうするの?
814デフォルトの名無しさん:2011/11/29(火) 23:39:45.17
Javaでaaaa1.txt と bbbb2_2.txtというファイル名が有り、
aaaaと1、bbbb2_と2を抽出したい
どう書いたらいい?
815デフォルトの名無しさん:2011/11/30(水) 00:24:08.72
cccc22.txtだったらどうなればいいかとかいろいろ情報不足
816デフォルトの名無しさん:2011/11/30(水) 00:42:50.28
一応考えたのは
((^[a-zA-Z_\\-]+)|(^[a-zA-Z_\\-]+[\\-_]))(\\d+)\\.txt$
です
817デフォルトの名無しさん:2011/11/30(水) 00:48:44.55
訂正。2つめの[]の中に0-9を追加です
818815:2011/11/30(水) 01:10:35.02
ファイル名の最後の数字と分けたいってことでいいのかなぁ。それなら

^(.*?)(\\d+)\\.txt$

で$1と$2に入る。これは検索対象がファイル名であることを前提にしてる書き方だけどね。
これじゃだめなら何が足りないのか書いてね。
819デフォルトの名無しさん:2011/11/30(水) 01:50:36.80
>>812
アンカーにはさまざまなパターンが存在し、>>813氏も心配しているような誤反応の可能性がありますが、
シンプル版でよければ。

===
変換対象
(?<=\n)>>([1-9]\d{0,3})(?=[  ])
変換結果
レス$1へ返事
===
アンカーが行頭に存在し、かつ、
アンカーの後ろにスペースが入っている(SoftalkWEBの仕様)場合に置換します。

以下のように、番号を複数指定している場合などには未だ対応できていません。
>>1,2
>>1-2
また、>>1みたいな全角文字にも対応していません。

他のSoftalkWEBユーザの参考になるし、機能追加の要望にもなるので、
SoftTalkのサポート掲示板の方に投稿したほうが良いと思いますが、、、
820デフォルトの名無しさん:2011/11/30(水) 02:39:22.37
janeの引用行着色の正規表現を使いまわせそう。
http://www42.tok2.com/home/proxo/rep/src/rs0033.rep
821デフォルトの名無しさん:2011/11/30(水) 12:52:36.20
aの4回以上8回以下の繰り返し「 ^a{4,8}$ 」
ではなくて、
「aの4回または8回の繰り返し」
を ^(a{4}|a{8})$ のように「a」を2回使用せずに、「a」を1回だけ使用して指定する方法を教えてください。
822デフォルトの名無しさん:2011/11/30(水) 13:04:10.09
^(a{4}){1,2}$
823821:2011/11/30(水) 14:36:25.94
>>822
ありがとうございます
824デフォルトの名無しさん:2011/11/30(水) 16:21:29.66
^(a)\1\1\1(\1\1\1\1)?$
825デフォルトの名無しさん:2011/11/30(水) 16:58:17.47
^((a)\2{3}){1,2}$
826デフォルトの名無しさん:2011/11/30(水) 20:26:15.49
質問です。

性器の生気を正規表現でどうしましょうか?
827デフォルトの名無しさん:2011/11/30(水) 23:04:22.59
^(a{4})\1?$
828デフォルトの名無しさん:2011/12/01(木) 09:28:19.54
PHP Version 5.2.9
preg_matchです。

電話番号の認証として、
/^\d[\d\-]+\d$/D
を使用していますが、
「1--3」のようなハイフン記号が続く場合の入力を許可してしまっています。

要件として、厳密な電話番号ルールは必要ではありません。
データとして「1-2-3」などを許可しています。

よろしくお願いいたします。
829デフォルトの名無しさん:2011/12/01(木) 10:43:50.07
^\d+-\d+-\d+$
830デフォルトの名無しさん:2011/12/01(木) 12:25:11.03
^(\d+-){2}\d+$
831デフォルトの名無しさん:2011/12/01(木) 13:00:55.38
>>829
素直に書けばそういう感じですね。
目からウロコです。
832デフォルトの名無しさん:2011/12/01(木) 13:22:51.62
目からウンコ?
833デフォルトの名無しさん:2011/12/01(木) 13:29:59.33
>>830
こちらを使用します。
ありがとうございます。
834デフォルトの名無しさん:2011/12/01(木) 14:36:15.33
正規表現は短ければいいってものじゃないからな、一応。短く書いたほうが処理が重くなるケースは多々ある。
835814:2011/12/01(木) 15:05:13.05
>>815
アク禁で遅くなりました
ありがとう
836デフォルトの名無しさん:2011/12/01(木) 21:01:27.69
asdfg =~ /a|s|d|f|g/
こういうのが一番はやい。/(a-z)/より早い。でもめんどくさい。
837デフォルトの名無しさん:2011/12/03(土) 20:22:32.94
こ う い う 風 に ス ペ ー ス を 間 に 何 度 も 挟 む
ケ ー ス を 正 規 表 現 で や る と ど う す れ ば い い の か な
838デフォルトの名無しさん:2011/12/03(土) 20:28:51.44
マッチさせたいってこと?
([^ ] )+
839デフォルトの名無しさん:2011/12/03(土) 20:34:55.37
あ、なるほど!
840デフォルトの名無しさん:2011/12/03(土) 23:12:53.30
おい!!次スレがこの有様なのか?
http://hibari.2ch.net/test/read.cgi/tech/1322908056/l50
841デフォルトの名無しさん:2011/12/05(月) 16:10:59.60
●正規表現の使用環境
C#

●検索か置換か?
検索して、マッチしたものをキャプチャして置換したい。

●説明
文字列の演算式の項をキャプチャして置換したい。
演算子には、+,*,()のみが使用可能。括弧の入れ子も可能。

●対象データ(ex.)
(aaa+bbb)*(ccc+ddd)
があったとき、まず、aaa,bbb,ccc,dddをキャプチャして、
文字列変換(別途用意済)をする。
次に、それぞれ変換した文字列を元の式に戻す。
例えば、文字列変換が小文字⇒大文字への変換だった場合、
(AAA+BBB)*(CCC+DDD)
としてたい。
実際には、
string strBefore = "aaa";
string strAfter = 変換メソッド(strBefore);
という感じで、独自の変換メソッドを用意しています。

aaa*(bbb+ccc) ⇒ AAA*(BBB+CCC)
aaa*((bbb+ccc)+ddd) ⇒ AAA*((BBB+CCC)+DDD)
842デフォルトの名無しさん:2011/12/05(月) 16:45:57.87
正規表現使う必要無くね?
843デフォルトの名無しさん:2011/12/05(月) 17:15:20.40
ただのstrupr処理だわなw
844841:2011/12/05(月) 17:27:54.69
>>843
struprはあくまで例です。
ここで複雑な変換処理の式を出しても混乱するだけだと思ったのでupperを出しただけです。
>実際には、
>string strBefore = "aaa";
>string strAfter = 変換メソッド(strBefore);
>という感じで、独自の変換メソッドを用意しています。
ここで事情は説明したつもりなのですが・・・
845デフォルトの名無しさん:2011/12/05(月) 17:42:16.92
ふつう正規表現でやるのは項の定義止まりだよ
846デフォルトの名無しさん:2011/12/05(月) 17:46:12.47
説明を簡略化しすぎても混乱してしまうよ。それと求めているのは正規表現そのものではなくて
正規表現のサンプルコードか何かのような気がするのだが・・。
847841:2011/12/05(月) 18:16:25.27
>>846
すみません、たしかにロジックの説明は余計だった気がします。
教えて頂きたい正規表現は、四則演算「っぽい」文字列にマッチするかどうかというものです。
マッチさえすれば、あとはキャプチャして置き換えればよいとの認識です。

宜しくお願い致します。
848デフォルトの名無しさん:2011/12/05(月) 18:31:39.00
もとの制限を考えれば、+,*,() 以外の文字の連続がほしいものなんじゃないの?
849デフォルトの名無しさん:2011/12/05(月) 22:23:58.80
>>844
文字列の中に式らしき部分があって、その要素(項)を別に定義した約束事で
置換するというのでいいのかな。
850デフォルトの名無しさん:2011/12/05(月) 22:50:20.98
>>842>>843的な意味で書いたのではなく、文字列操作関数だけでも出来るんじゃないかと思ったので書いた。
正規表現でやったほうが楽だけどね、処理速度は遅いけど。

・項にはどんな文字が使われるのか、英字だけなのか、ひらがなや漢字、数字なども含まれるのか 例、時間*時給
 (これがはっきりしないと書きようが無い)
・式の前後には改行は入っているのかいないのか
・全角文字には対応するのかしないのか 例、F+G

これらが分かれば簡単に書けるから誰かしらが作ってくれると思うよ。
851デフォルトの名無しさん:2011/12/05(月) 22:54:13.82
あ、括弧の入れ子を厳密に判定しようと思ったら普通の正規表現では無理。鬼車っていうライブラリを使ってるなら
簡単に対応出来る。鬼車でない場合は文字列操作関数で頑張ったほうが正確に判定出来ていいかも。
852デフォルトの名無しさん:2011/12/05(月) 23:07:39.25
使われる全ての文字の連続を検出すれば良い。
括弧が正確に対応するかは個別にCheck。正規表現使わなくていい。
853デフォルトの名無しさん:2011/12/05(月) 23:07:41.69
>>851
括弧の入れ子とか別に関係ないじゃん?
854デフォルトの名無しさん:2011/12/05(月) 23:23:12.62
>>853
((((aaa+bbb)*ccc(ddd)

こういう括弧の数が合わないものは式でない可能性が高い。それを置換してしまってもいいのかな?
855デフォルトの名無しさん:2011/12/05(月) 23:35:58.54
>>854
それを考慮するってことは、式の始まりまたは終わりを判断するつもりがあるということか。
856デフォルトの名無しさん:2011/12/05(月) 23:44:00.41
それをしなかったら正規表現使う意味なくない?
857デフォルトの名無しさん:2011/12/06(火) 02:48:57.24
だから正規表現いらなくねって意見がでてんでしょ
858デフォルトの名無しさん:2011/12/06(火) 06:28:53.19
括弧の入れ子の判定は正規表現でやったほうが断然楽だわな。いらないと思う人はこれが出来ない人なんだろう。
859841:2011/12/06(火) 08:54:43.49
>>850
ご指摘ありがとうございます。

項はある検索エンジンで使用する独自の式が入ります。
"TERM"という定数に項を表す正規表現が記述されている、として頂ければと思います。
const string TERM = "●●"//●●←項を表す正規表現

式の前後に改行は入りません。
全角文字は、項の中ではありますが、+、*、(、)は半角のみを許可します。

よろしくおねがいします。
860デフォルトの名無しさん:2011/12/06(火) 09:23:04.74
難しい問題の合間に箸休めでお答えください
数字の入っているファイル名を置換したいです。

あああいいい01.txt
AABB0002.txt
なむなむ003.txt
TYTY4.txt
    ↓
THX001.txt
THX002.txt
THX003.txt
THX004.txt

.+(\d)(\d?)(\d?)(\d?)\.txt
などと、いろいろ試してはみたんですがうまくいきません。
どうかお力添えのほどをよろしくお願いします
861デフォルトの名無しさん:2011/12/06(火) 11:33:14.28
>>860
.+(\d)+\.txt

こういうこと?
862デフォルトの名無しさん:2011/12/06(火) 11:43:15.81
>>851
鬼車つかって簡単に対応したのを書いてもらえますか
863860:2011/12/06(火) 17:48:58.84
>>861
レスありがとうございます。
条件をもう少しちゃんと書けばよかったですね
数字部分が0255などの時うまく置換できないのです。
数字部分だけで言うと、001,002,・・,255,・・880
のような形で置換したいです。
置換の方への記述の仕方もよくわからず、できればそちらもお願いいたします
864デフォルトの名無しさん:2011/12/06(火) 18:02:07.72
865860:2011/12/06(火) 18:28:08.59
>>864 失礼しました

●正規表現の使用環境
psstpsstというリネームソフト(Perl互換)

●検索か置換か?
置換

●説明
最大4桁で書かれた数字部分を3桁に統一したい

●対象データ
ABCA01.txt
BCAA2.txt
CABA0255.txt

●希望する結果
AAA001.txt
AAA002.txt
AAA255.txt

どうぞよろしくおねがいします
866デフォルトの名無しさん:2011/12/06(火) 20:38:24.42
数字部分を3桁以上にしてから
(\d+\.)
000\1

下3桁だけ切り出し
\d*(\d{3}\..*)
\1
867デフォルトの名無しさん:2011/12/06(火) 22:41:35.61
>>841のは再帰を理解できるような拡張した正規表現を使えないとダメだろ。
そんなのあるのか。
868デフォルトの名無しさん:2011/12/06(火) 22:48:48.50
PCREは無限の括弧の対応が取れる ~ 再帰も、ネストも、あるんだよ.
http://swatmac.info/?p=716

正規表現の限界 @ Shibuya.pm
http://swatmac.info/etc/shibuya_pm/pix/recursive-regex.png
http://swatmac.info/etc/shibuya_pm/
869デフォルトの名無しさん:2011/12/06(火) 23:22:37.09
で、再帰が使えると>>854が懸念するようなことも解決できるの?
870デフォルトの名無しさん:2011/12/06(火) 23:35:32.29
理解してないができるはずだろ。マッチしないとき、括弧が足らないなどのエラーが判明する。


再帰的パターン
どうすればカッコに括られた文字列とマッチできるか、という問題を 考えて見ましょう。
このとき、カッコは何回でもネストできるとします。
再帰が使えないとすると、パターンを用いて、せいぜい、ある一定の深さの ネストまでしかマッチできないでしょう。
任意の深さのネストを 処理することは不可能です。
Perl 5.6 では、正規表現において再帰を行う 実験的な機能が導入されています。
PCRE では、再帰という特殊なケースに対して専用のシーケンス (?R) が導入されました。
http://php.net/manual/ja/regexp.reference.recursive.php
871デフォルトの名無しさん:2011/12/06(火) 23:46:03.39
出来るよ、このスレでこんな認知度低いほうが意外なくらい。
872デフォルトの名無しさん:2011/12/06(火) 23:58:07.19
windowsで手軽にpeclの動作確認する方法ありますか。
873デフォルトの名無しさん:2011/12/07(水) 00:00:50.43
xampp入れてPHPですかね。
874デフォルトの名無しさん:2011/12/07(水) 00:03:36.96
認知度の話じゃなくて、項には全角も含まれるといわれている状態で、再帰でできるとか言ってるのが斜めってることに気づかないのかな。

「たとえばほげほげ+fooという文字列」
↑この中の項をどうやって判別するの。
875デフォルトの名無しさん:2011/12/07(水) 00:07:35.69
全角や、英数のみはたいした問題でない。
どの文字を許可するかはそのつど変わる。
876デフォルトの名無しさん:2011/12/07(水) 00:12:27.18
だから現状ではできない、でおk?
877デフォルトの名無しさん:2011/12/07(水) 00:18:13.56
なんでよ?
文字コードの問題があるけど、たとえばUTF32などだったら英数も全角も同じバイト長で区別はない。
878デフォルトの名無しさん:2011/12/07(水) 00:23:06.12
>>877
>>855でも書いたけど、式の始まりと終わり、項と項以外をどうやって判断するの?

体重+年齢と性別*5
このとき、何が項として抽出されるべきかを書いてみ?
べつに>>874でもいいけど。
879デフォルトの名無しさん:2011/12/07(水) 00:25:53.18
項に使える文字はあらかじめ指定するんだろ。
たとえば[0-9a-z]としてあとで変更することもできる。
全角になったとしてもたいした問題でない。
880デフォルトの名無しさん:2011/12/07(水) 00:26:54.45
>>878

こうわけるのが普通だろ。他にどう分けるんだよ。

体重  +  年齢と性別  *  5
881デフォルトの名無しさん:2011/12/07(水) 00:29:23.51
対象文字列が式のみかどうかなんて書いてないよな。
882デフォルトの名無しさん:2011/12/07(水) 00:31:54.36
対象文字列が式のみであるという前提を勝手につけるなら、わざわざ括弧の整合性チェックをする必要なんてないよな。
883デフォルトの名無しさん:2011/12/07(水) 01:05:10.14
>>882
いつまで雑魚の相手をするつもりなんだ?
884デフォルトの名無しさん:2011/12/07(水) 01:12:28.09
>>841
正規表現はマッチするだけ。置換処理はプログラミングの分野。はき違えてはいけない。
http://ideone.com/2xlKW
885デフォルトの名無しさん:2011/12/07(水) 01:24:06.45
項の部分は質問者さんが正規表現を作るのかな、>>859を読むとこう取れなくもないのだが。
>>850で「はっきりしないと書きようがない」と言われてるのにはっきりさせないから混乱するんだ。
886デフォルトの名無しさん:2011/12/07(水) 01:53:13.54
項は仮に[a-z0-9]でいいだろ。
887デフォルトの名無しさん:2011/12/07(水) 04:54:20.90
>>884
そんな手間かけてゴミレス付けんなよ。
888860:2011/12/07(水) 10:11:04.84
>>866
実はその発想はあったのですが、下3桁の切り出し方が分かっておりませんでした。
どうもありがとうございました。

また、もし一工程で済ます方法があったとしたら
後学のために教えていただけると幸いです
889デフォルトの名無しさん:2011/12/07(水) 13:40:04.24
>>888
参考に...
このスレの範疇を超えちゃってアレだけど、
Flexible Renamerっていうリネームソフトなら正規表現+スクリプトを使って一発でできるみたい
検索:.+?(\d+)(\.[^\.]+)$
置換:"AAA"+right("00\1",3)+"\2"
(高度なリネーム、正規表現、スクリプトにチェック)
890デフォルトの名無しさん:2011/12/07(水) 15:53:09.38
高度な置換をしたい場合はどうしてもプログラムコードが必要になるけどそれを提供してるツールもあるんだね、
891860:2011/12/07(水) 16:20:58.95
>>889 おおー!完璧です!
FlexibleRenamerはちょっと重いので敬遠していたのですが
スクリプトとの合わせ技が使えるんですね
自分には少しハードルが高いですけど
rightってことは・・・左からはleftとか使えるんだろうな〜と想像したり
"right(00\1,3)"ではないのがいまひとつ分からなかったりしますが
大変勉強になりました。ありがとうございます
892デフォルトの名無しさん:2011/12/07(水) 16:29:14.42
元々数字が4桁以上あったら上の桁を切り捨てちゃうけどそれでいいのかな・・自分ならこれを防ぐ処理も入れるな。
それと拡張子なしのファイルには対応出来ないけどこれは考えなくても良いのかな。
893デフォルトの名無しさん:2011/12/07(水) 16:31:05.75
スレチだけど、Flexible Renamerは便利だね。
練馬ってのもいろいろできるけど、こっちはややこしいイメージを受けると思う。
894デフォルトの名無しさん:2011/12/07(水) 16:32:29.05
もともと4桁は想定してるようだよ。
ただ、雰囲気的に、4桁の場合は先頭が0であるという暗黙の条件があるんだろうと思ってる。
拡張子も然り。
895デフォルトの名無しさん:2011/12/07(水) 16:35:20.55
>>894
実用的に問題無いならいいんだけどね。
896デフォルトの名無しさん:2011/12/07(水) 16:42:08.49
まあ、4桁を使うようなデータが出てきたら今回のを改変して、そのまま流せばいいってのもあるとおもう
897デフォルトの名無しさん:2011/12/08(木) 00:57:46.56
>>886
こう仮定して再帰を使った正規表現作ってくれる人ってこのスレにいるの?いない気がする。
898デフォルトの名無しさん:2011/12/08(木) 00:58:40.07
正規表現を作ってあげたとしても質問者がコードを組めるかという問題もあるね。
899デフォルトの名無しさん:2011/12/08(木) 01:07:07.26
>>897
「正規表現で何をしたいのかと細かい条件」

これを質問者がしっかり文章化して投下してくれないと始まらないね
900デフォルトの名無しさん:2011/12/08(木) 02:48:45.53
>>899
それがあいまいな状態で「エンジンが鬼車なら再帰でできる」なんていうのがいるから困るんよ
901デフォルトの名無しさん:2011/12/08(木) 03:43:54.44
嫉妬か。
902デフォルトの名無しさん:2011/12/08(木) 05:08:31.56
斜めにもほどがあるだろ
903デフォルトの名無しさん:2011/12/08(木) 05:16:39.14
>>900=>>874=>>902か、嫉妬乙。
904デフォルトの名無しさん:2011/12/08(木) 05:26:48.85
おしい
905デフォルトの名無しさん:2011/12/08(木) 05:43:03.37
俺も鬼車だと簡単に書けるっていうから回答楽しみにしてる
906860:2011/12/08(木) 06:52:42.57
>>892-896
みなさんありがとうございます
>>894さんの仰る通り4桁とはいっても先頭は0です。
全部で800くらいのものを10人ばかりで分担作業したので、人それぞれでファイル名が・・・となりまして

今回のを参考に、複雑な処理はFlexibleRenamerも使ってみようと思います。
まだ消化しきれてない部分もあるので、少しずつですが勉強していきます。
どうもありがとうございました
907841:2011/12/08(木) 08:42:06.05
>>874
>>878
たとえばほげほげ+fooという文字列 ⇒項は「たとえばほげほげ」と「fooという文字列」
体重+年齢と性別*5  ⇒ 項は「体重」と「年齢と性別」と「5」
です。

>>899
正規表現でやりたいことは、
・'+','*','(',')'の4つの演算子と、C_TERMで定義された項を使った式がマッチするかどうかを判断したい。
・スレ内で議論されている、()の対応も処理したい。※(1+1))*2は当然アンマッチ
・四則演算といっていますが、項は数字ではなく、ただの文字列なので、取り出せればOKです。
・で、(?<TERM>C_TERM)を使って、マッチした項を取り出し、Match.replace()で
 項を変換して置き換える。(この辺はC#の処理系の話ですが。)

また、C_TERMで使える文字使えない文字は別途チェックをします。
当然、+、*、(、)は項の文字としては使えません。
908デフォルトの名無しさん:2011/12/08(木) 11:26:21.12
>>907
項を取り出すだけなら [^+-()]+ で十分でしょう
演算子の処理も含めるなら演算子にもマッチさせる必要があるでしょうね [^+-()]+│[\s\S]
処理をどうするかは正規表現の範疇ではありません
909841:2011/12/08(木) 11:34:25.87
>>908
例えば、
(C_TERM+C_TERM)*C_TERM+C_TERM*C_TERM
という式にマッチするかどうか?
という正規表現が知りたいのです。
この時に括弧の入れ子も精査してほしいのです。
910デフォルトの名無しさん:2011/12/08(木) 12:16:31.20
>>909
ですから先程の正規表現でマッチできるのではないですか?
括弧の対応関係は ( の数をカウントする事で実現できます
先頭から順番にマッチして ) の数と一致するか確かめてください
正規表現そのものは決して難しくありません
911デフォルトの名無しさん:2011/12/08(木) 12:19:11.08
>>909
漠然と式にマッチするといわれても正規表現を書きようがないのですが
括弧の対応関係は ( の数をカウントする事で実現できます
先頭から順番にマッチして ) の数と一致するか確かめてください
いずれも括弧にマッチさせた後の処理の問題です
正規表現そのものは決して難しくありません
912911:2011/12/08(木) 12:20:51.94
失礼、投稿ミスだと勘違いして連投しました
>910は流してください
913デフォルトの名無しさん:2011/12/08(木) 12:42:25.68
>>909
パターンの整合性チェック(括弧の対応がとかそういうの)をしたあとで
マッチするかどうかを調べればいいと思う

擬似コードだけど、こんなん。
pattern = "(C_TERM+C_TERM)*C_TERM+C_TERM*C_TERM";
if (isValid(pattern)) {
isMatch(pattern, str);
}
914デフォルトの名無しさん:2011/12/08(木) 12:51:33.71
915デフォルトの名無しさん:2011/12/08(木) 13:21:19.86
あきたならさくっと今回のに適した形にしようぜ
916デフォルトの名無しさん:2011/12/08(木) 14:04:17.14
質問です。

数字と文字が混在する文字列の中から、数字だけを取り出すことは可能でしょうか?
(ただし、複数個の数字文字列としてではなく、一つの文字列として取り出す場合)

例えば
「a12b3cd456efg」から「123456」を取り出す
(「12」と「3」と「456」ではなく)
917片山博文MZ ◆0lBZNi.Q7evd :2011/12/08(木) 14:07:02.94
>>916 正規表現だけではできない。後で文字列結合すればいい。
918916:2011/12/08(木) 14:53:52.92
>>917
レスありがとうございます。
919デフォルトの名無しさん:2011/12/08(木) 15:02:31.52
>>916
perlだったら

$str =~ s/[^0-9]/g;

で変換しちゃうとか。
920デフォルトの名無しさん:2011/12/08(木) 15:04:18.55
間違ってました。

921デフォルトの名無しさん:2011/12/08(木) 15:04:53.10
間違ってました。

>>916
perlだったら

$str =~ s/[^0-9]//g;
922デフォルトの名無しさん:2011/12/08(木) 19:10:16.21
>>841
(?:([^+*()]+)|\((?R)\))(?:[+*](?R))?

C#は知らないけれど、こんな感じ?
ただ、((aaa+bbb)には(aaa+bbb)でマッチするけどねー。

適当に再帰下降パーザを書いた方が確実だと思われ。
923デフォルトの名無しさん:2011/12/08(木) 21:13:25.02
>>921
んだね。

>>922
(?<!)と(?!)で正規表現の前後の判定をするといいよ。
924デフォルトの名無しさん:2011/12/08(木) 21:19:24.01
>>923
だよね
925922:2011/12/08(木) 21:23:09.74
>>923
うーん、分からん。
ちょっとコード書いてみて。
926デフォルトの名無しさん:2011/12/08(木) 22:25:08.13
>>922 >>841
C#では再帰は使えなさそうだな。
http://msdn.microsoft.com/ja-jp/library/az24scfc.aspx

というか、再帰が使える言語・ライブラリ自体がまだあまりないような。有名どころだと
 言語: Perl 5.10以降、Ruby 1.9以降
 ライブラリ: 鬼車、PCRE、Boost.Regex
ぐらいか?
927デフォルトの名無しさん:2011/12/09(金) 04:22:21.57
簡単すぎて書くまでもない形の流れですかね。
928デフォルトの名無しさん:2011/12/09(金) 04:27:17.61
作ろうと思ったら5分かからないと思うけど誰も作らない件
929デフォルトの名無しさん:2011/12/09(金) 06:28:53.05
AをB、BをC・・・と
アルファベットをひとつずつずらすには、どうやって書いたらいいでしょうか?
サクラエディタでの置換を考えてます
930デフォルトの名無しさん:2011/12/09(金) 07:28:01.39
>>929
それはプログラムを作ったほうがいいね。普通のテキストエディタの正規表現では一括は無理ぽ。
perlをインストールしてコマンドプロンプトから呼び出して使えばperlのプログラムと正規表現を使った
置換が出来て便利ですお。

一文字ずつ置換したい場合はtrが便利
http://itpro.nikkeibp.co.jp/article/Reference/20080930/315784/
931デフォルトの名無しさん:2011/12/09(金) 07:30:29.29
>>929
27回置換するしかないんじゃね?
932デフォルトの名無しさん:2011/12/09(金) 07:31:14.75
>>929
Apsalyっていうマイナーなエディタなら並列置換ができるよ
933デフォルトの名無しさん:2011/12/09(金) 12:50:16.63
>>929
linuxのsedで一発のような気がする。
シーザー暗号で有名なロジックだから、簡単に解決する方法いくつもあると思う。
934851:2011/12/09(金) 13:02:06.78
>>841
鬼車用の正規表現でよければどうぞ。この正規表現は式全体にマッチします。

(?!(?>\(+\g<項>\)+)(?!\g<演>)|(?>\g<項>)(?!\g<演>))(?<!\(|\g<演>)(?:\g<項>|\g<カ>)(?>(?:\g<演>(?:\g<項>|\g<カ>))*)
(?!\g<演>|\))(?<項>[a-z\d]+){0}(?<演>[\+\*]){0}(?<カ>\((?:\g<項>|\g<カ>)(?:\g<演>(?:\g<項>|\g<カ>))*\)){0}

長いから改行入れてます。改行を消して繋げて。
項に使える文字は[a-z\d]で指定しています、使用環境に合わせて書き換えて。

名前の意味
<項> = 1つの項
<演> = 演算子
<カ> = 開始カッコから閉じカッコまでの一対のカッコにマッチ。入れ子に対応しており、中にカッコが入っていても
開始カッコに対応する閉じカッコまでマッチします。

鬼車のオプションはONIG_SYNTAX_PERLで。大文字小文字の区別は無しで。
935デフォルトの名無しさん:2011/12/09(金) 14:03:02.79
正規表現だけでなんとかしようと考える人はナンセンス
プログラムの機能と合わせてこそ真価を発揮するぽ
936デフォルトの名無しさん:2011/12/09(金) 14:48:23.50
なんとかしようではなく、余裕でなんとかなる範疇だよ?見た目は複雑だけどやってることは普通の正規表現と大差ない。
937841:2011/12/09(金) 15:48:15.71
>>922
項のC_TERMについてはどうすればいいでしょうか?

簡略化して再依頼です。
項には1-9の数字一桁だけとして([1-9])、
(と)と+と*のみを演算子とした式にマッチする正規表現はどう書けばいいでしょうか?

(1+1)*2    ⇒MATCH
(1+2)*(3+4) ⇒MATCH
((1+2*)    ⇒UNMATCH
938デフォルトの名無しさん:2011/12/09(金) 15:49:03.43
>>934
(abc+cde
これにマッチしたんだけど
939デフォルトの名無しさん:2011/12/09(金) 15:52:43.92
>>934
あ、ONIG_SYNTAX_DEFAULTになってた。
ONIG_SYNTAX_PERLにして実行したら
ERROR: undefined group option
って出たけどどうすればいんでしょ。
できればサンプルコードを…
940デフォルトの名無しさん:2011/12/09(金) 16:44:16.26
>>929
tr "[A-Z]" "[B-Z]A"
941デフォルトの名無しさん:2011/12/09(金) 17:09:55.58
サクラエディタってtrコマンドを持ってるの?
942デフォルトの名無しさん:2011/12/09(金) 17:11:48.57
視野狭窄な子が湧いてきたな
943851:2011/12/09(金) 18:02:20.87
>>938
戻り読みの判定をミスってた。いらないと思って付けなかった判定が必要だった。

修正前 (?<!\(|\g<演>)
修正後 (?<!\(|\g<演>|[a-z\d])

後で書き直したものを貼ります。
944デフォルトの名無しさん:2011/12/09(金) 20:59:56.92
>>937
ちゃんとレス読んでるか?
C#の正規表現は再帰に対応していないから、いくら頑張っても括弧の対応はチェックできない。
さっさと諦めなさい。
945デフォルトの名無しさん:2011/12/09(金) 21:30:34.71
>>944
標準で用意されてないだけでお手上げしちゃう人ってどうなの。
946think49 ◆bKk/qcAKuM :2011/12/09(金) 21:32:38.05
>>944
1回の正規表現でマッチさせることを諦めるだけでいいんじゃないの?
複数回マッチさせれば問題ない
947デフォルトの名無しさん:2011/12/09(金) 21:34:53.74
目的次第なんだろうなあ
948デフォルトの名無しさん:2011/12/09(金) 21:35:20.86
こんばんわ、近藤正彦です。
949デフォルトの名無しさん:2011/12/09(金) 21:50:33.11
だから、何でも正規表現でやろうとすんじゃねー。
950デフォルトの名無しさん:2011/12/09(金) 21:56:51.13
>>944
C#の正規表現は鬼車やPCREのものとは互換性はないが再帰に対応しているぞ
http://msdn.microsoft.com/ja-jp/library/bs2twtah.aspx#balancing_group_definition
951デフォルトの名無しさん:2011/12/09(金) 22:03:58.64
>>934,936
正規表現についてそのような小手先技を極めるよりも、本質的に正規表現はプログラム目的でもないしそのような言語でもないってことをまず理解した方がいい
952デフォルトの名無しさん:2011/12/09(金) 22:38:02.19
生産性と品質を上げられるなら使うべき。
プログラム組んだ方が速くて簡単ならそっちがいい。
953デフォルトの名無しさん:2011/12/09(金) 22:59:48.66
スレ的には正規表現の理解が深まるなら
小手先でも生産性が低くても別にいいじゃない
今回みたいに反面教師にもなるわけだし
954デフォルトの名無しさん:2011/12/09(金) 23:15:21.08
正規表現とプログラミング(のための言語)との区別があいまいで両者一体不可分だったのはunix shellとperlの時代(1998年頃まで)で終わった。
955デフォルトの名無しさん:2011/12/10(土) 01:03:53.46
●正規表現の使用環境
C#

●検索か置換か?
置換

●説明
文字列の中間にある数字を検索して置き換えたい。

●対象データ(ex.)
hogehoge-123.txt → hogehoge-num.txt
hogehogex-123.doc → hogehogex-num.doc
956デフォルトの名無しさん:2011/12/10(土) 01:10:35.52
>>955
まず、「文字列の中間」を定義してください
957デフォルトの名無しさん:2011/12/10(土) 01:13:13.87
文字列の中間というのは拡張子の直前の-の次にある数字です。
この数字があるかないかの確認はすでに済ませてあります。
958デフォルトの名無しさん:2011/12/10(土) 01:16:46.27
>>955
検索: -\d+\(?=.[a-z\d]+$)
置換: -num
959デフォルトの名無しさん:2011/12/10(土) 01:17:29.01
s/(.*-)\d+(\.[^.]+)$/\1num\2/
960958:2011/12/10(土) 01:20:23.66
>>958
エスケープを忘れてた
検索: -\d+\(?=\.[a-z\d]+$)
置換: -num
961デフォルトの名無しさん:2011/12/10(土) 01:36:26.03
できました!
ありがとー!
962デフォルトの名無しさん:2011/12/10(土) 07:35:12.31
対象
ABCこの間に文字列があったりなかったりDEF

結果
DEF

"ABC"よりも後続にある(最初の)"DEF"だけを対象としたいです
戻り読み条件が、長さ一定でなくてもOKならばできるのですが・・・
963デフォルトの名無しさん:2011/12/10(土) 08:48:42.15
>>962
ABC.*?(DEF)
964デフォルトの名無しさん:2011/12/10(土) 09:04:23.43
>>962
ABC.*?\KDEF
965デフォルトの名無しさん:2011/12/10(土) 09:38:11.06
つ 正規表現の入門書
966デフォルトの名無しさん:2011/12/10(土) 10:09:40.90
>>965
つ\s+正規表現の入門書
967デフォルトの名無しさん:2011/12/10(土) 13:20:46.81
\Kって、なにで使える?
968デフォルトの名無しさん:2011/12/10(土) 13:56:35.94
>>966
[⊃|つ]\s+正規表現の入門書
969デフォルトの名無しさん:2011/12/10(土) 14:28:53.54
>>967
可変長の戻り読みが可能で(\Kより前をマッチ文字列に含めない)、置換操作で同じ文字列の置換をさせないことができる

s/(foo)bar/$1/g
s/foo\Kbar//g
970デフォルトの名無しさん:2011/12/10(土) 14:59:24.06
どういう環境で使えるのよ
971デフォルトの名無しさん:2011/12/10(土) 16:15:10.95
>>967
Perl 5.10以降とかpcreとかboost regexとか。
あとは>>192とか。サクラエディタではまだうまく動かないんだっけ?
972デフォルトの名無しさん:2011/12/10(土) 16:47:26.37
pcreって鬼車じゃないの?
973デフォルトの名無しさん:2011/12/10(土) 16:51:02.92
>>972
別物だろ。
974デフォルトの名無しさん:2011/12/10(土) 18:29:05.11
それはない。
中身のことだろ?
975デフォルトの名無しさん:2011/12/10(土) 22:34:32.09
>>951>>953
こういう馬鹿って何のために生きてるんだろうなぁ。
976デフォルトの名無しさん:2011/12/10(土) 23:00:08.72
>>975
ところでおまえは何のために生きてるんだ?
977デフォルトの名無しさん:2011/12/10(土) 23:20:49.65
世界の発展に貢献するため
978デフォルトの名無しさん:2011/12/10(土) 23:24:10.29
マッチさせるだけだと面白くないなぁ。
http://ideone.com/clone/ej7Xf
979デフォルトの名無しさん:2011/12/10(土) 23:27:34.36
こんばんわ、近藤正彦といいます

みなさん、私の事をマッチと呼んでくさ(ry
980デフォルトの名無しさん:2011/12/10(土) 23:29:23.82
Googleは世界の発展に貢献するために日本も含む世界各国で違法行為を行って問題になっています
981デフォルトの名無しさん:2011/12/10(土) 23:30:13.03
彼らは世界を革命するために日夜デュエルを行っています。
982デフォルトの名無しさん:2011/12/10(土) 23:33:17.65
こんな過疎スレでも次スレが必要だとは思わなんだ...
983デフォルトの名無しさん:2011/12/10(土) 23:34:20.56
ハッテンさん次スレおねがい
984デフォルトの名無しさん:2011/12/10(土) 23:35:58.63
985デフォルトの名無しさん:2011/12/10(土) 23:36:10.99
次の次はずっと俺のターン!
986デフォルトの名無しさん:2011/12/11(日) 00:07:09.56
>>979
s/近藤[  ]*?正彦/マッチ/g
987デフォルトの名無しさん:2011/12/11(日) 00:26:56.15
>>937
C#を初めて使った。括弧対応取れるだけの気がする。
http://ideone.com/CwPky
988デフォルトの名無しさん:2011/12/11(日) 01:08:01.91
>>955とかも841の質問なのかな、遠回りな質問の仕方をするからみんなが迷惑するんだよ。
基本的な学習すらしないで人に聞いて済まそうという姿勢は頂けない。
989デフォルトの名無しさん:2011/12/11(日) 02:35:31.34
パーサジェネレータ

bison(バイソン)とは構文解析器を生成するパーサジェネレータの一種であり、CコンパイラとしてのGCCのサポートのために[要出典]開発されたフリーソフトウェアである。
http://ja.wikipedia.org/wiki/Bison


ANTLR(ANother Tool for Language Recognition)とは、LL(k)構文解析を用いたパーサジェネレータである。
http://ja.wikipedia.org/wiki/ANTLR

Coco/R は、対象となる言語の属性付き文法を入力とし、その言語の字句解析器と構文解析器を生成するパーサジェネレータである。
http://ja.wikipedia.org/wiki/Coco/R
990デフォルトの名無しさん:2011/12/11(日) 02:58:24.83
次スレ梅
991851:2011/12/11(日) 06:42:36.51
>>841
(?!(?>\(+\g<項>\)+)(?!\g<演>)|(?>\g<項>)(?!\g<演>))(?<!\(|\g<演>)(?:\g<項>|\g<カ>)
(?>(?:\g<演>(?:\g<項>|\g<カ>))*)(?!\g<演>|\))(?<項文字>
[^\x00-\x20\-+*/=()<>]
){0}(?<項>(?<!\g<項文字>)(?>\g<項文字>
{1,30}
)(?!\g<項文字>)){0}(?<演>[\+\*]){0}(?<カ>\((?:\g<項>|\g<カ>)(?:\g<演>(?:\g<項>|\g<カ>))*\)){0}

3行目で項に使える文字を設定出来ます。↑の設定では以下の文字を使えなくしてます。

・アスキーコード表での16進数の00番から20番までの文字(改行や半角スペースなど)
・-、+、*、/、=、(、)、<、> の9文字

他に項の文字として含まれては困る文字があったら [^ ] の中に追加していって下さいね。

例、[^\x00-\x20\-+*/=()<>あいうえお] ← あいうえおの5文字が項を構成する文字から追加で除外されます。

5行目では1つの項の文字の長さを設定出来ます。上の設定では1文字以上30文字以下に設定してあります。
992851:2011/12/11(日) 07:21:44.82
>>937
>項には1-9の数字一桁だけとして([1-9])
>>991の3行目で項に使える文字を設定します。この場合は3行目を↓に書き換えるだけです。
[1-9]

[^ ] とすると"使えない"文字の設定になります。
[ ] とすると"使える"文字の設定になります。

>項のC_TERMについてはどうすればいいでしょうか?
>>991の正規表現は式全体にマッチする正規表現です。この正規表現で式全体を取り出し、項の部分がC_TERMに
マッチするかをテストして下さい。

今回の場合、項以外の文字は(、)、+、*の4文字だけなので、それ以外の文字列が項です。
↓の正規表現で項が1つずつ取り出せます。
[^()+*]+

取り出した文字列がC_TERMにマッチするかテストするコードを書いて下さい。すべての項がC_TERMにマッチすれば
照合完了です。C_TERMにマッチするかテストすると同時に置換もすれば目的達成です。

>>939
>ERROR: undefined group option
今回の正規表現では<項>など、グループの名前として漢字を使っていますが、C#では半角文字しか
認識出来ないのかも知れません。代わりに<TERM>などのように半角文字の名前に書き換えると動くかも知れません。

>サンプルコード
C#の環境はないので申し訳ないけど他の方にお願いしてみて下さい。^-^;
993デフォルトの名無しさん:2011/12/11(日) 10:21:22.31
994デフォルトの名無しさん:2011/12/11(日) 10:43:31.79
>>993
おつうめ
995939:2011/12/11(日) 14:59:18.55
>>992
できました。
C#じゃなくてCなんですけどね^^;;;
996939:2011/12/11(日) 15:01:04.31
うそつきました。
ONIG_SYNTAX_PERLにするとエラーが出ることには変わりなかったですorz
> r = onig_new(®, pattern, pattern + strlen((char* )pattern),
> ONIG_OPTION_DEFAULT, ONIG_ENCODING_UTF8, ONIG_SYNTAX_PERL, &einfo);
こうじゃないってことですかね。
997デフォルトの名無しさん:2011/12/11(日) 15:01:38.98
うめる
998デフォルトの名無しさん:2011/12/11(日) 15:13:00.61
>>996
ONIG_SYNTAX_PERL_NGだろ?
999939:2011/12/11(日) 15:15:22.79
>>998
動きました!
>>934
> 鬼車のオプションはONIG_SYNTAX_PERLで。大文字小文字の区別は無しで。
と書かれていたので><

ありがとうございました
1000デフォルトの名無しさん:2011/12/11(日) 15:17:33.71
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。