2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

正規表現 part 3

1 :デフォルトの名無しさん:2006/08/24(木) 19:04:59
正規表現(Regular Expression)スレです。

◆関連サイト
正規表現メモ
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

◆関連スレ
[UNIX板] 正規表現
http://pc8.2ch.net/test/read.cgi/unix/1039165754/

◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/

2 :デフォルトの名無しさん:2006/08/24(木) 19:06:29
とりあえずまだpart2が埋まってない

3 :デフォルトの名無しさん:2006/08/24(木) 22:10:05
Javaで文字列属性チェックに使ったら糞重かった。
"[A-Za-z0-9]*"でサクッと半角英数字チェックするだけなのに
'a' <= c && c <= 'z'とかで判定する方が10倍速かった。

うーん、スクリプトだから許容できるのが正規表現だとでもいうのか。

4 :デフォルトの名無しさん:2006/08/24(木) 22:24:37
もっと複雑な場合こそが正規表現の使いどころ。

5 :デフォルトの名無しさん:2006/08/29(火) 11:35:25
/.*/

6 :デフォルトの名無しさん:2006/09/09(土) 17:31:20
>>3
まあそんなもんだわさ

7 :デフォルトの名無しさん:2006/09/12(火) 00:58:15
前スレは1000盗り合戦会場

8 :デフォルトの名無しさん:2006/09/13(水) 00:09:49
infoseek
インフォ正規
インフォ精液

9 :デフォルトの名無しさん:2006/09/13(水) 13:51:04
aaa111bbb222
という文字列から
変数aに111を、変数bに222を
格納するようにするにはどうしたらいいですか

10 :デフォルトの名無しさん:2006/09/13(水) 13:55:11
"aaa111bbb222" =~ /\d+/
a = $&
でaに111は格納できたんですが
222も見るにはどうしたらいいですか

11 :デフォルトの名無しさん:2006/09/13(水) 14:02:05
>>10
Ruby なら scan を使うと文字列を逐次正規表現マッチできて便利だよ。

"aaa111bbb222".scan(/([a-z]+)(\d+)/).each { |key, val|
p [key, val]
}

ブロックの中は適当に料理してちょ。

12 :デフォルトの名無しさん:2006/09/13(水) 14:15:26
ありがとうございました。
a = Array.new
"aaa111bbb333".scan(/\d+/).each{|tmp|
a << tmp
}
てな感じで解決しました。ありがとうございました。

13 :デフォルトの名無しさん:2006/09/13(水) 14:23:21
a = "aaa111bbb333".scan(/\d+/)

14 :デフォルトの名無しさん:2006/09/14(木) 05:46:09
なんかスクレイピングとかリライトっぽい質問ばかりだな

15 :デフォルトの名無しさん:2006/09/14(木) 10:14:56
それ以外の質問をしなくては何か都合が悪いことでもおありで?

16 :デフォルトの名無しさん:2006/09/14(木) 12:07:26
わたしと正規表現とどっちが大事なの?

って言われたらどっちを選びますか?


17 :デフォルトの名無しさん:2006/09/14(木) 12:11:11
性器を選びます。


18 :デフォルトの名無しさん:2006/09/14(木) 13:06:04
jul8,jun1というような日付を
jul08,jun01のように前に0を入れたいのですが
これを正規表現で実現しようとすると
数字と文字を別々にマッチさせて
$10$2のように書くと、$10と解釈されてしまいます
エスケープは置換文字列では使えないようなんですが
何か良い方法はあるでしょうか?

19 :デフォルトの名無しさん:2006/09/14(木) 13:08:08
 

20 :デフォルトの名無しさん:2006/09/14(木) 13:18:27
実装言語は何かを言ってくれないと的確な回答はできないと思うのだが、
勘で "${1}0${2}" とか。

21 :デフォルトの名無しさん:2006/09/14(木) 16:31:08
最近みつけたけど、ここ、まあまあわかりやすい

ttp://ukiya.sakura.ne.jp/

22 :デフォルトの名無しさん:2006/09/14(木) 17:49:04
>>21
正規表現テスターをとりあえずダウンロードした。

23 :デフォルトの名無しさん:2006/09/14(木) 19:19:36
(?:$1)0$2

24 :デフォルトの名無しさん:2006/09/14(木) 19:21:58
>>23は勘違いです(´・ω・`)

25 :デフォルトの名無しさん:2006/09/14(木) 20:22:33
もともと
jul08,jun01
がまざってたら
jul008,jun001
ができる

26 :デフォルトの名無しさん:2006/09/14(木) 20:33:36
>>25
んなこたあない。
s/([a-z]+)(\d)\b/${1}0$2/g;

27 :デフォルトの名無しさん:2006/09/15(金) 00:41:30
>>20
>>25
>>26
なるほど、自分の勉強不足でした。
{

28 :デフォルトの名無しさん:2006/09/15(金) 01:13:44
Ruby互換のOnigurumaという正規表現エンジンを
TextMateというエディタから用いて変換していました。
日本語マニュアルがないため、置換文字列でどんな構文
があるかきちんと調べた事がなかったですが、今回気になって
調べてみると(?1:$1)0$2という置換文字列でうまくいきました。
Perlのやり方も凄く勉強になりました。
お騒がせしてすいません。

29 :デフォルトの名無しさん:2006/09/15(金) 06:52:33
$1\x30$2 なんて方法もある。

30 :デフォルトの名無しさん:2006/09/18(月) 00:12:48
青空文庫のルビを消したいのだが
《.*》
だと
朝の|挨《あい》|拶《さつ》を

朝の|挨が
になっちゃうわけです。同一行に《が二つ以上現れなきゃいいんだけれども
実際現れるから困る。知恵を貸して欲しい

31 :デフォルトの名無しさん:2006/09/18(月) 00:15:28
>>30
s/《.*?》//g;
「perl 最短一致」でググれ。

32 :デフォルトの名無しさん:2006/09/18(月) 00:25:23
サンクス!なるへそね。恩にきる

33 :デフォルトの名無しさん:2006/09/18(月) 18:29:26
行頭の1〜3文字目にスペース以外の文字がある行を
マッチささたいのですがどうしたらいいですか?

34 :デフォルトの名無しさん:2006/09/18(月) 20:01:13
/^([^ ]| [^]| [^ ])/とか、perlでif (/^.../ && $& =~ /[^ ]/)とか。

35 :デフォルトの名無しさん:2006/09/18(月) 20:27:32
/^.{0,2}[^ ]/
勿論 !/^ / とはマッチするものが違う

36 :デフォルトの名無しさん:2006/09/18(月) 20:29:29
>>33
Perlなら、

$str !~ /^   /

じゃダメなの?

37 :デフォルトの名無しさん:2006/09/18(月) 21:12:42
>>36
それだと空行や1個や2個しか文字が無い行もマッチするけどね。

38 :デフォルトの名無しさん:2006/09/21(木) 00:03:58
[\n][\n]*
この正規表現は、二つ以上の連続した改行文字(\n)にマッチしますが
\n と \nの間にいくつかの空白文字(半角スペース, タブ)がある場合にマッチする表現がわかりません。

一応「 [\n](|[\s]*)[\n] 」と書いてみたものの、思うようにマッチしません。
どう表現すればよいのでしょうか? よろしくおねがいします。

39 :デフォルトの名無しさん:2006/09/21(木) 02:26:10
>>38

で、何を使ってでそれをやろうとしているの?
\s とかあるからPerlかな?

マッチングに使っている部分全部さらしてみ。


40 :デフォルトの名無しさん:2006/09/21(木) 02:38:33
>>38
正規表現勉強しなおせ


/\n\s+?\n/

41 :デフォルトの名無しさん:2006/09/21(木) 03:41:31
オマエモナーw

42 : ◆TWARamEjuA :2006/09/21(木) 19:15:26
s

43 :38:2006/09/21(木) 20:50:34
>>39
PHPのpreg()系です。

HTMLの<textarea>から</textare>に入力された文字から、連続した改行(=空行=)を取り除こうと思ったのです。
ただ、空行ではないけれど、改行と改行の間にスペース(タブも含む)がある行も取り除きたいのです。

これはどう表現すればよいのでしょうか?
当然ですがtextarea要素の内容は、全体を一つの文字列として扱うので「 ^$ 」という表現はダメでした。

44 :デフォルトの名無しさん:2006/09/21(木) 21:47:37
>>43
Rubyならhtmlパーサがあるから簡単に処理できるのだがな。

45 :デフォルトの名無しさん:2006/09/21(木) 23:00:15
>>43
> PHPのpreg()系です。

先に言えよ、ヴォケ!

$html = preg_replace_callback('{(?<=<textarea>)(.+?)(?=</textarea>)}si',
create_function('$matches',
'return preg_replace("/(?<=\\n)\\s*\\n/", "", $matches[0]);'), $html);

46 :デフォルトの名無しさん:2006/09/21(木) 23:11:48
題は空行削除であって、textatraタグは無関係でしょ

47 :45:2006/09/21(木) 23:43:23
>>46
ん?空行削除されてない?

48 :デフォルトの名無しさん:2006/09/22(金) 00:07:15
>>43
そんなときは、一度でやろうとせずに
まず 
「空白のみを含む行を削除」してから
「連続する改行を1改行に置換」するといいかもね。

49 :デフォルトの名無しさん:2006/09/22(金) 00:23:27
>>45
正規表現勉強しなおせw

50 :デフォルトの名無しさん:2006/09/22(金) 00:24:19
phpのeregで
@abc.gr.jp と @wxy-z.co.jp
以外のアドレスを拒否する場合
どうしたらいいでしょうか。

51 :45:2006/09/22(金) 00:47:13
>>49
コード出して指摘してくださいよ。

52 :デフォルトの名無しさん:2006/09/22(金) 01:59:16
>>43
ただのpreg_replaceでこんな感じでいけるだろ

/(^|\n)\s*(?:\n)/

あっちのスレで話題になってた各ブラウザの挙動がどうのは知らん

53 :デフォルトの名無しさん:2006/09/23(土) 08:29:03
Perlで、
 &gt; から &lt; に含まれる <br> のみ全て削除するにはどうすればいいでしょう?

$str =~ s/&lt;(.*?)<br>(.*?)&gt;/&lt;$1$2&gt;/g;
でやってみたのですが、<br>が複数ある場合ひとつしか削除できません。
いろいろ調べたんですが行き詰りました。
低レベルな質問かもしれませんがお願いします。
(文中の&は全角ですが実際は半角でやってます。)

54 :デフォルトの名無しさん:2006/09/23(土) 09:05:05
sub delbr {
my ($tmp) = @_;
$tmp =~ s/<br>//g;
return $tmp;
}
を用意した上で
s/&gt;(.*?)&lt;/delbr($&)/ge;

55 :デフォルトの名無しさん:2006/09/23(土) 17:59:43
エディタとかで検索や置換する程度なのですが、
正規表現だけで、Not条件を加えるのは無理なんでしょうか?

http://www.kt.rim.or.jp/~kbk/regex/regex.html#CCLASS
にあるような、よくある勘違いの例と同じなのですが、
ここで言うと[^foo]が"foo"以外では無く、fとo以外の一文字をあらわすのはわかります。

でも、それではその"foo"を全体を含まない文字列というのを
表現(追加)したい場合はどうすればいいんでしょうか?

"|"でorが出来るみたいにnotできたら簡単確実なのに、うまく除外するのに毎回頭を絞ってます。
検索等フロントエンドの実装で、否定条件指定のフィルタリングがある場合ならいいんですが…

例えば[^(giko|mike)]nekoみたいな感じで、簡単に文字列や正規表現全体を
否定(〜以外)できたらなにかと便利だと思うのですが、
それは正規表現の範疇外なのでしょうか?

うまくやる方法はありますか?

56 :デフォルトの名無しさん:2006/09/23(土) 18:26:40
(?!giko)(?!mike)(?=neko)
こうですか!? わかりません!

…原理はわからないが環境によっては動くな。おいおい勉強しまつorz

57 :デフォルトの名無しさん:2006/09/23(土) 18:39:05
AJAXでリアルタイムに正規表現チェックできるサイト
すごい便利。

Rex V: an AJAX Regular EXpression eValuator
http://www.rexv.org/



58 :デフォルトの名無しさん:2006/09/23(土) 18:46:54
>>55-56
何を何でやりたいのかはっきり書かないからレスがない。


59 :デフォルトの名無しさん:2006/09/24(日) 00:18:49
[^(foo)]

60 :デフォルトの名無しさん:2006/09/24(日) 10:55:50
>55

\b(?:(?!giko|mike)\w)+neko

とか、どうですか。

61 :デフォルトの名無しさん:2006/09/24(日) 11:06:49
([あ-ん]|あっ)*

62 :デフォルトの名無しさん:2006/09/24(日) 11:36:40
>>61
おまえのアヌスになど興味はない

63 :デフォルトの名無しさん:2006/09/24(日) 20:50:08
ワロタ

64 :デフォルトの名無しさん:2006/09/24(日) 22:59:48
* ←アナル

65 :デフォルトの名無しさん:2006/09/24(日) 23:18:17
 * ←アナル
ξ←ソフトクリーム

MS Pゴシックで見てね1

66 :デフォルトの名無しさん:2006/09/25(月) 00:05:06
    ∧_ ∧     ([あ-ん]|あっ)*
   (´∀` )
    (⊃⌒*⌒⊂)
     /__ノ''''ヽ__)

67 :デフォルトの名無しさん:2006/09/25(月) 20:11:30
<a href='javascript:window.open("http://hoge/page","f","width=460,height=400");void(0);'>javascript:window.open</a><br>
のようなリンクを
<a href='http://hoge/page'>javascript:window.open</a><br>
にするには
Obj.href.replace(/JavaScript:window.open\((\"?|\'?)(.*?)(\"?|\'?),?.*\);?(.*);?/ig,'$2')
ではうまくいきません。
よろしくお願いします。

68 :デフォルトの名無しさん:2006/09/25(月) 20:24:20
age

69 :デフォルトの名無しさん:2006/09/26(火) 18:09:05
Cソース中の2つのコメントの、「//・・・」と「/*・・・・・*/」を、空白に置き換えることは可能ですか?
置き換えるのは空白一文字ではなく、コメントになっている文字分空白にしたいです

70 :デフォルトの名無しさん:2006/09/26(火) 23:01:46
$text='</a></b>AIUEO</c>';
$pat='>(.*?)</c>';
if($text=~/$pat/) {
 print $1."\n";
}
else {
 print "ng\n";
}

AIUEOのみ抽出したいのですが、</b>AIUEOが返ってきます。
.*?は最短マッチのはずですが、なぜでしょうか?

71 :デフォルトの名無しさん:2006/09/26(火) 23:29:57
>>69
こういう例を考えると正規表現よりCでコード書いた方が早いと思うよ
printf("string//string"); // print

>>70
Perlでは一度成功したらそれでマッチが完了する
最短なのは .* に関してのみ
>([^<>]*)</c>
で望みのマッチをする

72 :デフォルトの名無しさん:2006/09/26(火) 23:39:31
>>70 おまえもしかして、あき?

73 :70:2006/09/27(水) 00:12:15
>>71
>Perlでは一度成功したらそれでマッチが完了する
これは前方から順に一致検索をしているとから、ということですか?
たとえば、
$text='</b></b>AIUEO</c></c>';
$pat='</b>(.*?)</c>';
の場合、$textの先頭側にある</b>と</c>に挟まれた文字列が抽出されてくるから、</b>AIUEOがマッチ。
もし後方から一致検索されていれば、AIUEO</c>がマッチするはずですもんね。

スマートな方法がなさそうなので([^<>]*)にしときます。
ありがとうございました。

>>72no

74 :デフォルトの名無しさん:2006/09/27(水) 12:03:56
#!/usr/bin/perl -p0777
BEGIN {
$COMMENT = qr{/\*.*?\*/};
$COMMENT2 = qr{//[^\n]*};
$DOUBLE = qr{\".*?[^\\]\"};
$SINGLE = qr{\'.*?[^\\]\'};
$OTHER = qr{[^"'/]};
}
s/($DOUBLE|$SINGLE|$OTHER+)|$COMMENT|$COMMENT2/$1/g;

詳説 正規表現がどっかにいってしまった
添削希望

75 :デフォルトの名無しさん:2006/09/27(水) 12:10:09
コメントを除去したいならプリプロセッサに通せば良いと思うんだ

76 :デフォルトの名無しさん:2006/09/27(水) 20:30:05
Javaで正規表現を入力チェックに使ってる人って居る?
速度はともかく開発効率がいいから、
決められたライブラリしか使えないときに便利なんだよね

77 :デフォルトの名無しさん:2006/09/27(水) 23:51:17
>>74
意外とシンプルにまとまるんだね
リテラルで"string\\"のパターンが来ると内外逆転するかな
やり方はいろいろあるけど qr{"(\\.|[^"])*"} とか

78 :デフォルトの名無しさん:2006/09/28(木) 00:21:03
>>76
GUIコンポーネントの入力チェックに使ったことはあるな
ああいうのは手でコーディングするのは苦痛なだけだから。
あと、入力チェックが必要になるようなGUIコンポーネントの場合、
入力は一般的に短いので、速度は問題にならないし

79 :デフォルトの名無しさん:2006/09/28(木) 07:56:20
ちょっと質問

<aaa>
<aaa>
<aaa>
<aaa>
<data1>xxxx</data1>
<data2>yyyy</data2>
</aaa>
</aaa>
</aaa>
</aaa>
こんな文字列があったとして
正規表現つかって一発で一番内側にある<aaa>
の内側の文字を取ってくることってできるんだろうか・・・・
可能か不可能かどうかも想像がつかない・・・orz

80 :デフォルトの名無しさん:2006/09/28(木) 09:04:06
>>79
できる。

81 :デフォルトの名無しさん:2006/09/28(木) 09:23:50
>>80
横からスマソ
へぇ〜
出来るんだ
これは俺もちょっと興味深い

82 :デフォルトの名無しさん:2006/09/28(木) 12:00:38
<aaa>(?!<aaa>)(.*?)</aaa>

83 :デフォルトの名無しさん:2006/09/28(木) 15:40:04
XMLを無理やり正規表現で扱うくらいなら
最初からXMLとして扱ったほうが楽なんじゃないの?

84 :デフォルトの名無しさん:2006/09/28(木) 18:50:49
長さ優先じゃなくて出現優先にすりゃいいだけだね

85 :デフォルトの名無しさん:2006/09/28(木) 19:22:59
>>80
入れ子処理だよね。正規表現第二版だと…

( )の入れ子の場合こうなっているから、
$LevelN = qr/ (?> [^()]+ | \( ??{ $LevelN }) \) )*/x;

えーと………

$LevelN = qr/ (?> [^(<aaa>|<\/aaa>)]+ | <aaa> (??{ $LevelN }) <\/aaa> )*/x;


……(<aaa>|<\/aaa>)の否定ってどうやるんだ?


後は任せた orz

86 :デフォルトの名無しさん:2006/09/28(木) 20:12:05
正規言語でない言語を正規表現で扱おうとするのはやめた方がいいんでないかと
いや、今の「正規表現」が厳密には正規表現じゃないのは知ってるけど、やっぱり
無理やり拡張したため、無理が出てると思うんだ

87 :デフォルトの名無しさん:2006/09/29(金) 00:07:24
別に拡張表現使わなくてもできるけど。
/(<aaa>)*(.*?)<\/aaa>/

88 :デフォルトの名無しさん:2006/09/29(金) 01:50:24
バックトラックしまくりそうだけど。一応。

(<aaa>.*)*<aaa>(.*?)<\/aaa>

Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
でもイケた。

89 :デフォルトの名無しさん:2006/09/29(金) 04:41:56
>Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
Perlなら、{(?:<aaa>.*?)*<aaa>(.*?)</aaa>}m

90 :デフォルトの名無しさん:2006/09/29(金) 10:15:22
1. Function
2. End Function
3. Exit Function
上記で1だけを検索したい場合どうすればいいでしょうか?

↓ではだめでした
 (?<!(Exit|End))\s*Function



91 :デフォルトの名無しさん:2006/09/29(金) 10:20:41
>>90
^Function$
でいいんじゃね?

92 :デフォルトの名無しさん:2006/09/29(金) 10:39:03
>>80->>89
トンクス!
もらった情報でなんとかなったさ〜!
ソフトでガリガリ解析するのがたまらなかったんで・・・

ちなみにXML解析じゃぁないんだけどね(^^;
俺ももっと勉強しなきゃ・・・だなぁ(;´Д`)

もっと頭やわらかくする必要がありそうだorz

93 :デフォルトの名無しさん:2006/09/29(金) 10:43:36
>>90
(?:^|[^dt\s]|(?:^|[^n]|(?:^|[^E])n)d|(?:^|[^i]|(?:^|[^x]|(?:^|[^E])x)i)t)\s*Function

オレならFunctionでマッチさせてマッチ位置もらってからEndかExitが前に
ないことを別途調べるな。否定と正規表現は相性悪い。



94 :デフォルトの名無しさん:2006/09/29(金) 10:45:47
パーサ書いた方が実装容易で見通しも保守性も拡張性もあって良いような気がする漏れは失格ですかそうですか。

95 :デフォルトの名無しさん:2006/09/29(金) 11:06:53
タグ系はXPathでええやん

96 :デフォルトの名無しさん:2006/09/30(土) 02:44:00
>>94
俺も同じこと思った。あと、XMLだとそもそも既存のパーサがあるのに
何故それを使わないで正規表現で済まそうとするのかと。あと、ある要素
取り出すだけなら、>>95の書いているようにXPath使う手もあるな

97 :デフォルトの名無しさん:2006/09/30(土) 06:37:14
アクセスログから検索ワードを抽出するのを試みたいんだけど、
色んな検索エンジンや仕様があって把握しきれません
まとめたサイトみたいなものはありませんか

98 :デフォルトの名無しさん:2006/09/30(土) 11:41:39
>>97
>>1

何のためのテンプレよ。

99 :デフォルトの名無しさん:2006/09/30(土) 13:37:17
perlの
(?{ code })
Perlにおいて、埋め込まれたPerlコードを実行します
(??{ code })
Perlにおいて、埋め込まれたPerlコードを実行してその結果を正規表現を表すものとして使用
ができる、windows用の置換ツールってありますか?

100 :デフォルトの名無しさん:2006/09/30(土) 14:03:11
何に使うの?

101 :デフォルトの名無しさん:2006/09/30(土) 14:08:17
>>99
Perl

102 :デフォルトの名無しさん:2006/09/30(土) 19:01:09
bbbにマッチさせるにはどうすればよいでしょう?
ただし、次のように、bbbが<x>と</x>に囲まれている場合は除きます。
また、aaa,bbbは0個以上の任意の文字列とします。
言語はrubyです。

<x>aaabbbccc</x>

自分でやってみた結果はこうです。

/(?!<x>.*)bbb(?!.*<\/x>)/

これでうまくいっているように見えますが、
他に書き方があればよろしくお願いします。

103 :デフォルトの名無しさん:2006/09/30(土) 19:03:35
>aaa,bbbは0個以上の任意の文字列とします。

aaa,cccは0個以上の任意の文字列とします。
でしたorz

104 :デフォルトの名無しさん:2006/09/30(土) 19:14:42
思うんだがなんで自分でパーサ書かないのかな?
XMLだとタグが1行におさまっているとは限らないわけで

<x
>
aaabbbccc
</x>

とかも考えられるでしょ?
そんなのを正規表現でやる方がおかしい

105 :デフォルトの名無しさん:2006/09/30(土) 19:22:09
確かにブランクの扱いに特徴のあるものは正規表現に向いてないな。

106 :デフォルトの名無しさん:2006/09/30(土) 20:00:16
タグは必ず1行におさまります。個人的に利用してるデータで、XMLとかじゃないんですよ。
なので、実は括弧は目印にすぎませんから、形式は何でもいいんです。
ただ、マッチした部分を括弧で囲みたいわけです。しかし、すでに括弧で囲まれている場合は、
不要なんです。入れ子にしたくないわけです。

107 :デフォルトの名無しさん:2006/09/30(土) 20:34:17
>>106
「括弧」って何の話?

108 :デフォルトの名無しさん:2006/09/30(土) 20:46:18
require 'html'
html = HTMLtokens.new('ファイル名l')
html.between("x") { |i| html.tokens[i] = html.tokens[i].gsub(/b+/, 'c') }

109 :デフォルトの名無しさん:2006/09/30(土) 20:49:14
まあそれでも<x>aaaa¥<bbb</x>とかではまったりするわけよ
正規表現にふさわしくない題材だと思うね

110 :デフォルトの名無しさん:2006/09/30(土) 20:51:18
テンプレサイトに置いてるHTMLパーサ使えば、
広告のカットやテーブル項目の並び替えとかスクリプトからできるんだが。
マニュアルが無いせいなのかな。

111 :デフォルトの名無しさん:2006/09/30(土) 20:56:49
XMLを正規表現でやるのはやっつけ仕事の時だけ

112 :デフォルトの名無しさん:2006/09/30(土) 20:57:56
正規表現の実装というと、やっぱりPerlが基準になるのか?
あまりいいたくはないが、「Perlの正規表現に準拠」ってなるのか。
Perlから正規表現の道に入ったからさ。

113 :デフォルトの名無しさん:2006/09/30(土) 21:00:27
POSIXが基準だろ。
漢字が扱えるのでPOSIXなのはboostだと思う。

114 :デフォルトの名無しさん:2006/09/30(土) 21:30:50
ふ〜ん。たんくす。

115 :デフォルトの名無しさん:2006/09/30(土) 21:37:12
>>109
というか、何でもかんでも正規表現で扱えるわけじゃないというのを
知らない奴が多過ぎる。自分の周りでもXMLのパーサを一生懸命
正規表現で書こうとしてる奴がいたりして、辟易する

116 :デフォルトの名無しさん:2006/09/30(土) 21:38:55
汎用的なトーカナイズパーサーが無いからじゃねーの?

117 :デフォルトの名無しさん:2006/09/30(土) 21:41:18
XMLパーサはライセンスと段取りのメンドさが問題だろ。

あとWEB上のルールのいいかげんなHTMLの処理も出来ないから、
例えばショップのWEBページから価格を吸い出して
XMLに保存という時にも困る。

118 :デフォルトの名無しさん:2006/09/30(土) 23:37:56
>>114
納得すんなよ

119 :デフォルトの名無しさん:2006/10/01(日) 00:37:01
>>114
Perlの正規表現はPOSIXのそれを超えている。

120 :デフォルトの名無しさん:2006/10/01(日) 00:45:58
Perlの正規表現の欠点は

・仕様の合わせ込みが厄介なこと、
・DFAのエンジンとの親和性が低いこと
・コストの計算が難しいこと(計算量の爆発の予測しにくい)
・最短の一致を見つけるのが遅くなる(ifの条件式とかは別に最短でも成立する)

原因は縦型探索で比較の順序の影響を受けることにある。

121 :デフォルトの名無しさん:2006/10/01(日) 01:12:01
c++0xのregexのドラフトには、POSIXの他ECMAScript準拠の正規表現も
盛り込まれてる。
最初の版だとPerl準拠のもあったんだけど、削除されてしまった。

122 :デフォルトの名無しさん:2006/10/01(日) 01:18:43
あと、将来的にメニイコアでスレッド立てまくりな環境になった場合、
POSIXだと完全な最長一致だから並列実行で設計できるが
Perl式だと互換性のすり合わせが難しくなるだろ。
(最初に見つけた結果で探索を打ち切るのだがその順番が)

123 :デフォルトの名無しさん:2006/10/01(日) 01:28:31
>>118-119
やっぱりPerlは詰め込み杉ってところだよね。
最近では、java.util.regex をよく使ってる。
javascriptだとブラウザ対応でどこでも動くから、
javascript の正規表現を知っておくと良さそうだね。
メジャーな実装としては、perl, ruby, javascript (java, c$)ってところかな?
ありがとね〜

124 :デフォルトの名無しさん:2006/10/01(日) 13:10:09
>>111
>XMLを正規表現でやるのはやっつけ仕事の時だけ

それって某社の取締役最高技術責任者のこと?

125 :デフォルトの名無しさん:2006/10/04(水) 13:28:03
0〜100までしか入力できないようにする方法ありますか?

126 :デフォルトの名無しさん:2006/10/04(水) 17:18:08
言語を教えろ、言語を。

127 :デフォルトの名無しさん:2006/10/04(水) 17:35:35
/^(100|[1-9]\d|\d)$/

128 :デフォルトの名無しさん:2006/10/04(水) 21:05:15
if文でゴー!

129 :デフォルトの名無しさん:2006/10/10(火) 10:28:06
a-z A-Z 0-9 のように全角記号を始点から終点で指定するには?


130 :デフォルトの名無しさん:2006/10/10(火) 11:54:44
>>129
全角記号の定義とエンコードによってまちまちなんでね?

131 :デフォルトの名無しさん:2006/10/10(火) 22:37:50
http://up.nm78.com/data/up112376.jpg

132 :デフォルトの名無しさん:2006/10/10(火) 22:53:33
>>131
あとついあったよね、会談。
はずしてやんの。

133 :デフォルトの名無しさん:2006/10/10(火) 23:03:19
占星術は統計学なんだから、断言してる時点で詐欺師

134 :デフォルトの名無しさん:2006/10/11(水) 00:11:47
>>132



???

135 :デフォルトの名無しさん:2006/10/11(水) 12:28:34
>>130
unicode

つか、それぞれのエンコードの定義マップ見たらいいわけ?


136 :デフォルトの名無しさん:2006/10/11(水) 17:12:53
HTMLのソースから任意の拡張子ファイルにリンクしているサムネイル画像のURLを
取得したいのですが、どういう正規表現で可能でしょうか?

具体的には例えば

 <a href=xxx.mpg><img src=/image/zzz.jpg></a>

このようなものから/image/zzz.jpgを抜き出したいのです。

WEB巡回する用途なので、コロンやらパスやらのフォーマットは
多様なものに対応したいと思っています。言語はPHPです。

137 :デフォルトの名無しさん:2006/10/11(水) 18:37:03
迷惑スクレイパー

138 :デフォルトの名無しさん:2006/10/12(木) 02:14:12
行の2〜4桁目が3a1以外と3a3以外がある行を見つけるには
どのようにしたらいいでしょうか?

139 :デフォルトの名無しさん:2006/10/12(木) 05:14:06
grep -v '^.3a[13]'

140 :デフォルトの名無しさん:2006/10/12(木) 10:15:40
マッチさせたい文字
aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb

perlのマルチラインモードで「aaa.*?$^bbb」でいけると思ったのですがだめでした。
上記の条件にあう正規表現を教えてください。

141 :デフォルトの名無しさん:2006/10/12(木) 15:38:35
(?<=yyy)bbb

142 :デフォルトの名無しさん:2006/10/12(木) 20:11:01
>>141
すいません。
yyybbbにもマッチさせないです。
というか、正規表現のマルチラインで
改行を、$^で指定できないのでしょうか?

143 :デフォルトの名無しさん:2006/10/12(木) 20:28:19
改行文字書いちゃえば?
/aaa.*¥nbbb/;


144 :デフォルトの名無しさん:2006/10/13(金) 03:19:28
一度"\n"でjoinして
/aaa([^\n])\nbbb/
でいいんじゃないか?

145 :近藤雅彦:2006/10/13(金) 11:18:33
マッチさせたい文字
aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb

無理
bbbはどうすんのさ

146 :近藤雅彦:2006/10/13(金) 11:19:29
なんだ改行ありかよ
否定先読みでも使っとけ

147 :デフォルトの名無しさん:2006/10/13(金) 11:36:46
何を前提にしているのかよくわからんが、perlのmは、

^が改行の直後にもマッチ
$が改行の直前にもマッチ

するようになるだけ。したがって$^で改行それ自体を指定する
ということにはならない。

143のいうように普通に\nとして書け。


148 :デフォルトの名無しさん:2006/10/13(金) 13:28:10
if (aaa == bbb) {
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
}

xxxの中に、hogeが一切どこにも入らない if () { .... } を検索したいのですが、
perlの正規表現でできますか?

149 :近藤雅彦:2006/10/13(金) 17:01:47
>>148
否定先読み

150 :デフォルトの名無しさん:2006/10/13(金) 20:53:44
>>149
できない!
M/if[^}]*(?!hoge)}/m

151 :デフォルトの名無しさん:2006/10/13(金) 21:41:48
<b>(.+?)</b>

みたいな正規表現を見かけたのですが、

.+? ってどうして
.+ じゃいけないんですかね

152 :デフォルトの名無しさん:2006/10/13(金) 21:49:03
>>151
<b>...</b>...<b>...</b>
の外側の<b>〜</b>にマッチしてしまったりするから

153 :デフォルトの名無しさん:2006/10/14(土) 16:34:24
>>150
>>1
の内容を理解してない低脳だから

154 :デフォルトの名無しさん:2006/10/14(土) 20:48:54
学び始めたばっかいまいち解っていないのですが、2chのようにhttpが書かれたら
リンクをつけたいのですが、どうしても上手くいきません。
単に正規表現が間違ってるだけかと思われるのですが、
普通、httpにリンクをかける場合どのような正規表現をもちいればいいのでしょうか?
今、phpでpreg_match('/^http://+[a-zA-Z0-9\.\-\=\/\%\$\?\&\_]$'、$a)のような
変な書き方をしているですが、どうかよろしければ正しい方法を教えていただけないでしょうか?

155 :デフォルトの名無しさん:2006/10/14(土) 23:03:35
>>153
難しくてわからないんだよぉ〜。
どうしてもifから}間での間に文字が入らないの先読み否定がうまくできない・・・

156 : ◆TWARamEjuA :2006/10/15(日) 00:32:11 ?BRZ(6667)
https?://\S+
なんてどうかしら?

157 :デフォルトの名無しさん:2006/10/15(日) 02:33:45
>>156
www.hoge.comですよ
の ですよ もひっかからね?

158 :デフォルトの名無しさん:2006/10/15(日) 04:40:33
>154
googleで「URLの正規表現」を検索すれば

159 : ◆TWARamEjuA :2006/10/15(日) 09:24:22 ?BRZ(6667)
>>157
そういうのは引っかからないで欲しいですよね。
www.hoge.com/search.php?query=ですよ
こゆのは引っかかって欲しいですよね♪

URI(URL)の正規表現なんて、どこまでを通すか通さないのかのさじ加減が難しいのかと思うのですです。

160 :デフォルトの名無しさん:2006/10/15(日) 09:54:53
一般的に考えてURLの末尾には改行かスペースが入るだろう。
wikipediaへなんかのリンクだと日本語も使われるので、それは引っ掛けてほしいところ。

161 :デフォルトの名無しさん:2006/10/16(月) 13:53:14
http://72.14.203.104/
なんてね

162 :デフォルトの名無しさん:2006/10/18(水) 00:01:02
>>159
安易に
https?://[!-~]+[=\?&]?\S+
日本語の前に来る記号にどんな種類があるか知らないけど w

163 :デフォルトの名無しさん:2006/10/18(水) 20:04:42
if(/○○○/../□□□/)ってどういう意味?

164 :デフォルトの名無しさん:2006/10/18(水) 20:39:03
○○○が含まれるものから、□□□が含まれるものの間は真ってことじゃないのかな?

165 :デフォルトの名無しさん:2006/10/18(水) 23:11:32
オライリーの「正規表現」に
URLにマッチする正規表現が載ってなかったっけ?

166 :デフォルトの名無しさん:2006/10/18(水) 23:27:45
あるけどあんまり好きじゃないな、あのやり方・・・

167 :デフォルトの名無しさん:2006/10/19(木) 16:26:13
>163
http://d.hatena.ne.jp/palmo/20060724/rangeop

>165
http://www.din.or.jp/~ohzaki/regex.htm#URI

168 :デフォルトの名無しさん:2006/10/20(金) 18:30:29
asdf
asdfasdf
asdfasdfasdf

一行目の asdf だけに一致させたい場合
どうすればよいのでしょうか?

169 :デフォルトの名無しさん:2006/10/20(金) 18:50:51
^asdf$

170 :デフォルトの名無しさん:2006/10/20(金) 19:20:33
>>169
アリガd

171 :デフォルトの名無しさん:2006/10/24(火) 02:14:14
perlの正規表現で (a|b) と ([ab]) にパフォーマンスの差はありますか?
(a|b|c) と ([abc]) の場合はどうでしょう?

172 :デフォルトの名無しさん:2006/10/24(火) 09:35:56
>>171
文字クラスで十分なときは文字クラスの方が速いらしいが
気になるならベンチとって確認しろ。


173 :デフォルトの名無しさん:2006/10/25(水) 17:04:24
RUBYで、
str = ["<あ>-<#>-<い>--<#>-<1>-<2>-<#>-<x>-<y>"]

という形があるとして、
一番後ろの<#>から後ろ(<x>-<y>)を抜き出すにはどうすればいいですか?


174 :デフォルトの名無しさん:2006/10/25(水) 18:04:57
str[0].rindex(/<#>-/) && $'
str[0].scan(/<.>-<.>/)[-1]
str[0].scan(/<#>-([^#]+)\Z/)[0][0]

175 :173:2006/10/25(水) 18:56:51
>>174
参考になります。
ありがとうございます。

176 :デフォルトの名無しさん :2006/10/26(木) 02:20:08
正規表現と聞いて「性器表現」と連想してしまうのは俺だけ??

177 :デフォルトの名無しさん:2006/10/26(木) 05:32:25
うん

178 :デフォルトの名無しさん:2006/10/26(木) 06:14:22
>>176
心配すんな正常だ

179 :デフォルトの名無しさん :2006/10/26(木) 14:32:10
性器表現・・・どんな演算子があるんだろ。萌

180 :デフォルトの名無しさん:2006/10/26(木) 16:19:38
preg_match("/docomo\.ne\.jp$/",$host)

これでdocomo.ne.jpがひっかからないのですが
どうしてでしょうか?

181 :デフォルトの名無しさん:2006/10/26(木) 16:59:45
マルチウゼェ。

182 :180:2006/10/26(木) 17:01:35
申し訳御座いませんでした。

183 :デフォルトの名無しさん:2006/10/26(木) 17:50:38
>>179
*ってよく使うよ。


   ∧_ ∧
  (´∀` )
    (⊃⌒*⌒⊂)
     /__ノ''''ヽ__)

184 :デフォルトの名無しさん :2006/10/26(木) 23:50:28
>>179
まあ♂♀はあるだろうな。。。

185 :デフォルトの名無しさん:2006/10/27(金) 00:53:54
^[ちま]んこ$

186 :デフォルトの名無しさん:2006/10/30(月) 20:50:52
Perlの掲示板スクリプトでタグが入力されたとき、
<em><q>text</em></q>
のように要素が重なり合ったときにエラーを返すようにしたいんですが、
どうすればいいか教えていただけませんか?

187 : ◆TWARamEjuA :2006/10/30(月) 22:37:59 ?BRZ(6667)
>>186
かーなーりすれ違い♪
HTML-lintに通すと良いかも♪

188 :デフォルトの名無しさん:2006/10/31(火) 19:03:40
"o:\\Desktop\\test\\test1\\ttea\\tarachan.txt"

この形式からtarachan.txtの入っているフォルダ名を得るにはどう記述したら良いのでしょう。

189 :デフォルトの名無しさん:2006/10/31(火) 19:24:27
自己解決しました。
最良かどうかは解りませんが/(^\".*?\\.*?)[^\\]*?\"/で出来ました。

190 :デフォルトの名無しさん:2006/10/31(火) 19:27:55
連投すいません
/(^\".*?)[^\\]*?\"/
でも大丈夫なようですね。

191 :デフォルトの名無しさん:2006/10/31(火) 21:04:11
_splitpath使った方が早いような。

192 :デフォルトの名無しさん:2006/10/31(火) 21:35:23
>>186
念のため聞いておくが、そのような記述が必ずしもHTMLの仕様に逆らってはいないことを知っての上でそうしたいんだな?

193 :デフォルトの名無しさん:2006/11/01(水) 11:06:29
linuxのnmap見たいなツールで、windows用のGUIツールありますか?
テストサーバでオープンになっているポートを知りたいのですが。

194 :nobodyさん:2006/11/01(水) 18:28:29
このような正規表現 [a-zA-Z0-9.]+ で
アルファベットおよびアルファベット+数字で構成された語句を抜き出し
ているのですが、数字だけのものも抜き出してしまいます。
年度など、数字だけで構成されているものを除外するにはどうすればいい
でしょうか?
どうもうまくいかないもので。よろしくお願いします。

195 :デフォルトの名無しさん:2006/11/01(水) 18:32:52
>>194
その正規表現で動いたら奇跡だな。

[a-zA-Z][a-zA-Z0-9.]*

196 :194:2006/11/01(水) 18:49:30
>>195
動いてますよ。文字は全て全角なので。(ちょっとわけありで)
その上で、数字だけを除外するにはどうすれば良いのか、お聞きした
いのです。


197 :デフォルトの名無しさん:2006/11/01(水) 18:51:10
それだと数字から始まるものはマッチしなくね?
[a-zA-Z0-9.]*[a-zA-Z][a-zA-Z0-9.]*
こんなのかな

198 :194:2006/11/01(水) 19:04:08
>>197
それがマッチするんですよ。こんな感じに
Array ( [0] => 2005 [1] => IEEE1394 [2] => 24 [3] => Index
[4] => Java [5] => API [6] => JMF [7] => USB2.0 )
それで、困っておるわけです。

199 :デフォルトの名無しさん:2006/11/01(水) 19:17:50
>>198
>>196で答え出てるよ。

200 :199:2006/11/01(水) 19:18:44
>>195だった・・

201 :デフォルトの名無しさん:2006/11/01(水) 19:21:10
>>199
それの不十分さを>>197が補正してるんだな。

202 :194:2006/11/01(水) 19:25:35
>>200
195,197の正規表現は試してみましたが、動きませんでした。
PHPのなかで使ってるからだろうか・・?

203 :デフォルトの名無しさん:2006/11/01(水) 19:30:22
>>195
お前ら.のエスケープ忘れてる。

204 :194:2006/11/01(水) 19:33:43
>>197
ご無礼をいたしました。普通に動きました。ありがとうございます。

205 :194:2006/11/01(水) 19:42:14
あと、後学のために、[a-zA-Z]と[a-zA-Z0-9.]がくっついた状態は
どんな意味があるのか、教えていただけるとありがたいのですが

206 :デフォルトの名無しさん:2006/11/01(水) 19:44:05
>>205
aa -> aaにマッチ

と同じ

207 :デフォルトの名無しさん:2006/11/02(木) 02:29:58
>>203

[] の中なんだから、エスケープの必要はないっしょ。
世の中には記号類と見ればやたらエスケープしたがる人がいるのはよく見るが。


208 :デフォルトの名無しさん:2006/11/03(金) 00:54:08
文字列から括弧内(とその括弧)を消去する方法で悩んでいます。

$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
echo preg_replace(pattern, "", $string);

この例で「bar1 bar3」の出力を期待しますが

/\(.+\)/ なら当然何も残りません。非欲張りの /\(.+?\)/ では入れ子の
部分でおかしくなって「bar1 )bar3 bar4)」となります。
どうかお知恵をお貸しください。

209 :デフォルトの名無しさん:2006/11/03(金) 00:57:09
http://capslockabcjp.kitunebi.com/faq.html#htmltag
http://capslockabcjp.kitunebi.com/handmade.html

210 :デフォルトの名無しさん:2006/11/03(金) 09:14:04
$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
while ($string =~ s/\([^(]*?\)//g) {}
print $string;

211 :208:2006/11/04(土) 12:36:54
レスありがとうございます。
ややこしそうなんで不等号に置換してstrip_tagsします。

212 :デフォルトの名無しさん:2006/11/05(日) 16:58:33
スレを全く読まずに質問

PerlでURLの書式として正しいか、URLとして使用できない文字が含まれていないかをチェックする正規表現教えて
日本語ドメインには対応しなくていいから

213 :デフォルトの名無しさん:2006/11/05(日) 17:10:01
>>212
>>1のリンク先くらい嫁

214 :デフォルトの名無しさん:2006/11/09(木) 09:17:27
正規表現の事が全くわからないので教えてほしいのですが
2ちゃんねるのBEの表記を正規表現で表すとどうなるのでしょうか?

215 :デフォルトの名無しさん:2006/11/11(土) 12:30:37
>214
>1のリンク先くらい嫁

216 :デフォルトの名無しさん:2006/11/11(土) 15:21:58
質問ですが、perlでまちBBSのスレをdat化させたいと思って正規表現でやろうとしたんですが出来ません。
htmltodatに入ってる『m/<dt>([0-9]+).+?(?:"mailto:(.+?)">)?<b> (.*?) </b>.*?投稿日: (.*?)<br><dd> ?(.*)<br><br>/mi』じゃダメなんですか?

217 :デフォルトの名無しさん:2006/11/11(土) 16:12:17
>>216
まちBBSの書式なんか知らん。
befor-afterのサンプルぐらい出せ。

218 :デフォルトの名無しさん:2006/11/12(日) 06:51:19
まちBBSに書き込みしたらIPと住んでる地域バレるじゃん

219 :デフォルトの名無しさん:2006/11/12(日) 07:05:05
東京23区板は出ないよ

220 :216:2006/11/12(日) 09:30:35
befor
『<dt>149 名前:<a href="mailto:sage"><b> 東京都名無区 </B></a> 投稿日: 2006/11/08(水) 10:26:08 ID:4jNjzvOE<br><dd> 白山ラーメンは営業時間がちょっとね。 <br><br>
<dt>150 名前:<font color="#008800"><b> 東京都名無区 </b></font> 投稿日: 2006/11/08(水) 19:20:35 ID:xKWAFsLU<br><dd> じゃあ素材は中国産か・・。 <br><br>』

after
『東京都名無区<>sage<>2006/11/08(水) 10:26:08 ID:4jNjzvOE<>白山ラーメンは営業時間がちょっとね。 <>
東京都名無区<><>2006/11/08(水) 19:20:35 ID:xKWAFsLU<>じゃあ素材は中国産か・・。 <>』
こういう感じにしたいんです。


221 :デフォルトの名無しさん:2006/11/14(火) 16:18:04
同じ文字が3個以上続いている行を表示するにはどうしたらいいですか?

222 :デフォルトの名無しさん:2006/11/14(火) 19:34:53
>>221
grepでピリオドとbackreferenceを使ってちょ。

223 :デフォルトの名無しさん:2006/11/14(火) 19:41:56
/(.)\1\1/

224 :デフォルトの名無しさん:2006/11/15(水) 00:09:45
regular expressionを「正規表現」って訳した奴は氏ね!
どう考えても「規則表現」あたりだろーが。
それに「せいきひょうげん」とか口に出して言うのって
なんか恥ずかしいじゃねーか。

225 :デフォルトの名無しさん:2006/11/15(水) 01:32:30
>>224 どう考えても

考えないで「勉強」してよ。

226 :デフォルトの名無しさん:2006/11/15(水) 22:52:02
共立のエイホウルマン本では「正則表現」と訳されてますがな。

227 :デフォルトの名無しさん:2006/11/15(水) 23:03:25
性器表現((゚)) Ψ

228 :デフォルトの名無しさん:2006/11/16(木) 00:00:14
MacやMACやMaC OSXやmac osXにはヒットしても
macafeeやMacAfeeにはヒットしない正規表現はどう書けばよいのでしょうか。

229 :デフォルトの名無しさん:2006/11/16(木) 00:07:56
/\bmac\b/i

230 :デフォルトの名無しさん:2006/11/16(木) 00:22:07
>>216
とりあえず面白そうなので
http://jbbs.livedoor.jp/bbs/read.cgi/computer/1929/1038588508/
で聞いてみてはどうです?

231 :デフォルトの名無しさん:2006/11/17(金) 16:59:43
>>224
賛同++

232 :デフォルトの名無しさん:2006/11/20(月) 04:23:05
正規表現で置換しまくりんぐフヒヒ

233 :デフォルトの名無しさん:2006/11/20(月) 07:49:26
重くなりそう

234 :デフォルトの名無しさん:2006/11/21(火) 13:00:04
すいません。ちょっと探しても見つからなかったのですが、
[AaAa][IiIi][UuUu]
という正規表現を分解して、マッチする文字列を出してくれるツール、
もしくはC#あたりでそういった方法などは無いでしょうか?

235 :デフォルトの名無しさん:2006/11/21(火) 13:17:55
>>234
*とかあったらどうすんのさ。

本当に正規表現関連の質問なのか?
組み合わせ論の話なんじゃ?

236 :デフォルトの名無しさん:2006/11/21(火) 13:33:47
>>235
*とかはありません。
[Aa]のパターンだけなんですが、如何せん量が多くて
自分で分解して1つ1つ書いていくのは不可能なのです。
何か良い方法は無いか探してるんですが・・・

237 :デフォルトの名無しさん:2006/11/21(火) 13:42:42
正規表現のままでいけない理由は?

238 :デフォルトの名無しさん:2006/11/21(火) 13:58:54
あったけどサイトごと消失

239 :デフォルトの名無しさん:2006/11/21(火) 15:10:31
4進数3桁

240 :234:2006/11/21(火) 17:06:08
>>237
リストを渡す相手が正規表現を知らず、全部並べて書いてくれと言われまして……

241 :デフォルトの名無しさん:2006/11/21(火) 17:07:25 ?2BP(0)
ワロスw

242 :デフォルトの名無しさん:2006/11/21(火) 17:08:07
正規表現を教えた方が早そうだな

243 :デフォルトの名無しさん:2006/11/21(火) 19:22:57
ご愁傷様としか言いようがない。

244 :234:2006/11/21(火) 19:42:25
人生オワタ\(^o^)/

245 :デフォルトの名無しさん:2006/11/21(火) 20:38:55
数式の展開と同様だよね。

Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp Kyoto Common Lisp GCL 2.6.5 (aka GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) expand((a1+a2+a3+a4)*(i1+i2+i3+i4)*(u1+u2+u3+u4));
(%o1) A4 i4 u4 + A3 i4 u4 + A2 i4 u4 + A1 i4 u4 + A4 i3 u4 + A3 i3 u4
+ A2 i3 u4 + A1 i3 u4 + A4 i2 u4 + A3 i2 u4 + A2 i2 u4 + A1 i2 u4 + A4 I1 u4
+ A3 I1 u4 + A2 I1 u4 + A1 I1 u4 + A4 i4 u3 + A3 i4 u3 + A2 i4 u3 + A1 i4 u3
+ A4 i3 u3 + A3 i3 u3 + A2 i3 u3 + A1 i3 u3 + A4 i2 u3 + A3 i2 u3 + A2 i2 u3
+ A1 i2 u3 + A4 I1 u3 + A3 I1 u3 + A2 I1 u3 + A1 I1 u3 + A4 i4 u2 + A3 i4 u2
+ A2 i4 u2 + A1 i4 u2 + A4 i3 u2 + A3 i3 u2 + A2 i3 u2 + A1 i3 u2 + A4 i2 u2
+ A3 i2 u2 + A2 i2 u2 + A1 i2 u2 + A4 I1 u2 + A3 I1 u2 + A2 I1 u2 + A1 I1 u2
+ A4 i4 u1 + A3 i4 u1 + A2 i4 u1 + A1 i4 u1 + A4 i3 u1 + A3 i3 u1 + A2 i3 u1
+ A1 i3 u1 + A4 i2 u1 + A3 i2 u1 + A2 i2 u1 + A1 i2 u1 + A4 I1 u1 + A3 I1 u1
+ A2 I1 u1 + A1 I1 u1
(%i2)

246 :デフォルトの名無しさん:2006/11/21(火) 21:02:47
文字化けしたらすまん。

aa1="A a $(B#A(B $(B#a(B";aa2="I i $(B#I(B $(B#i(B";aa3="U u $(B#U(B $(B#u(B"; for bb1 in $aa1; do for bb2 in $aa2; do for bb3 in $aa3; do echo $bb1$bb2$bb3; done; done; done

247 :デフォルトの名無しさん:2006/11/21(火) 22:37:02
どうでもいいけど、絨毯爆撃テストに頼ってるだけじゃ条件漏れでそのうち嵌るよ。

248 :デフォルトの名無しさん:2006/11/21(火) 22:57:56
>>234
文字の範囲が決まってる(アルファベットだけとか)なら、
全組み合わせのテキストファイル生成して、
エディタで引っ掛けるなりgrepするなりするってのはどう?

249 :デフォルトの名無しさん:2006/11/21(火) 22:59:14
>>248
だからその
>全組み合わせのテキストファイル生成
してくれるツールは無いかって聞いてるんじゃん。

250 :デフォルトの名無しさん:2006/11/21(火) 22:59:39
って、正規表現わからないから、って言われてるのか。

ならやるべきことはリストで出すことじゃなくて、
今の正規表現を図か何かにわかりやすく起こして
説明してわかってもらうことじゃないの?

251 :デフォルトの名無しさん:2006/11/21(火) 23:00:51
>>249
ああ、いや、例えばアルファベット小文字10文字って決まってたら
aaaaaaaaaaからzzzzzzzzzzまで全部テキストファイルに書いて
引っ掛ける、ってな意味。限定されてないと無理だけど。

252 :デフォルトの名無しさん:2006/11/21(火) 23:03:13
>>251
だからその全パターンを正規表現からおこして列挙してくれるツ(ry

253 :デフォルトの名無しさん:2006/11/21(火) 23:08:49
vbs だけど... コマンドプロンプトから cscript xxx.vbs ってやってちょ

--- xxx.vbs
Option Explicit
Dim X
X = "[AaAa][IiIi][UuUu]"
With New RegExp
 .Global = True
 .Pattern = "\[([^\]]*)\]"
 Dim Matches
 Set Matches = .Execute(X)
 Call Foo(Matches, 0, "")
End With

Private Sub Foo(Matches, Level, String)
 If Level < Matches.Count Then
  Dim S
  S = Matches.Item(Level).SubMatches(0)
  Dim I
  For I = 1 To Len(S)
   Call Foo(Matches, Level + 1, String + Mid(S, I, 1))
  Next
 Else
  WScript.StdOut.WriteLine String
 End If
End Sub

254 :デフォルトの名無しさん:2006/11/21(火) 23:37:06
そんなにニーズあるのなら年末にでも開発するけど
ダウンロード一桁とかじゃないだろうな(w

255 :デフォルトの名無しさん:2006/11/22(水) 01:45:28
254氏キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

256 :デフォルトの名無しさん:2006/11/22(水) 13:32:00
頑張ってつくったところで
サイズがでかすぎるテキストファイルになって
重くて相手にされない予感

257 :デフォルトの名無しさん:2006/11/22(水) 15:46:11
[^a]
とか入って来たら死にそうな感じがするが

258 :デフォルトの名無しさん:2006/11/22(水) 17:03:54
死なない。そういうのをちゃんと扱えて
事前に計算量を予測できる、
UTF-8でも大丈夫なアルゴリズムがあるの。

259 :デフォルトの名無しさん:2006/11/22(水) 17:25:31
[01]を100個ぐらい並べただけで相当な数になるわけだが。


260 :デフォルトの名無しさん:2006/11/22(水) 17:40:36
なるけどそれを予測できればいいわけ。
1000超えたら中止とか設定するの。

261 :デフォルトの名無しさん:2006/11/22(水) 20:00:10
>>260
それ、何かの解決策になってる?

262 :デフォルトの名無しさん:2006/11/22(水) 20:38:16
>>260
目的を果たしてないぞw

263 :デフォルトの名無しさん:2006/11/22(水) 22:50:13
それなんて注文の多い料理店。
組み合わせだすなんて不毛なことより
どっちかというと視覚化のほうをやりたい。

264 :デフォルトの名無しさん:2006/11/23(木) 18:38:56
正規表現で結婚相手を見つけるにはどうしたらいいですか?

265 :デフォルトの名無しさん:2006/11/23(木) 20:56:43
*女

266 :デフォルトの名無しさん:2006/11/23(木) 21:50:36
性器表現するにはどうしたらいいですか?

267 :デフォルトの名無しさん:2006/11/23(木) 22:12:11
お?(ちん(ちん|ぽこ?|こ)|(まん|め)こ)




268 :デフォルトの名無しさん:2006/11/23(木) 22:29:56
ぼぼが表現されんようだが

269 :デフォルトの名無しさん:2006/11/23(木) 22:58:24
申し訳ありませんが、方言につきましては別途料金が発生いたします。
よろしいでしょうか?

270 :デフォルトの名無しさん:2006/11/24(金) 02:46:08
OK キャンセル いいから一発やらせろよ

271 :デフォルトの名無しさん:2006/11/24(金) 17:20:28
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< 問題:「同じ数の繰り返しがない数字列すべて」を示す正規表現は?

  (    )  \_____
  | | |
  (__)_)


272 :デフォルトの名無しさん:2006/11/24(金) 17:32:26
そうやって知りたいだけじゃねーか。
ちったぁ自分で考えろや

273 :デフォルトの名無しさん:2006/11/24(金) 19:46:16
同じ数の繰り返しがないって意味わかんない

274 :デフォルトの名無しさん:2006/11/24(金) 19:54:56
grep -v "\(.\)\1"

?

275 :デフォルトの名無しさん:2006/11/24(金) 21:51:15
>>271, >>273
おれは、「すべて」の意味もわかんない

276 :デフォルトの名無しさん:2006/11/25(土) 10:42:10
>>271
>>1

277 :デフォルトの名無しさん:2006/11/25(土) 16:00:53
>>273
同じ数字が隣にこない、と言えばいいだろうか
113はダメ、131はおk

>>275
全部です。数字一個の列も数字百個の列も表現できろってことです。

俺のまわりの連中は馬鹿だから誰もわかりません
勿論俺もわかりません


278 :デフォルトの名無しさん:2006/11/25(土) 16:26:36
(\d)(?!\1)

279 :デフォルトの名無しさん:2006/11/25(土) 16:28:08
ああ、列ってのは連なりってことなのかな。
だとしたらこうか。
((\d)(?!\1))+

280 :デフォルトの名無しさん:2006/11/25(土) 16:32:01
違うわ。こうか。

((\d)(?!\2)){2,}

281 :デフォルトの名無しさん:2006/11/25(土) 20:16:00
>>278
>>280

全然ダメ

>>277
987654321
1
98
988
678678

これはどれがマッチするとか例をかいたら?


282 :デフォルトの名無しさん:2006/11/25(土) 20:26:05
ダメって言うなら正規表現書いてみろ

283 :デフォルトの名無しさん:2006/11/25(土) 21:18:32
これだけ偉そうなんだから、きっとずばっと正解書いてくれるよ

284 :デフォルトの名無しさん:2006/11/25(土) 21:47:19
オライリーの本を読めば正解が分かる
ヒントは
?!

285 :デフォルトの名無しさん:2006/11/25(土) 22:35:06
VBS だが
-----
Option Explicit
Dim X, R
For Each X In Array("1", "113", "131", "987654321", "1", "98", "988", "678678")
  With New RegExp
    .Pattern = "^(?:(\d)(?!\1))*$"
    If .Test(X) Then R = "Match" Else R = "Not Match" End If
    WScript.StdOut.WriteLine X & ": " & R
  End With
Next
-----
1: Match
113: Not Match
131: Match
987654321: Match
1: Match
98: Match
988: Not Match
678678: Match

286 :デフォルトの名無しさん:2006/11/26(日) 05:29:10
>>281
○987654321
○1
○98
×988
○678678

この正規表現を連接・選択・スターだけで書けって言うんだ…
無茶しやがって

287 :デフォルトの名無しさん:2006/11/26(日) 12:05:37
ヒント
同じ数字が連続するのは10種類しかない

288 :デフォルトの名無しさん:2006/11/26(日) 12:52:58
123123もダメな事になりました

289 :デフォルトの名無しさん:2006/11/26(日) 13:43:10
>>286
オライリーの本を読めば正解が分かるな
ヒントは否定先読み

>>1
のリンク先を全て読んでもいいけどな

290 :デフォルトの名無しさん:2006/11/26(日) 14:50:35
ちょっと流れからはずれるんだが、疑問に思ったこと
Perl5など最近の言語処理系がサポートしているいわゆる正規表現が既に
本来の意味での正規表現ではなくなっているというのは有名な話だけど
じゃあ、そのいわゆる正規表現が表現できる言語のクラスってどんなの
なんだろう?色んなところの例を見た限りでは、少なくとも文脈自由言語の
一部を表現できるようだけど

291 :デフォルトの名無しさん:2006/11/26(日) 17:25:55
文脈自由文法は表現できるよ。
だから自然言語処理で、正規表現がよく使われたりする。


292 :デフォルトの名無しさん:2006/11/26(日) 20:03:21
>>291
つまり、「任意の」文脈自由文法をPerl5などで拡張された「いわゆる」正規表現
で表現できるってこと?もしそうだったら、どっかにそれを証明した論文がある
はずなんだけど論文へのポインタか何か知ってたら教えて

293 :デフォルトの名無しさん:2006/12/06(水) 00:55:21
[00:00.00]
[00:08.05]
[00:20.32]
こんなのを
[00:00]
[00:08]
[00:20]
に書き換える正規表現教えてください

294 :デフォルトの名無しさん:2006/12/06(水) 01:28:44
書き換える作業は各自でお願いします。

295 :デフォルトの名無しさん:2006/12/06(水) 03:42:17
s/\(\[.....\)...]/\1]/
s/\(\[[0-9][0-9]:[0-9][0-9]\)\.[0-9][0-9]]/\1]/

296 :293:2006/12/06(水) 17:36:11
>>295
ありがとうございました

297 :デフォルトの名無しさん:2006/12/07(木) 00:53:22
aaabbbccc と bbb を取りたい
括弧の中に括弧っていいんですか?

/(aaa(bbb)ccc)/



298 :デフォルトの名無しさん:2006/12/07(木) 01:26:39
かっこわるいー

299 :デフォルトの名無しさん:2006/12/07(木) 03:42:49
(e)

300 :デフォルトの名無しさん:2006/12/07(木) 03:50:18
>>291
balanced parenthesesは拡張された正規表現でどう書くの?

301 :デフォルトの名無しさん:2006/12/07(木) 09:11:27
>>300
perlの正規表現のマニュアルの (??{ code }) のところにそのものずばりの例がある。

$re = qr{
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
}x;

ttp://perldoc.perl.org/perlre.html

302 :デフォルトの名無しさん:2006/12/07(木) 17:51:10
>>301
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
は(??{ code })でコードが埋め込まれることで言語依存になってしまうが
拡張された正規表現ではある。しかしその外側は正規表現ではないのでは?
単なるperlの文に見えるのだが。

303 :デフォルトの名無しさん:2006/12/08(金) 01:36:15
>>300

こーゆーのもある(,NETね)

Regex re = new Regex(@"^
  (?>
      \( (?<LEVEL>)   # On opening paren push level
    |    
      \) (?<-LEVEL>)  # On closing paren pop level
    |
      (?! \( | \) ) . # Match any char except ( or ) 
  )+
  (?(LEVEL)(?!))      # If level exists then fail
  $", RegexOptions.IgnorePatternWhitespace);


304 :デフォルトの名無しさん:2006/12/08(金) 19:50:29
HTMLを取得してタグをすべて除去するperlスクリプトを書いているんですが、
javascriptだけは残ってしまいます。
正規表現でjavascriptを消去するやり方はないんでしょうか?
色々試してもさっぱりダメ……

305 :デフォルトの名無しさん:2006/12/08(金) 20:46:44
scriptの開始タグ〜終了タグを除去すればいい


306 :デフォルトの名無しさん:2006/12/09(土) 03:54:02
HTMLタグ除去って perldoc 見れば一発だし
行儀よく <!-- hoge --> に囲まれてれば
JavaScript だって一緒に消されるっしょ?

うまいことコメントアウトされてないようなら
先に script 回りだけ同じようにばっさり切ればいいし

307 :デフォルトの名無しさん:2006/12/09(土) 16:17:09
もうだめなんだよ

308 :デフォルトの名無しさん:2006/12/10(日) 11:42:44
>>305
まあ、君の言うことは正しいんだけど、その「終了タグ」を
見つけるのが大変と言うことだ。

文字列やコメント中に </script> とか書いてるのをきちんと
はじくのはちょっと骨が折れる。

309 :デフォルトの名無しさん:2006/12/10(日) 19:35:00
Fx1.5からはE4Xがあるから、粉砕骨折するだろうね。

310 :デフォルトの名無しさん:2006/12/10(日) 19:51:58
亀裂骨折はこの間したけどな
いてえよ

311 :デフォルトの名無しさん:2006/12/14(木) 13:00:06
>>306
それ Unicode で
http://openmya.hacker.jp/hasegawa/public/20061209/momiji.html

xss考慮するとけっこう対応は大変だぞ

312 :デフォルトの名無しさん:2006/12/15(金) 13:57:42
HTMLのタグ除去に似ているのですが今HTMLタグ以外の部分を(.*?)に置き換える正規表現をjavaで考えています.
判りにくいと思いますので例を言うと
<font><a href="(.*?)" target="_blank">Recycled Niceguys</a></font color="red">
<font><a href="(.*?)" target="_blank">(.*?)</a></font color="red">
こんな感じに変換にしたいのです.
今自分で考えたのは
((?:<.*?>)*)(?:.*?)((?:<.*?>)*)
group(1) + "(.*?)" + group(2)
こうなのですがうまく変換できません.
何処が間違っているのでしょうか?
ご教授お願いします.

313 :デフォルトの名無しさん:2006/12/15(金) 17:49:10
タグの定義が分からない
value = ">"
を考慮するかとか書いてないし
よって回答不能

314 :デフォルトの名無しさん:2006/12/15(金) 22:18:33
終了タグに属性書くのはかなりレベル高いボケだなw

315 :デフォルトの名無しさん:2006/12/15(金) 22:24:29
<input name=dir value=">">


316 :デフォルトの名無しさん:2006/12/16(土) 02:22:56
PHPです
URLの test.php?a=123&b=456 から a が欲しいので
/a\=(.+?)\&/
としていたのですが、test.php?a=123 だけで終わる場合があることが分かったのですが、
&または行末としたいのですが、
/a\=(.+?)[\&$]/
では行末の場合ヒットしてくれません
ご教授願えないでしょうか?

317 :デフォルトの名無しさん:2006/12/16(土) 02:33:12
/a\=(.+?)(\&)?/
じゃ駄目なの?

318 :デフォルトの名無しさん:2006/12/16(土) 13:31:22
>>316
/a=([^&]+)/

319 :デフォルトの名無しさん:2006/12/16(土) 13:37:32
>>316
PHPなら
$_GET["a"]
じゃあかんの?

320 :デフォルトの名無しさん:2006/12/18(月) 06:21:34
>>316は恥で狂い死んだらしい

321 :デフォルトの名無しさん:2006/12/20(水) 06:06:00
test

322 :デフォルトの名無しさん:2006/12/25(月) 19:36:44
どなたかご指導お願いします。
Flashで読み込む用に、
kuji=***(ランダムで変わる大吉から凶まで)
という文字列だけを出力するkuji.phpを作りました。

さらに、この***の部分だけをmain.phpに読み込んで
ランダムで変わる部分だけを表示したいのですが、
include('kuji.php');
で読み込んだあと、「kuji=」の部分を削って***だけ表示するには
どのようにすれば良いのでしょうか?PHPのバージョンは4.0.6です。

323 :デフォルトの名無しさん:2006/12/25(月) 20:08:17
それは正規表現使わない方が良いと思うんです。

324 :デフォルトの名無しさん:2006/12/25(月) 22:14:59
正規表現でand検索ってどうやるんだっけ?

「ジョージアのコーヒー」
「コーヒーはジョージア」


「コーヒー」「ジョージア」
だけを使って2文にマッチさせたい。

ジョージア.*コーヒー
だと1文目はヒットするが、2文目はヒットしない。


325 : ◆TWARamEjuA :2006/12/25(月) 22:53:31 ?BRZ(6677)
m#(コーヒー)|(ジョージア)#
ではなくって?釣り?

326 : ◆TWARamEjuA :2006/12/25(月) 22:55:12 ?BRZ(6677)
あらやだ(照)∧||∧

327 :デフォルトの名無しさん:2006/12/25(月) 23:26:43
んーどちらか一方ではなくて、2つの条件を満たしてマッチさせたいわけです。

たとえば
「ジョージアのコーヒー美味しいね。」
「ジョージアよりポッカの方が良い。」
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。

検索条件のand検索の様な事はできるのかなと思って質問しました。




328 :デフォルトの名無しさん:2006/12/25(月) 23:29:12
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。

という場合もあった場合に、一文目だけをマッチさせて、二文目を省きたいのです。


329 :デフォルトの名無しさん:2006/12/26(火) 00:12:35
>>327
基本的には組み合わせの数だけorでつなぐ正規表現になると思う
例えばこんな感じで

(ジョージア.*コーヒー|コーヒー.*ジョージア)

330 :デフォルトの名無しさん:2006/12/26(火) 01:21:40
そうですか・・・。
正規表現でスマートに実装できるかなと思ったのですが。
単語が3個4個と増えてくると結構コードが汚くなってきますよね。
とりあえず今は仕様ということで諦めるしかない様ですね。


331 :デフォルトの名無しさん:2006/12/26(火) 02:04:09
名前つきキャプチャとかで、「どれがマッチしたか」が分かる言語なら
325みたくorでマッチさせておいて、その後に「全部マッチしたやつ」を
探せばいいのでは

332 :デフォルトの名無しさん:2006/12/27(水) 02:13:25
(?=.*ジョージア)(?=.*コーヒー).*

333 :デフォルトの名無しさん:2006/12/27(水) 13:37:26
すみません教えて下さい
----
ABCD
こんにちは
こんばんわ
さようなら
EFGH
----
上のABCDとEFGHに挟まれる複数行の文字列を
取得するには、どのような記述にしたら
良いでしょうか?

334 :デフォルトの名無しさん:2006/12/27(水) 15:22:06
http://pc7.2ch.net/test/read.cgi/software/1163847543/155
http://pc8.2ch.net/test/read.cgi/tech/1156413899/333

335 :デフォルトの名無しさん:2006/12/27(水) 16:56:49
>>327
>>1
のリンク先嫁

336 :デフォルトの名無しさん:2006/12/28(木) 12:05:35
SQLの
...where ID like 'EE%' and ID <> 'EEXX'
という条件を正規表現でやろうと思います。

エディタの正規表現検索で確認した感じだと「^(?!EEXX)EE.*$」でいけそうなんですけど、
大丈夫でしょうか?


337 :デフォルトの名無しさん:2006/12/28(木) 15:36:43
>>332
これでいいんだ...。orz

どうも肯定先読みの説明ってどこ見ても意味がとりにくい。

どっかにすっきりした解説がないもんだろうか。

338 :デフォルトの名無しさん:2006/12/28(木) 23:20:02
こんばんは。
掲示板の本文欄の書き込みでの質問です。

<a href=http://www.example.com>ホゲ</a> または
<a href="http://www.example.com">ホゲ</a> から、正規表現を使って、

ホゲ の文字をリンク状態にしてページに表示させたいのですが、
どのようにしたら良いのでしょうか?
お願いします。教えてください。


339 :デフォルトの名無しさん:2006/12/28(木) 23:40:12
意味不明。
><a href=http://www.example.com>ホゲ</a>
この時点で既にリンクされてるじゃん。

340 :デフォルトの名無しさん:2006/12/28(木) 23:49:07
>>339
”ホ”の前に”>”を入れたいんじゃないのかな?

341 :デフォルトの名無しさん:2006/12/29(金) 00:22:46
>>340
それもまた意味不明

342 :デフォルトの名無しさん:2006/12/29(金) 01:46:58
理由は不明ですが、解決しました。ありがとうございました。

343 :デフォルトの名無しさん:2006/12/29(金) 04:03:33
これは裏政府の暗号に違いないっ!

344 :デフォルトの名無しさん:2006/12/29(金) 22:16:14
秀丸の正規表現なんですが
hogehoge::と書いた時に「::」より前だけヒットさせる正規表現は.*(?=::)と
書いてうまくいっていますが、↑と別に
hogehoge:だけヒットさせるには何と書けばいいのでしょうか?
一応.*(?=:{1})で試したらhogehoge::にも引っかかってしまいますた


345 :デフォルトの名無しさん:2006/12/29(金) 23:58:55
>>344
hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
hogehoge(?=:[^:])
でどう?



346 :デフォルトの名無しさん:2006/12/30(土) 00:00:51
>>337
そんなにわかりづらいか?
マッチを試みてその結果はあとに影響するけど、注目位置は変えないって
ことだけだと思うんだけど。


347 :デフォルトの名無しさん:2006/12/30(土) 10:26:26
>>345
ありがとう!
> hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
そうなんです。ですがhogehoge(?=:[^:])だとhogehoge:にも引っかかりませんでした…
あと試したのが↓で、hogehoge::とhogehoge:両方に引っかかってしまいました
.*(?=:(?!:))
難しい・・・他にイイ案はありますでしょうか?

348 :345:2006/12/30(土) 13:53:19
>>347

条件見てC++のソースでも食わせると思ったのだけど違うのかな?
345の条件だと、hogehoge: の':' で行が終わるとマッチしないよ。
hogehoge(?=:(?:[^:]*$))
でどうだろう。

> .*(?=:(?!:))
これだと.*が一個目の:を飲み込んじゃうのを許しちゃうよ。
hogehogeに固定の文字列じゃなくて何らかの正規表現を置きたいなら、
hogehoge部分にコロンがこないという前提を置いていいなら、
[^:]*(?=:(?:[^:]*$))
かな。

いずれにしろ今回だめだというなら条件をもう少し詳しく提示してね。


349 :デフォルトの名無しさん:2006/12/30(土) 15:28:21
どうも有難うございます!
2つとも 「正規表現での'|'の前後の文字が無いかまたは + * ? の直前に文字がありません」
というエラーが出て登録できませんでした

プログラミングから縁遠い者がAutohotkeyのスクリプトを書いております
エディタは秀丸を使っているのでスクリプトを所々強調表示したいなーと思い
Hotkey::(コロン2つ)とLabel:(コロン1つ)を別々にヒットさせたいんです

350 :345:2006/12/30(土) 16:04:51
>>349
Autohotkeyも秀丸も使ってないので試せないのだけど(秀丸は昔は使っていた)、
Perlではちゃんとうごいってるっぽいんだけどねえ。
でもちょっと勘違いして変な記述をしていたので直してみた

[^:]+(?=:[^:]*$)

あとエラーメッセージは秀丸の?
あとでインスコして試してみるけど、打ち間違いってことはない?
期待しないところでマッチするのはあってもエラーはないと思うんだけどなあ



351 :デフォルトの名無しさん:2006/12/30(土) 16:10:22
>>346
「その結果はあとに影響する」と言うのがいまいちピンとこない。

でも今まで見た中では一番よくわかる解説だと思う。

[よくない例]

perlreref:

(?=...) ゼロ幅の肯定先読み表明

Microsoft VBScript の RegExp の説明:

肯定先読みを実行する部分式です。
pattern に一致する文字列が始まる位置にある検索文字列と一致します。
一致した文字列は記憶されず、後で使用することはできません。
たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows"
には一致しますが、"Windows 3.1" の "Windows" には一致しません。
先読み処理では、読み進まれた文字は処理済みとは見なされません。
一致の検出後、次の検索処理は先読みされた文字列の後からではなく、
一致文字列のすぐ後から開始されます。

こんな説明にみんなちゃんと理解できてるの?

352 :デフォルトの名無しさん:2006/12/30(土) 16:23:11
>>350
それでできました!ありがとうござます!

>あとエラーメッセージは秀丸の?
そうです。コピペでやってるんですが>>348だと登録時にエラー出ました
>>350で完璧です!今から意味を理解してみますw

353 :デフォルトの名無しさん:2006/12/30(土) 16:28:56
マッチするかどうかの判定には使われるけど、その部分はマッチしない。

354 :346:2006/12/30(土) 16:57:46
>>351
んーとね、「結果があとに影響する」というのは
(?=foo).*
マッチを試みるやり方は先読みでないときと同じでマッチに成功したか失敗したかで
その先に進むかどうかが決まる。マッチした部分は保存しないし、注目位置は変化しない
というつもりだったんだけど。

>こんな説明にみんなちゃんと理解できてるの?

説明で理解したってかどちらかというと実際に使ってみてどういう動きをするかで
覚えた感じかなあ。
最初のPerlで実装されたときから使ってるから、ほかの言語での説明はあまり気にしなかったよ。


355 :345:2006/12/30(土) 17:01:27
>>352
秀丸で348のパターンがエラーになるのは確認した。
なんでこんなメッセージになるのかよくわからんがw



356 :デフォルトの名無しさん:2006/12/30(土) 17:49:48
>>355
重ね重ねすみません!

あちこちヒットしてしまうようになったのでw
Label:(行末)
だけにヒットするにはどうしたらいいんでしょう・・
秀丸ヘルプを引きながら理解しようとしてますが
[^:]+(?=:[^:]*$)←自分がいじるとことごとく失敗します

357 :デフォルトの名無しさん:2006/12/30(土) 18:33:10
Label:$

358 :デフォルトの名無しさん:2006/12/30(土) 19:33:21
…_| ̄|○

一応試したのがこれですw
[^:]+(?=:[^:]*{0}$)

359 :デフォルトの名無しさん:2006/12/30(土) 22:46:29
>>344
よくばりマッチとかでぐぐれ

360 :345:2006/12/30(土) 23:58:33
>>356
AutoHotKeyとやらの解説ページ見たんだけどさ、要は
コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?

解説ページの記述によればコロン一つの行はラベルとコロンで行が終わってなければ
いけないようなことが書いてるから、357にあるように
^[^:]*;$
にしといて、コロン二つのほうは行のいろんなところに使えるみたいだけど行頭だけに絞るなら
^[^ ]*::
くらいににしとけば?

ラベル名は多分アルファベットだけで記号は使えないような気がするのでその辺で
絞ってもいいけど。

ピンポイントで解決したいこと書くより最終的に何をしたいのかを書いたほうが
いいアドバイスをもらいやすいってのはあると思うよ。

361 :デフォルトの名無しさん:2006/12/31(日) 00:15:20
>>354
詳しい説明ありがとう。

大体理解できた






...と思う。m(_._)m

362 :デフォルトの名無しさん:2006/12/31(日) 12:43:33
>>359-360
345さん!シンプルに^[^:]*:$と^[^ ]*::で登録しました
>コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?
そうなんです。説明足らずですみません
よくばりマッチも勉強します
[^:]+(?=:[^:]*$)もなんとか理解できたと思いますw

本当にありがとうございました!感謝感謝です

363 :デフォルトの名無しさん:2007/01/01(月) 21:13:05
PHPを使っています。
&を&におきかえたいんですけど、
今のところ、&を&に置き換えるという単純なことをしています。
ただこれだと、
&という入力があったら、&amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。

正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
& " <などの実態参照は除外したいです。


364 :363:2007/01/01(月) 21:14:30
すみません。書き直します。

PHPを使っています。
&を&amp;におきかえたいんですけど、
今のところ、&を&amp;に置き換えるという単純なことをしています。
ただこれだと、
&amp;という入力があったら、&amp;amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。

正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
&amp; &quot; &lt;などの実態参照は除外したいです。


365 :デフォルトの名無しさん:2007/01/01(月) 21:29:44
>>364
&amp;を&に置き換えた後&を&amp;におきかえれば?

366 :デフォルトの名無しさん:2007/01/01(月) 21:31:27
&amp;を&に置き換えてそのあと&を&amp;に置き換えるとか

367 :デフォルトの名無しさん:2007/01/01(月) 21:32:22
かぶったー

368 :デフォルトの名無しさん:2007/01/01(月) 21:37:32
&&

369 :デフォルトの名無しさん:2007/01/01(月) 21:40:31
これでどうだ?
&amp;

370 :363:2007/01/01(月) 21:44:30
>>365-366
ありがとうございます。
早速やってみたところ、&amp;は思い通りになりました。
しかし、他の実体参照文字(&quot;等)では、
&amp;quote;という風になってしまいますorz

371 :デフォルトの名無しさん:2007/01/01(月) 21:44:46
if (!変数 =&amp;) {
&を&amp;に置き換える
}

372 :363:2007/01/01(月) 21:48:12
と思いましたけど・・・

&amp;quot;でも表示上は一緒でしたね。
&quot;

どうも皆様ありがとうございました!

373 :デフォルトの名無しさん:2007/01/01(月) 23:45:15
まあ、解決したみたいだから何よりなんだけど、
そもそも & と &amp; が混在していると
言う設計がおかしいのではないの?

374 :デフォルトの名無しさん:2007/01/03(水) 13:35:53
PHPの置き換え処理で、文字列があったら、その文字列に置き換える
(つまり同じ文字列を出力する)
ということをしたいのですが、マッチした文字列をどう表現すればいいのかわかりません。
ereg_replace(".*", ".*", $str);
というようなことをしたいのですが、
第2パラメータをどう書けばいいのかわかりません。
上の例だと、そのまま.*という文字列が出力されてしまいます。
どなたかお助けください。

375 :デフォルトの名無しさん:2007/01/03(水) 14:06:18
preg_replace("/(.*)/", "\\1", $str);
動くかはしらん

376 :デフォルトの名無しさん:2007/01/03(水) 14:21:13
>>375
見事できました!
実は置き換え対象で\\1を指定したのに置き換えられなくて、
悩んでいたのですが、()で囲む必要があったんですね。
勉強になりました。どうもありがとうございました。

377 :デフォルトの名無しさん:2007/01/10(水) 11:49:44
最近 「字句解析処理系の生成ツール flex」 というのを知ったんだけど
C言語から使う場合 regex.h とどっちが早いの?
regex.h 遅いってイメージがあるんだけど・・・


378 :377:2007/01/10(水) 13:17:48
勘違いしてました。ごめんなさい

379 :デフォルトの名無しさん:2007/01/10(水) 21:12:03
↑誰だよオマエ


380 :デフォルトの名無しさん:2007/01/11(木) 07:42:12
ORACLE10gのREGEXP_LIKEを使っています。

訳あってOR、ANDを正規表現で行っています

SELECT * FROM TEST WHERE
REGEXP_LIKE(text,'(あいう)|(ABC)|(xyz)')
上のSQLであいうまたはABCまたはxyzというOR検索は可能ですが
AND検索の正規表現がどうしてもできません。

知恵をかしてください。




381 :デフォルトの名無しさん:2007/01/13(土) 16:08:13
PHPのpreg_matchでの質問です。

$template_src = preg_replace("/\\\[/","[",$template_src);
上のように、データ内に存在する\[を、ただの[へ置換したいのですが、
Compilation failed: missing terminating ] for character class at offset 3
という警告が出てしまいます。

自分では、\\で\として扱われているのかが怪しいと感じているのですが・・
これはどのようにすれば解決できるのでしょうか?

ご教授下さいませ。

382 :デフォルトの名無しさん:2007/01/13(土) 16:10:56
preg_replace('/\[/',"[",$template_src)

383 :381:2007/01/13(土) 16:23:51
>>382
$hoge = '\[hoge\]';
$hoge = preg_replace('/\[/',"[",$hoge);
echo $hoge;

\[hoge\]が出力されてしまいます。
シングルクオートで囲んでも、\[はただの[として認識されているようです。
または、私何か間違った認識をしているのでしょうか・・?

384 :デフォルトの名無しさん:2007/01/13(土) 16:33:41
>>383
preg_replace('/\x2F\[/', '[', $hoge);

385 :381:2007/01/13(土) 16:34:07
\\\\で\を表現するそうです。
笑ってください。

ありがとうございました。

386 :デフォルトの名無しさん:2007/01/14(日) 01:09:06
複数のパターンを含まない正規表現はどう記述すれば良いのでしょうか。

387 :デフォルトの名無しさん:2007/01/14(日) 05:15:51
>>386 例えば?

388 :386:2007/01/14(日) 14:41:08
>>387
/\[([a-zA-Z]+)\]/ と /\[\/$1\]/ に挟まれていて、尚且つ /<br \/>/ と /\[\/?[a-zA-Z]+\]/ を含まないパターン、などです。

/\[([a-zA-Z]+)\](?:(?!<br \/>)(?!\[\/?[a-zA-Z]+\]).)*\[\/$1\]/

かと思ったのですが、違うようなのです。

389 :デフォルトの名無しさん:2007/01/16(火) 13:07:41
無理して正規表現一本でやろうとしなくてもいいんじゃないかな

390 :デフォルトの名無しさん:2007/01/17(水) 15:53:02
>>388
>>1
にある

391 :デフォルトの名無しさん:2007/01/19(金) 13:40:05
いいところ見つけた。ちょっと確認する程度なら環境整えなくて済む。

http://lab.moyo.biz/tools/regexp/index.jsp

392 :デフォルトの名無しさん:2007/01/23(火) 11:17:31
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4871&forum=7
を参考に全角文字列に一致する正規表現を作っているのですが、さらに
・文字列の中間に全角スペースが1つ入っている。
・全体の文字数が20文字以内であること。
を条件に加えたいと思っていますがどのように記述したらいいでしょうか?

(マッチする例)
山田 太郎
ジョージ ブッシュ
(マッチしない例)
ウィリアム J クリントン ←スペースが2つ
山田太郎 ←スペース無し
 山田太郎 ←先頭にスペース
あいうえおかきくけこ さしすせそなにぬねの ←20文字超


393 :デフォルトの名無しさん:2007/01/23(火) 11:18:30
(^u^n^k^o)*

394 :デフォルトの名無しさん:2007/01/23(火) 12:40:12
>>392
正規表現でググレカス

395 :デフォルトの名無しさん:2007/01/23(火) 13:33:09
/(^o^)/ って何にもヒットしないんだな。オワタ

396 :デフォルトの名無しさん:2007/01/23(火) 16:08:09
正規っていう言葉は傲慢だ!
こんなセンスの無い表現を勝手に正規あつかいするな!

397 :デフォルトの名無しさん:2007/01/23(火) 16:10:27
「面倒くさがりのためのセンスの無い表現」 とか、 「紙面のスペース上都合の良い表現」とかに変えろ!

398 :デフォルトの名無しさん:2007/01/23(火) 17:24:02
http://dictionary.www.infoseek.co.jp/?ii=0&lp=0&sm=1&sc=1&gr=ml&qt=regular&sv=EJ&se=on
直訳だからな。

399 :デフォルトの名無しさん:2007/01/27(土) 00:48:54
http://capslockabcjp.kitunebi.com/faq.html

boostのバグ?

スレでの指摘により、boostの動作が怪しいという指摘がありました。
boost1.33および1.33.1で/\1/を使用した場合に落ちることを確認しました。

400 :デフォルトの名無しさん:2007/01/27(土) 01:18:31
このスレ的に、これはテンプレにいれとくべきだな

正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/


401 :デフォルトの名無しさん:2007/01/27(土) 12:50:50
秀丸で置換をしているのですが

abc=
def=
ghi=




abc=abc
def=def
ghi=ghi


とするにはどういった正規表現で置換すればいいのでしょうか?


402 :デフォルトの名無しさん:2007/01/27(土) 13:01:45
>>401

(.+?)= → \1=\1

でいいんじゃね?

403 :デフォルトの名無しさん:2007/01/27(土) 13:20:09
>>402
できました!
ありがとうございます

404 :デフォルトの名無しさん:2007/01/28(日) 11:19:30
正規表現ってのを勉強したいんですが、最も一般的なのはどこの正規表現なんですか?

405 :デフォルトの名無しさん:2007/01/28(日) 11:38:51
>>404
perlかsedが手ごろ。Windowsでも入手できるよ。

406 :デフォルトの名無しさん:2007/01/28(日) 11:57:42
いや、文法は検索して勉強からするからいいんですけど、
正規表現って環境によって色々種類があるみたいで、
どれを勉強すればいいかわからない・・・。
一番スタンダートとされてるものは、grepなんですか?

407 :デフォルトの名無しさん:2007/01/28(日) 12:11:58
Perl5互換のものが多いかと。

408 :デフォルトの名無しさん:2007/01/28(日) 13:15:18
いいえ。

409 :デフォルトの名無しさん:2007/01/28(日) 13:32:17
メジャーなのではegrepが一番セオリーに忠実だと思う。
世間じゃPerl式が主流でもう正規表現の範疇から外れまくってる。

410 :デフォルトの名無しさん:2007/01/28(日) 15:08:29
とりあえずperl互換モードがなければ駄目エンジン決定だからな

411 :デフォルトの名無しさん:2007/01/28(日) 16:14:22
そんなにPerl式っていいのか?
lexやegrepと動き違うし、エンジンごとの挙動もぴったり合わなくなるし
使ってて感覚的に不正確なんだが(それが正しくても人間の感覚とズレるから)。

412 :デフォルトの名無しさん:2007/01/28(日) 16:42:03
俺の感覚にも合わん。>perl式
俺的に、かなりの場面で、egrep程度の能力+プログラムコードの方がわかりやすい。
もちろんそうでない場面も多少はあるだろうが、あれだけ拡張する必要はなかったろう。

413 :デフォルトの名無しさん:2007/01/28(日) 20:25:42
Perl式とegrep式ってどの辺が違うの?

最短一致の?とか、(?…)系のとこだけかな?

414 :デフォルトの名無しさん:2007/01/28(日) 21:16:46
egrepは常にパターン全体で最長の一致をとるけど、
perlは適当なところで中断して結果を返す仕様。

perlは深さ優先探索で枝刈りって制約をうけるから、
プログラム的な設計の自由度が全然なくてDFAとか使えない。

415 :デフォルトの名無しさん:2007/01/29(月) 00:04:20
駄目とか使えないとか じゃあなくって
perl式は世のデファクトだからなぁ

正しいとか正しくないとか関係ない

416 :デフォルトの名無しさん:2007/01/29(月) 00:42:55
>>414
んと、世間でよくいう「PPerl 5互換」というのはものぐさマッチ(最短マッチ)などの
表記上の拡張を受け付けるかどうかという観点でいってるんじゃないかな。

枝刈りだのなんだのまで考えて「互換仕様」にしているdeveloperはいないんじゃかろうか?
もちろん、理屈の上でperlと同じようにしないと実装できないというのは
おいといてね。

斜め読みなんで勘違いしているかもしれないけど、perl 6の rule だと
DFAで解釈できるところはDFA作ってマッチングを行うとかあったような。
まあもはやアレは「正規表現」じゃないが。


417 :デフォルトの名無しさん:2007/01/29(月) 01:34:35
ちょんまげは性器表現

418 :デフォルトの名無しさん:2007/01/29(月) 02:06:01
妹「ああもう沢山。この兄と来たら陰茎の事ばかり。
  得意げな顔をして髷を動かしている。こんな兄の血を引く自分が憎い」
妹「卑猥にすぎる。日本はどうなってしまうのか」

419 :デフォルトの名無しさん:2007/01/29(月) 02:26:21
オラ難しいことはわかんねーだが
最短一致てのが使えるってーことを知ったとき
「こりゃ便利だべ!」と思ったべさ

420 :デフォルトの名無しさん:2007/01/29(月) 15:21:23
専門板らしくなってきたのに。

421 :デフォルトの名無しさん:2007/01/29(月) 19:31:06
>>418
兄の血を引く妹っておかしくね?

422 :デフォルトの名無しさん:2007/01/30(火) 02:33:54
血縁は兄の子だけど、登録は兄の妹になってるだけじゃね?


423 :デフォルトの名無しさん:2007/01/30(火) 02:39:51
つまりこういうことだ
http://ex20.2ch.net/test/read.cgi/gline/1162165418/758-759

424 :デフォルトの名無しさん:2007/01/30(火) 02:48:03
正規表現で説明して

425 :デフォルトの名無しさん:2007/02/02(金) 18:00:49
javascriptの正規表現なのですが、
 /\/ads?[./]/
 /\.ads?\//
を上手く組み合わせられませんか?
/[,/]ads?[./]/
だと \.ads?\. もマッチしてしまうので、
これを除外したいのですが……。

426 :デフォルトの名無しさん:2007/02/02(金) 21:02:57
/\/ads?[./]|\.ads?\//

427 :デフォルトの名無しさん:2007/02/07(水) 14:01:14
ttp://www.sixnine.net/regexp/regexp4.html
こちらで紹介している”例外弐 : 直前にマッチした部分を後で使う方法”
というのは普通のエディタでは使えませんか?

428 :デフォルトの名無しさん:2007/02/07(水) 15:10:36
「普通のエディタ」ってメモ帳か?

429 :デフォルトの名無しさん:2007/02/07(水) 15:16:35
>>428
自分が今使用しているのはサクラエディタです。

430 :デフォルトの名無しさん:2007/02/07(水) 15:31:23
じゃ、そちらのスレでどうぞ

431 :デフォルトの名無しさん:2007/02/08(木) 03:18:39
行末から一番近い位置のある文字から行末まで削除したいのですが
分かりません(行頭からというのは出来るようになりました)
kome!kame!
の最後からkを探してそこから削除して kome! だけを残したいです
よろしくお願いいたします


432 :kome!kame!:2007/02/08(木) 06:21:48
test

433 :デフォルトの名無しさん:2007/02/08(木) 07:22:24
echo 'kome!kame!' |sed -e "s/\(.*\)k[^k]*$/\1/"

434 :デフォルトの名無しさん:2007/02/08(木) 11:17:16
kome!


435 :デフォルトの名無しさん:2007/02/08(木) 18:45:14
{}の間の、改行のみの行、を正規表現で削除したいのですが、どうなるでしょうか?
例えば、
-----------------
{
hoge

}

{

}
-----------------------
の場合、
-----------------------
{
hoge
}

{
}
-----------------------
にしたいと考えています。

phpのpreg_replaceを利用するつもりです。
おながいします orz

436 :デフォルトの名無しさん:2007/02/09(金) 10:04:17
MovableTypeのプラグインで、BANASCIIという、
ラテン文字のみのトラックバックを禁止するものがあるのですが、
それと同じ正規表現をPHPに使いたいと思い、
ソースを見たのですが、Perlもわからずちんぷんかんぷんです。
とりあえずそれらしきもの(^[\x00-\xff]+$)を見つけたのですが、
これをそのままPHPでやってみたところ、日本語が混じってるのにも関わらず、
マッチしてしまったようです。
PHPではどうかけばいいのでしょうか?どなたかアドバイスお願いします。

437 :デフォルトの名無しさん:2007/02/09(金) 15:01:40
こんにちは、宜しくお願いします。

以下にあるjavaの正規表現構文に従って

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html

正規表現でメールアドレスを取って行きたいです。
以下の様な一行にあるメールアドレスを"<"や">"を判定材料として使わずに
取り出す事は可能でしょうか?XYZは任意の文字列です。

To: =?ISO-2022-JP?B?GyRCSRsoQg==?= <XXXXXXXXXX@YYY.XXX.ZZZ.jp>, =?ISO-2022-JP?B?GyRCRsoQg==?= <XXXX@YYYYYYY.ZZ.com>


438 :デフォルトの名無しさん:2007/02/10(土) 14:58:29
>>436
\xffじゃなくて\x7fが正解

439 :デフォルトの名無しさん:2007/02/10(土) 22:02:19
A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G
....
というようなデータがあったとして、
#で始まる行だけ「,」を「&」に置換するのは正規表現だけでできるでしょうか?
PHPのpreg_replaceを使った置換ライブラリが既にあって、
それを通す時に置換しないといけない状況なので困っています…。

↓こういう出力になって欲しいのです。
A,B,CDE,F
#A&B&C&D
HOGE,HOGE,
aiueo,kakikukeko
#E&F&G
....

440 :乞食:2007/02/10(土) 23:09:20
めぐんで下さい。

ClipsedをTeraPadに追加したのですが、ClipsedのGUIの日本語が
文字化けして読めません。Clipsedのメイン画面と複数検索補助画面の
画像ファイルをどこかにアップして頂けないでしょうか?

よろしくお願いします。(ペコ



441 :デフォルトの名無しさん:2007/02/11(日) 00:01:31
>>440
どこを正規表現?

442 :デフォルトの名無しさん:2007/02/11(日) 04:59:55
>>439

行頭が#のときだけ置換してから呼ぶというパターンでなんか不具合があるの?


if (preg_match(行頭の#)) {
   plage_replace ほげほげ ← ,を&に置き換え
}
ライブラリ呼び出し

つーぱたーんでさ。


443 :デフォルトの名無しさん:2007/02/11(日) 06:24:53
>>442
ありがとうございます。PHPのコードが入れられたら一発なんですよね。
でも、設定ファイルに相当するものしか変更する権限がないので、
プログラム部分が一切変更できません。なので、正規表現のみで実現できないか悩んでいます。

しかも変更できる部分が

preg_replace('/スラッシュの内側と/', '置換後', ...);

だけなので、パターンに/eとか/mを指定してすることもできず、例えば

preg_replace('/^L.*$/me', "str_replace(' ', '', '$1')" ...);

となるようにすることもできません。

ウワーン(T_T)

444 :デフォルトの名無しさん:2007/02/11(日) 20:11:19
>>439
phpにバージョンによっては可能

445 :デフォルトの名無しさん:2007/02/11(日) 20:24:58
preg_replace('/^\#.*$/me', "str_replace(',', '&', '\\0')", $data);
うちはこれで動作したみたいだけど

446 :デフォルトの名無しさん:2007/02/11(日) 20:44:01
ありがとうございます。
>>443の通り、プログラムが書けるわけではないので
正規表現のみでできないか探しています。

447 :442:2007/02/11(日) 23:59:26
>>443
そーゆー制限事項は省略せんでくれ
正規表現にこだわって問題を難しくしている人がままいるので気になるのだよw
でだ、

<?php
$str0 = "#a,b,c,d";
$str1 = "e,f,g,h";
$pat = "/(?=(?:#|(?<=.)\G))([^,]*),/";
echo preg_replace($pat, "$1&", $str0), "\n";
echo preg_replace($pat, "$1&", $str1), "\n";

結果
#a&b&c&d
e,f,g,h

こんな感じになったがこれでよいかや?


448 :デフォルトの名無しさん:2007/02/12(月) 02:09:51
行単位じゃないならこれで動くかな?
ほとんど>>447のパクりだけど

$str = 'A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G';
echo preg_replace("/(?=(?:#|(?<=.)\G))([^,\r\n]*),/", "$1&", $str);

449 :デフォルトの名無しさん:2007/02/12(月) 17:49:40
>>447失礼しました。
既存のライブラリを使わないといけない制限はかなりツライですね…。

>>448の方法で動きました!
内部的に行単位じゃありませんでした。
感謝の気持でいっぱいです。
ありがとうございます。
うをースゲー!

450 :デフォルトの名無しさん:2007/02/12(月) 19:51:34
PHPの正規表現で携帯から送信されたメールのヘッダから宛先アドレス部分を取り出す場合の質問です。
preg_match("/To: <(.+?)>\s/", $header, $result);
・・・と書いています。これでvodafoneのV602SHから送信されたメールでは上手くいきました。

これはこれでメールの仕様通りだと思いますが、
もしも「To」が「to」や「TO」だったら? もしも「To:」の後ろのスペースが1つじゃなかったら??
もしも「< >」が使われていなかったら??? etc.

そう考えていくと正規表現を何パターンも用意しなくてはならず、漏れが怖いです。
こういうとき、皆さんはどう対処していますか? この場合の汎用的な正規表現ってあるのでしょうか?

なお、検索したらモード修飾子というものがあるのを知り、
preg_match("/To:\s?<?(.+?)>?\s/i", $header, $result);
にしてみたら、かえって悪くなりましたorz

今までマッチしてたはずのものにもマッチしなくなりました・・・

451 :デフォルトの名無しさん:2007/02/12(月) 20:35:09
基礎くらいちゃんと勉強してきな

452 :デフォルトの名無しさん:2007/02/12(月) 22:56:02
…と、回答できるほどの基礎能力が身に付いていない>>451の独り言であったww

453 :デフォルトの名無しさん:2007/02/12(月) 23:22:01
*
[]

454 :436:2007/02/13(火) 04:37:32
>>438
返答おそくなってすみません。
\x7fにしたところみごとできました。
本当にどうもありがとうございます。

455 :450:2007/02/13(火) 11:22:48
おはようございます。
昨夜いろいろ試してみましたが、結局ダメでした・・・

どなたかお知恵をお貸しください・・・

456 :デフォルトの名無しさん:2007/02/13(火) 11:33:32
>>455
答えようかと思ったらすでに回答ついてるじゃないか

457 :デフォルトの名無しさん:2007/02/13(火) 11:56:20
>>456
分からないなら分からないと素直に認めないと。

458 :デフォルトの名無しさん:2007/02/13(火) 12:20:45
簡単すぎて答える人がいないだけだと気づけ

459 :デフォルトの名無しさん:2007/02/13(火) 14:34:42
>>458
「自分は玄人ぶってるけど、実は自信が無いただのバカです」と気づけ。

460 :デフォルトの名無しさん:2007/02/13(火) 20:01:26
この板過去にさかのぼってIDが突然表示されたら面白そう。

461 :デフォルトの名無しさん:2007/02/13(火) 20:52:22
>>450
「メールヘッダからメールアドレスを抜き出したい」
という要件を「厳密に」やろうとすると、実は極めて難しいです。

462 :デフォルトの名無しさん:2007/02/13(火) 21:12:54 ?2BP(737)
<p>aaaaa</p>
…いくつかの改行
…いくつかの文字列
<div>bbbbb</div>

この様に複数行にわたる文字列<p>〜</div>の一致を返すことのできる正規表現はありますでしょうか、
またそれは可能でしょうか、どうぞよろしくお願いします。

463 :デフォルトの名無しさん:2007/02/13(火) 21:14:42
あります、そして可能です。
こちらこそよろしくお願いします。

464 :デフォルトの名無しさん:2007/02/13(火) 21:37:31 ?2BP(737)
ありがとうございます。>>463
では、その方法を伝授してはいただけないでしょうか。

465 :デフォルトの名無しさん:2007/02/14(水) 00:50:03
>>461
「メールアドレス」を厳密にやるのは難しいけど、
とりあえずメアドのマッチは適当でいいとして、
ヘッダの中から「To:」で始まるメアド「らしき」文字列を抜き出すのは
簡単なのでは??

466 :デフォルトの名無しさん:2007/02/14(水) 00:52:45
>>465
簡単だと思うなら正規表現挙げてやれよ

467 :デフォルトの名無しさん:2007/02/14(水) 01:17:03
必死w

468 :デフォルトの名無しさん:2007/02/14(水) 02:13:39
>>466
教えない

469 :デフォルトの名無しさん:2007/02/14(水) 09:41:44
厳密にはこれか。
http://www.din.or.jp/~ohzaki/perl.htm#Mail
長すぎてわけわからん

470 :デフォルトの名無しさん:2007/02/14(水) 16:53:03
>>469
いま話題になってるのは、「メアドそのもの」のマッチじゃなくて、
メールのヘッダから「To:の行」を取り出す話。

471 :デフォルトの名無しさん:2007/02/16(金) 00:57:45
javascriptで
1999-12-23日のような形式をした日付けかをチェックするために
function checkDate(str){
if(! str.match(/^(\d{4})\-(\d{2})\-(\d{2})$/)) return false;
var sYear = parseInt(RegExp.$1);
var sMonth = parseInt(RegExp.$2);
var sDay = parseInt(RegExp.$3);
if(sYear<1950) return false;
if(sYear>2050) return false;
if(sMonth<1) return false;
if(sMonth>12) return false;
if(sDay<1) return false;
if(sDay>31) return false;
return true;}
function checkSubmit(obj){
var empty_flag_title = obj.title.value == "";
var empty_flag_from = obj.date_from.value == "";
var empty_flag_to = obj.date_to.value == "";
if(empty_flag_title && empty_flag_from && empty_flag_to){return false;}
if(!empty_flag_from){
var str = obj.date_from.value;
if(!checkDate(str)){return false;}}
if(!empty_flag_to){
var str = obj.date_to.value;
if(!checkDate(str)){return false;}}
return true;}
とこんな感じでチェックしているのですが
2007-01-01は通るのに2007-01-08もしくは09は通りません.
自分にはまったく通らない原因がわかりませんでしたので,どなたか何処が間違っているか教えてください.
よろしくお願いします.

472 :デフォルトの名無しさん:2007/02/16(金) 01:14:51
parseInt("08") == 0
parseInt("08", 8) == 0
parseInt("08", 10) == 8

473 :471:2007/02/16(金) 12:49:48
>>472
返信ありがとうございます.
無事解決できました.

474 :デフォルトの名無しさん:2007/02/16(金) 22:33:22
アクセスログの解析で、****.gifは削除してカウントしたいのですが、
正規表現でどのように現すか分かりません。。

.*(?!gif)

でわ、****.gifもマッチしてしまいました。。 どのようにすればよいかお教えくださいです!


475 :デフォルトの名無しさん:2007/02/16(金) 23:13:24
>>474
****.gifにマッチしたら除外する方がよくないか?

476 :デフォルトの名無しさん:2007/02/17(土) 11:30:51
PHPで正規表現
http://www.pahoo.org/e-soul/webtech/php05/


477 :デフォルトの名無しさん:2007/02/22(木) 11:29:01
とりあえず正規表現ドシロウトなので天麩羅のページ行って
こんなの作ったけどうまくうごかねぇ・・・

動作目標は 

先頭から+-が1つまたは無し
0から9の文字が1以上10以下連続し
その後でピリオドがあってもなくてもよい
ピリオドがない場合そっから後ろの文字が何にもなければOK
ピリオドがあった場合0から9の文字が1つ以上3以下連続してある事

^[-+]?[0-9]\{1,10\}[.][0-9]\{1,3\}

これで動くかなと思ったけど今一歩・・
実際どこが悪いかといわれるとピリオド判定が悪い気がするんだが・・・
もし気づいた人いたら指摘くださいませんか?

478 :デフォルトの名無しさん:2007/02/22(木) 11:55:58
それだとdotが必須になってるね。
dotを含めた小数点以下があるかないかだから、
(\.[0-9]\*{1,3\})?
かな。

479 :デフォルトの名無しさん:2007/02/22(木) 12:07:51
>>478
トンクス!
あ〜グループにしてそれがあるか無いかの判断と考えればいいのか

やってみます!ありがとでした

480 :デフォルトの名無しさん:2007/02/23(金) 15:26:35
正規表現おもすれー( ^ω^)

481 :デフォルトの名無しさん:2007/02/26(月) 00:45:14
htmlファイルの編集をPHPでやりたいと思っています
テーブルタグが2重(3重)になっているものがありまして

<table>
 <table>なにかKeyになる文字</table>
</table>

の時に内側のテーブルのみを消去したく
$html = preg_replace('/<table>.*?Key.*?<\/table>/is', '', $html);
としてみたのですが、外側の開始タグ以降から消去してしまいます

正規表現自体知ったばかりなので初歩的な質問かも知れませんが
ご教授いただけるとうれしいです


482 :デフォルトの名無しさん:2007/02/26(月) 01:46:25
×ご教授
○ご教示

483 :デフォルトの名無しさん:2007/02/26(月) 01:52:47
>>481
そりゃ正規表現で処理すべき問題じゃない。
知ったばかりだというならなおのことその辺に注意すべき。

ネストを二重に限定していいなら手でネストを書いとけば?

あとPHPのpreg_だと再帰的な構造も書けた気がするけど
書き下すの面倒なので俺はパス。



484 :デフォルトの名無しさん:2007/02/27(火) 03:48:27
>>481
Perlしか知らないけど
/<table(?!<table)(.(?!<table))*?<\/table>/
これで行けない?

485 :デフォルトの名無しさん:2007/02/27(火) 03:49:17
ごめん
/<table(.(?!<table))*?<\/table>/


486 :デフォルトの名無しさん:2007/02/27(火) 03:51:45
/is ね

487 :デフォルトの名無しさん:2007/02/27(火) 06:10:09
質問です。
例えばカンマで分解したいのですが、括弧やクォーテーションで括られたカンマは
対象外にしたいのです。

例1)aaa,bbb,ccc
aaa
bbb
ccc

例2)aaa(a1, a2),bbb(aaa(a1, a2)),ccc("9,999")
aaa(a1, a2)
bbb(aaa(a1, a2))
ccc("9,999")

お助けください。

488 :デフォルトの名無しさん:2007/02/27(火) 11:10:02
>>484
Key の処理が抜けてるような。

489 :デフォルトの名無しさん:2007/02/27(火) 19:16:29
PHPで以下のようにしてvalueの中身を取得したいと思っているのですが、マッチしません。

$line=preg_match('/<input type="hidden" name="MT" value="(.*?)">/i',$line,$reg);

やはり、間違ってますかね?

490 :デフォルトの名無しさん:2007/02/27(火) 19:18:29
$reg[1]に入ってるはず

491 :デフォルトの名無しさん:2007/02/27(火) 19:23:26
>>490

レスありがとうございます。入ってないんですよね。

具体的には
<input type="hidden" name="MAP" value="E139.44.55.110N35.39.19.420">
<input type="hidden" name="MT" value="東京都港区芝公園4-2-8">

という感じが、$lineに入っていくのですが。

492 :デフォルトの名無しさん:2007/02/27(火) 19:30:33
preg_matchの戻り値を$lineに代入してるのは何?

493 :489:2007/02/27(火) 19:34:30
単純にマッチしたかどうかをチェックするためです。紛らわし書き方すみません。

print_r($reg);

とやっても何も入っていないのです orz

494 :デフォルトの名無しさん:2007/02/27(火) 21:02:48
すいません、教えてください、、VBAで、テキスト中から、

$$自由な文字 {{自由な文字}}
例)$$foo {{boo boo boo}}

を抜き出して、自前でセレクタと要素を表現、みたいなことをやろうと色々やってみています。
現在は下のような感じなのですが、

myRegExp.Pattern = "\$\$([^{{]*)\{\{([^}}]*)\}\}"

例2)$$foo {{ boo boo } boo }}
{{で開け、}}で閉じているつもりなのに、例2のように}を単発入れると
無視してしまいます。
どこが悪いのでしょう、、どなたか教えてください・・

495 :デフォルトの名無しさん:2007/02/27(火) 22:15:40
[^{{]

[^{]
と同じだぞ?

496 :494:2007/02/27(火) 22:23:31
>495
ありがとうございます。今試して知りました・・。
長々と相談をしてしまいましたが、質問を絞れました。ご指摘いただいたように
「{{」以外の任意の文字、を表現したい、というのが相談の肝です。
([^{{2}]←これでいくように思えたのですが、駄目ですね・・。)
ご教授いただければ幸いです。。

497 :デフォルトの名無しさん:2007/02/27(火) 22:32:22
>>482

498 :494:2007/02/27(火) 22:44:35
>497
失礼しました。

499 :デフォルトの名無しさん:2007/02/28(水) 07:17:29
一文字で表すと責任だそうですが/./にマッチしません。
自民党に訊いた方がいいですか?

500 :デフォルトの名無しさん:2007/02/28(水) 14:36:35
<a href="/rap.php?q=hogehoge&p=2">hogehoge</a>

このリンクタグからhogehogeを抜き出すには、どのように書けばいいのでしょうか?
PHPなのですが、以下のように書いて取得できません。

preg_match("/(\bhref\s*=\s*[\"']?)(\/rap.php[^\s\"'>]*)">(.*)<\/a>/i",$line,$reg);
最後のキャプチャ部分が取得できないのですが。。。


501 :デフォルトの名無しさん:2007/02/28(水) 16:33:32
>>500
([^<]+)


113 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)