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

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

正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g

1 :nobodyさん:03/11/19 21:42 ID:Kst3Nn4S
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

註:& や " を書くときには、&amp " と描いておきましょうね。

Perlメモ
 http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
 http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
 http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
 http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
 http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
 http://www.sixnine.net/regexp/

ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
 http://www2.famille.ne.jp/~akio1998/l_grep.html

過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc2.2ch.net/test/read.cgi/php/1038146241/


2 :nobodyさん:03/11/19 21:44 ID:???
motu

3 :nobodyさん:03/11/19 22:56 ID:???
nikomi

4 :nobodyさん:03/11/20 00:40 ID:???
nabe

5 :nobodyさん:03/11/20 01:09 ID:???
uma-

6 :nobodyさん:03/11/20 13:42 ID:???
shika-

7 :nobodyさん:03/11/20 15:18 ID:???
chou-

8 :nobodyさん:03/11/20 20:06 ID:???
流れを断ち切るために9get。

$MyJob =~ s/仕事/労働/;


9 :nobodyさん:03/11/20 20:06 ID:???
俺は数字が読めない馬鹿でした。

10 :nobodyさん:03/11/20 20:15 ID:???
$Pay =~ s/残業代//;

11 :nobodyさん:03/11/21 14:29 ID:???
初心者質問で申し訳ないです。
条文(第一条〜第九百九十九条)をアラビア数字(第1条〜第999条)に置き換える式を教えてください。



12 :nobodyさん:03/11/21 15:19 ID:???
>>11
使用言語と環境と文字コードは?

13 :未承諾広告※ ◆aiY4htt2.2 :03/11/21 21:05 ID:???
>>11
$arabic{'第一条'} = 1;
から、
$arabic{'第九百九十九条'} = 999;
まで入れといて、
対象文字列 $joubunn に対して置換してみるとか?

$joubunn =~ /$regexp/$arabic{$regexp}/ foreach my $regexp (keys %arabic);

効率悪そうな悪寒。。。

14 :nobodyさん:03/11/21 22:07 ID:???
>>13
そういうハッシュテーブル使っていいなら、これでそんなに効率悪くないかと。

%arabic = ('一' => 1, ..., '九百九十九' => 999,);
$joubunn =~ s/(?<=第)(.+?)(?=条)/(defined($arabic{$1}))?$arabic{$1}:$1/ge;

てゆかそもそもそのハッシュテーブルの初期化が効率悪そうな悪寒。。。

15 :nobodyさん:03/11/21 22:43 ID:???
文字コード Shift_JIS

my %ichi = ("一"=>1, "二"=>2, "三"=>3, "四"=>4,
"五"=>5, "六"=>6, "七"=>7, "八"=>8, "九"=>9);

my %juu = ("十\"=>1, "二十\"=>2, "三十\"=>3, "四十\"=>4,
"五十\"=>5, "六十\"=>6, "七十\"=>7, "八十\"=>8, "九十\"=>9);

my %hyaku = ("百"=>1, "二百"=>2, "三百"=>3, "四百"=>4,
"五百"=>5, "六百"=>6, "七百"=>7, "八百"=>8, "九百"=>9);

$joubunn =~ s/第(.*?百)?(.*?十\)?(.*?)?条/
"第".($hyaku{$1}||"").($hyaku{$1}?$juu{$2}||0:$juu{$2}||"").($ichi{$3}||0)."条"/eg;


# なんかこれって位取りの処理の仕方が肝で、正規表現とはあんまり関係なさそうな予感。

16 :nobodyさん:03/11/23 02:27 ID:marqbBst
検索したい字句が存在してもしなくても
マッチさせるにはどうしたらいいのでしょうか?

<img src="オムレツ.jpg" alt="おいしい料理1"><b>料理の解説1</b>
<img src="カツ丼.jpg"><b>料理の解説2</b>

っというタグがあってこれから

1行目では、
 \1 → オムレツ.jpg
 \2 → おいしい料理
 \3 → 料理の解説1
2行目では
 \1 → カツ丼.jpg
 \2 →
 \3 → 料理の解説2

というようにしたいのです。
src="(.*?)".*?alt="(.*?)".*?<b>(.*?)</b>
↑のような正規表現を考えたのですが
これを2行目にも正しくマッチできるように
修正していただけませんか?
 

17 :nobodyさん:03/11/23 03:02 ID:???
src="(.*?)".*?(?:alt="(.*?)".*?)?<b>(.*?)</b>

18 :nobodyさん:03/11/23 03:07 ID:???
>>17
希望通りの結果が得られました。
どうもありがとうございます。

19 :nobodyさん:03/11/24 18:36 ID:???
>>11のは、文字列として処理するより、いったん数値にするのがいいと思う
漢数字<->数値<->アラビア数字 で相互変換できればどういったケースでも使える

ちまり正規表現は数字文字列の抜き出しに使うくらいがいいね

20 :nobodyさん:03/11/25 00:30 ID:???
正規表現の質問!
「改行も含めて全部」はどう表現すればよいのでしょう?
「.*」で「改行以外の任意の文字0個以上=改行含まない全文字列」
ですが
「改行も含めた任意の文字0個以上=改行も含めた全文字列」はどう表現すればよいのでしょう?

一応言語はJavaですが、PERLも同じらしいのですが・・

21 :nobodyさん:03/11/25 00:39 ID:???
>>20
Perlなら /s オプション
または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
JavaScriptは知ってるがJava言語は知らん。

22 :nobodyさん:03/11/25 00:42 ID:???
>>20

>> または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
>> JavaScriptは知ってるがJava言語は知らん。

Javaでも全部できたみたい!!
今から意味調べます。ありがとうございます!

23 :nobodyさん:03/11/25 00:43 ID:???
>>20
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#DOTALL

24 :nobodyさん:03/11/29 00:22 ID:???
PHPで質問です。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output omit-xml-declaration="yes" method="xml" indent="no" />

<xsl:template match="/block">!
<html lang="ja" xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="ja">!
!
<xsl:apply-templates select="block_head"/>!
!
<xsl:apply-templates select="block_body"/>!
!
</html>!
</xsl:template>

</xsl:stylesheet>

というテキストがあって、<xsl:template>で囲まれた範囲の改行
("!"があるところ)だけを<xsl:text>\n</xsl:text>に置き換えるにはどう書けば
いいのでしょう。文字コードはUTF-8です。よろしくお願いします。

PHPのXSLT関数ってXSLファイル内のの改行を全部無視しちゃうので明示的に
改行を置かないと出力されるHTMLファイルが一行になっちゃうんですね。

25 :nobodyさん:03/12/01 13:50 ID:???
>>24
もっとスマートな方法があるかもしれないけど、漏れだったらこうするかな。
1. <xsl:template /> の中だけ取り出す
2. 取り出したものを \n を <xsl:text>\n</xsl:text> に置換する
3. 置換したものを <xsl:template /> の中に戻す

26 :nobodyさん:03/12/01 14:07 ID:???
>>25の方法での結果

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:text>
</xsl:text><xsl:text>
</xsl:text><xsl:output omit-xml-declaration="yes" method="xml" indent="no" /><xsl:text>
</xsl:text><xsl:text>
</xsl:text><xsl:template match="/block">!<xsl:text>
</xsl:text><html lang="ja" xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="ja">!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text><xsl:apply-templates select="block_head"/>!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text><xsl:apply-templates select="block_body"/>!<xsl:text>
</xsl:text>!<xsl:text>
</xsl:text></html>!<xsl:text>
</xsl:text></xsl:template><xsl:text>
</xsl:text>


27 :nobodyさん:03/12/05 18:55 ID:???
perlで質問です。
---------------------
あ\n
     \n
\n
\n
あ\n
---------------------
\nは改行です。
上のようなテキストファイルから2つ以上の連続した空白行を一つにまとめたいと思い、
$対象文字列 =~ m/^\s*\n$/; (空白文字0個以上だけで構成され改行で終わる)
にマッチしたらフラグをセットし、フラグがオンに間はファイルに出力せず、
フラグがオンかつマッチング対象が空白文字だけで構成されていなければフラグをオフにする。
としようとしたのですが、
対象に空白文字と改行以外の文字が含まれるというのをどうやって表現していいか分かりません。
よろしくお願いします。

28 :27:03/12/05 19:01 ID:???
[^\s\n]で簡単にできました
はいどうも

29 :nobodyさん:03/12/05 19:03 ID:???
何をしたいのかよくわからん

30 :nobodyさん:03/12/06 23:50 ID:???
今日電車で置換されました。

31 :nobodyさん:03/12/07 03:53 ID:ye6hWK3e
>>30
同じカバン持ってる奴にお前のカバンを持ってかれたのか?

32 :nobodyさん:03/12/07 05:21 ID:???
s/財布//g
かもしれん

33 : :03/12/07 06:33 ID:???
>26
それはなかろう。

34 :nobodyさん:03/12/07 11:49 ID:???
>>1
スレタイのRegExpが意図した通りに動かない恥ずかしいスレはここですか?

35 :nobodyさん:03/12/07 15:12 ID:???
>>34
いつの世も正規表現とはそういうものなのです。

36 :nobodyさん:03/12/09 11:55 ID:???
perlで変数$siteurlに入っているURLのドメインを$hogeに代入したいんですが、
・サブドメインがあればそれも
・ドメインに~が続いていたらそのユーザーID(?)まで
↑の条件付でして、思うようにいってくれなくて困ってます。

$siteurl =~ /^https?:\/\/(.*?)\/((.).*)/;
$hoge = $1;
$hoge .= "/$2" if ($3 eq "~");
こんな感じのとこまで考えたんですけどこれだと
http://hoge.hoge/~hoge
http://hoge.hoge/hoge
は意図したとおりなんですが、
ドメインより後ろに何も入ってないときは駄目だし・・
他にも色々調べながら試したんですが
ドメインの後にスラッシュがないと駄目だとか、
とにかく何か色々だめだめなんです。

正規表現からっきし駄目な僕に教えていただけませんでしょうか?

37 :nobodyさん:03/12/09 13:43 ID:???
>>36
これでどうかな?
$hoge = $1 if ($siteurl =~ /^https?:\/\/([^\/]+(?:\/~[^\/]+|)).*/);

38 :nobodyさん:03/12/09 14:09 ID:???
>>36
http://www.example.com/~username/path/to/file
という http URL の各部名称は、
"http" ... スキーム (scheme)
"www.example.com" ... ホスト名、サーバ名、ドメイン、FQDN etc.
"www" ... 3rd レベルドメイン、ホスト名、所謂「サブドメイン」 etc.
"/~username/path/to/file" ... パス (絶対パス)
"~username" ... 所謂「ホームディレクトリ」

see also: http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt

my($hoge) = $siteurl =~ m{^https?://([^/]+(?:/[^/]*)?)};
$hoge =~ s/~//;

39 :nobodyさん:03/12/09 16:14 ID:W6bkuxuf
プログラミング・・・ではないのかもしれないのですが、教えて頂けませんか?

gooの辞書から関連語句だけを集めて用語辞典を作りたいので、
「説明文から検索」の機能で抽出した後、
左側に出てきた見出しだけをテキストエディタにコピペして、
単語以外は全て削除したいと思っています。
メモ帳とワードの他にVisual C++があるのですが、
これらで何とかできませんか?
例えば・・・
http://dictionary.goo.ne.jp/search.php?MT=%CE%EB%CC%DA&kind=jn&mode=0

すずき 【鈴木】
姓氏の一。...

すずき-あきら 【鈴木朖】
(1764-1837) ...

すずきいせき ―ゐせき 【鈴木遺跡】
東京都小平市にある旧石器...

すずき-うめたろう ―うめたらう 【鈴木梅太郎】
(1874-1943) ...

上記の場合でいうと、
(半角スペース)【鈴木】・・・から行末まで削除、とか
(全角スペース)―ゐせき(半角スペース)【鈴木遺跡】・・・から行末まで削除、というふうに
とにかく最初のひらがな単語だけを残したいのです。

▼などの記号も混ざっているので、段階を踏まなきゃならないのかなとも思いましたが
「正規表現メモ」とか見ても
どうすればいいのかさっぱりなんです(´д`;
よろしくお願いします。

40 : :03/12/09 16:21 ID:???
‘次の結果→’にはさまれてる‘<b></b>’の中を取得。
オジーオズボーン単車で事故ったって。

41 :36:03/12/09 16:36 ID:???
すいません、本屋行っててレス遅れました
>>37さんのをちょっとだけテストさせていただいたところ
どうやら期待通りに動いてくれているようです。
それぞれ何をしているのかを調べながら、テストを重ねさせていただきたいと思います
>>38さんの方は返ってくる値が、>>36で質問した
「今回ぼくがやりたいこと」とは期待していたものとは違ったんですが、
最終的にやりたいことが、
「後々入力されたほかのデータが、登録されているサイトのサーバー上にあるか、
 というか、
 そのサイト上のデータかどうかを調べる」
ということがしたかったので、ユーザーIDの自分の中での定義など、
なにか考え直す必要があるような無いような、そんな感じがしました。
・・何が言いたいのが良くわかりませんし、やたら長文で読みにくいと思いますが、
兎に角何がいいたいかといいますと、

本当に有難うございました。

42 :nobodyさん:03/12/09 16:39 ID:???
timeで時間を取得して3の倍数の分なら処理をしようとしたんですが、ググッて調べた
下の書き方だとエラーが出てしまいます。どこか間違ってるんでしょうか?

if ($min =~ ^(\d+)(?(?{$1 % 3})(?!))$){


43 : :03/12/09 16:41 ID:???
正規表現を使おうとしてるところ?

44 : :03/12/09 16:45 ID:5gjkqVTX
>>35
それを言っちゃあおしめえよ。

45 :nobodyさん:03/12/09 17:51 ID:???
>>43
正解

46 :nobodyさん:03/12/11 14:45 ID:jBSAkNSo
テキストファイル中で「$replace[XXXXX]」となっている部分を
「XXXXX.html」に置き換えるような処理はどうすればよいでしょうか?
XXXXXが可変です。


47 :nobodyさん:03/12/11 14:52 ID:???
大括弧の中を取得して、それに.htmlを付加すればOK。

48 :nobodyさん:03/12/11 15:00 ID:???
>>46
さあ、添削してやるから書いてみれ。

49 :46:03/12/11 15:14 ID:jBSAkNSo
一応でけました。
初心者なんで、最適化も何もない&さっき質問したのと話がちょっと違うけどお願いします。
文字列に含まれる$img[XXXXX]の中身XXXXXを関数に渡して、その処理結果で置き換える、ということです。

$test = 'aaa <a href="test.pl"><img src="$img[test1]"></a><img src="$img[test2]">';
$test =~ s/(\$img\[)(\w+)(\])/func($2)/ge;
print $test;

sub func{
local($id)=@_;
if($id eq "test1"){
return "test1が渡されたよ";
}
return "test2が渡されたよ";
}


50 :nobodyさん:03/12/11 15:38 ID:???
>>49
おおう、いいんじゃない。前後はカッコ要らんけど。
$test =~ s/\$img\[(\w+)\]/func($1)/ge;

51 :nobodyさん:03/12/11 21:09 ID:???
>>42
if ($min =~ /^(\d+)(?(?{$1 % 3})(?!))$/){

=~の右辺は正規表現だから、m/正規表現/、その省略形、/正規表現/

52 :nobodyさん:03/12/11 21:11 ID:???
むむ?=~はパターンマッチ…

53 :nobodyさん:03/12/14 11:28 ID:9SKP9sfi
http://cgupload.dyndns.org/~upuser/up2/imgboard.cgi
ここの2ページ以降の正規表現おしえてください

54 :nobodyさん:03/12/14 12:18 ID:???
その内容を要約してここに書きなさい。

55 :nobodyさん:03/12/14 12:19 ID:9SKP9sfi
>>54
http://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・



56 :nobodyさん:03/12/14 12:29 ID:9SKP9sfi
あまちがえた ここ

http://cgupload.dyndns.org/~upuser/up2/imgboard.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・


57 :nobodyさん:03/12/14 12:53 ID:???
ここは正規表現のスレです。
激しくスレ違い >>53 >>55 >>56

58 :nobodyさん:03/12/14 12:55 ID:???
POSTも知らない厨房が紛れ込んだスレはここですか?

59 :nobodyさん:03/12/14 12:57 ID:9SKP9sfi
>>57
>>58
うっせーハゲども
教えれば委員だよおしえれば
シネヤ

60 :nobodyさん:03/12/14 12:59 ID:???
スレ違いだというのに真っ赤な顔をして書き込んでいる厨房がいるスレはここですか?

61 :nobodyさん:03/12/14 13:01 ID:9SKP9sfi
>>60
してねーよ妄想野郎

62 :nobodyさん:03/12/14 13:02 ID:???
正規表現に関係ないのに教える訳にもいかんだろーが…

63 :nobodyさん:03/12/14 13:05 ID:???
しょーがねぇな…

◆HTML講座(Web製作板)
http://pc2.2ch.net/test/read.cgi/hp/1010398268/


64 :nobodyさん:03/12/14 13:10 ID:9SKP9sfi
>>63
そこでおしえてくれ

65 :初心者:03/12/15 04:53 ID:llm//hKN
"@"という文字と"word"のどちらかにヒットする正規表現
が分からないのですが、[@]wordではないし、どうなるのでしょうか。

66 :nobodyさん:03/12/15 05:33 ID:???
>>65
ちみはスレタイも読めないのか?

67 :nobodyさん:03/12/15 06:14 ID:???
正規表現の質問なんだから間違ってはいないだろう。

68 :nobodyさん:03/12/15 09:03 ID:???
67=65

69 :68:03/12/15 09:05 ID:???
xorなら話変わるか。
なんで正規表現でやる必要があるのかよく分からんが。

70 :nobodyさん:03/12/15 10:25 ID:8LAW+/sT
>>65
一つの正規表現に拘る必要はないと思うが、、、?
条件分岐だとして例えば
if($key_word=〜/@/ || $key_word=〜/word/){〜以下実行文
では駄目なのかな?

71 :nobodyさん:03/12/15 10:31 ID:???
Read Only Memory : 書き換え不可の記憶媒体。
Read Only Member : 書き込まない利用者。

72 :nobodyさん:03/12/15 10:59 ID:???
>>70
わからないなら書かなくていいから

73 :nobodyさん:03/12/15 14:28 ID:???
>>65
(@|word) とか。
なんでみんなどの言語で実装するか書かないのだろう?

74 :nobodyさん:03/12/15 14:41 ID:???
それはどちらにもヒットする正規表現では。

75 :nobodyさん:03/12/15 23:09 ID:8LAW+/sT
>>75
 70は間違ってはいないよ、不充分かも知れんが。
 そもそも65の質問がどういうシチュエーションでどういう動作の目的でどういうマ
ッチングをさせたいのかを詳細に述べていないという不充分な訊き方なので、70のよ
うな「充分用を足すかどうかは保証の限りではない」当たり障りのない答えが返って
きても当然だと思うが。
 70の記述で取り敢えず「@」「word」が含まれていれば、その含まれている最初
の箇所マッチする。 複数含まれていて、それを全てマッチさせるのか、n回目まで
マッチさせるのかなどでオプション等の補助的記述が必要になって来るし、「含まれ
ている」ではなく「その単語そのもの独立だけに厳密マッチ」させるのならが、また
違う話になってくる、それをイチイチ説明していたら解説書になってしまう、それは
自分で読んでくれってことになる。

76 :nobodyさん:03/12/16 09:10 ID:???
なんだ?こいつ。

77 :nobodyさん:03/12/16 13:37 ID:???
>>76
アホは放置で。

78 :nobodyさん:03/12/16 16:12 ID:???
不十分とか言う以前に正しい記述をしろってーの

79 :nobodyさん:03/12/16 17:08 ID:???
>>78
>>75 は、元の質問が十分じゃないので正しい記述は不可能、と言いたいのだろう。
だが、アホなので放置で。

80 :nobodyさん:03/12/18 18:53 ID:zzUoxnBB
小数点を含まない数値にマッチさせるパターンを教えて下さい。

X25.125
X12.1
X78.
でなく
X25
X789
にマッチさせたいんです。 
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。


81 :nobodyさん:03/12/18 18:57 ID:???
>>80
> X25.125

Xとか入ってるけど,これって数値か?

82 :nobodyさん:03/12/18 19:01 ID:???
>>80
(.+?)\.

83 :nobodyさん:03/12/18 19:11 ID:zzUoxnBB
スミマセン
Xは無視してもらっていいです。

84 :nobodyさん:03/12/18 19:27 ID:???
perlの正規表現なんですが、
$hoge = "a(b(c))";
の時に、$hoge =~ m/(.*)\((.*)\)/
とすると、$1は"a(b"で、$2は"c)"になりました。
つまり文末から見ていることになるのですが、これを
$1は"a"で、$2は"b(c)"になるようにするにはどうすればいいでしょうか。
よろしくお願いします。

85 :nobodyさん:03/12/18 19:36 ID:???
>>84
それは文末から見ているんじゃない。. は ( も含むから
最初の .* が一番長くマッチできるところまで取り込んでいるだけ。

/([^)]*)\((.*)\)/ か /(.*?)\((.*)\)/ かこの辺↓参照。
http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen

86 :nobodyさん:03/12/18 20:29 ID:???
>>80は普通に
[0-9]+
じゃない?
全体なら^$つけるとか。

87 :nobodyさん:03/12/18 20:34 ID:???
同意

88 :nobodyさん:03/12/18 21:08 ID:zzUoxnBB
[0-9]+ ですと
例えば
10.
10.01
10
のうち、全ての"10"を拾います。 上記3つの数値のうち小数点を含まない
10(3つ目)のみにマッチさせたいんです。


89 :nobodyさん:03/12/18 21:11 ID:???
>>88 -> >>86

90 :nobodyさん:03/12/18 21:42 ID:???
>>88
>全体なら^$つけるとか。
^[0-9]+$

91 :nobodyさん:03/12/19 06:15 ID:z9mYPuUz
ところが全て行末ではないんです。


92 :nobodyさん:03/12/19 08:15 ID:tSEWBAlW
$perl -pe 's/(?<![\.\d])(X\d+)(?![\.\d])/##$1##/g;' >>80

小数点を含まない数値にマッチさせるパターンを教えて下さい。

X25.125
X12.1
X78.
でなく
##X25##
##X789##
にマッチさせたいんです。 
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。

93 :39:03/12/19 10:20 ID:???
今頃ですが・・・
自力で検索したサイトは難しい所ばかりだった気がしたのですが、
>>1のリンク先を一通りち回って、今回は何とかなりました。
たぶん答えるのもアホらしい低レベルな質問だったんでしょうね。
スレ汚し失礼しました。


94 :nobodyさん:03/12/19 13:04 ID:???
>92 いいかげんにしろやカス

95 :nobodyさん:03/12/19 16:38 ID:???
>>92
おらよ。
/(?:^|[^\d\.])(\d+)(?:[^\d\.]|$)/

96 :nobodyさん:03/12/19 23:48 ID:???
/(?:^|[\d\.])([1-9]\d*)(?:[^\d\.]|$)/

97 :nobodyさん:03/12/21 14:45 ID:???
>>92
お前さんのレベルじゃ,
込み入った正規表現に手を出すのはまだ早いんじゃないか?
とりあえずわかりやすい代替手段でも使っておけ。

my $f = 'fs4.5s5d.af56.156asd';
my @res = ();
foreach ( split(/[^\d.]/, $f) ){ push( @res, $_ ) if(/^[\d]+$/); }
if(! scalar(@res) ){ print "no match!\n"; }
elsif( scalar(@res) > 1 ){ print "too much match!\n"; }
else{ print "matched:[$res[0]]\n"; }




98 :nobodyさん:03/12/21 23:40 ID:qD9UdeKR
[サッカー][蹴球]96 ATLANTA OLYMPIC BS1総集編 日本1-0ブラジル 前園 カヌー オルテガ [110m08s DivX5].avi dgju9h3hNw 731,862,992 53de508adb8dc5d557c4d83efde22799
nyのキー情報(↑みたいなの)を正規表現で表すことできますかね?

ダウソ板のスレを全部取り込んで、
キー情報だけ抜き出してリストを作りたいです。

99 :nobodyさん:03/12/22 00:11 ID:???
「みたいの」ってのが無理。

100 :a:03/12/22 01:56 ID:???
>>98
もっとわかりやすく説明しろボケ

101 :nobodyさん:03/12/22 02:02 ID:???
いいから放置しとけ

102 :nobodyさん:03/12/23 15:26 ID:???
YahooXXXX.bbtec.net
からも
xxx.xxxx.ap.so-net.ne.jp
からもプロバイダ名を抽出させる方法を教えてください。

103 :nobodyさん:03/12/23 18:11 ID:???
(\S+\.)?\S+\.[a-zA-Z]{2}[a-zA-Z]{2}

(\S+\.)?\S+\.[a-zA-Z]{3}

俺にはこんなものしか思いつかねーよ

104 :nobodyさん:03/12/23 19:52 ID:???
>>102
ASAHIネットは www.ne.jp というホスト名を持っているわけだが、
ここからASAHIネットだと特定できる文字列をどうやって抽出しようかねぇ?

/
  (?:
    ([0-9A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # 3rd LD
    \.
  )?
  ([0-9A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # 2nd LD
  \.
  ([A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # TLD
  \.?$
/x

105 :nobodyさん:03/12/24 10:46 ID:???
>>102
常にドメイン名からプロバイダが抽出できると信じている時点でダメ。

106 :nobodyさん:03/12/24 14:10 ID:???
「ISP名」ではなくて、XXXXX.XXX.XXX.2ch.netの
2ch.netを取得したいと仮定して答えても問題ないかな?

107 :nobodyさん:03/12/24 18:42 ID:???
>>106
とりあえずそれでいってみよー

108 :nobodyさん:03/12/24 21:51 ID:???
>>106
いいっすよ!

109 :nobodyさん:03/12/25 19:44 ID:???
適当に答えてみる。
[-0-9a-zA-Z]+.[-0-9a-zA-Z]+$
多分[-0-9a-zA-Z]じゃ足りないけどよく分からないので。識者よろ

110 :nobodyさん:03/12/25 19:55 ID:???
適当すぎて・・・・・・・・・・・・・

111 :nobodyさん:03/12/25 20:51 ID:???
>>109
<q cite="http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt">
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
</q>
=> >>104

112 :nobodyさん:03/12/25 21:14 ID:???
hogehoge.XXX のように.の後が3文字なら
後ろから二つ目の.まで
hogehoge.ne.XXのように.の後が2文字なら
後ろから三つ目の.まで
.XXXのXがすべて\dならIPアドレスということで全部

とでもしておけばいいんじゃない?適当すぎですが

113 :nobodyさん:03/12/26 00:26 ID:???
>>112
汎用 JP ドメインなんてのもあるがな。

114 :nobodyさん:03/12/26 01:23 ID:???
>>112
適当どころじゃないわな

115 :nobodyさん:03/12/26 13:51 ID:icJ7Wsig
#!/usr/bin/perl
$_ = << "EOD" ;
<test>
<test2>abc</test2>
</test>
<test>
<test2>def</test2>
</test>
EOD
/(<test>.+<\/test>)/s ;
print "$1\n" ;

テキスト中にある<test>文字列</test>を抽出したいと思ってるんだけど、
結果はこうなってしまう。
<test>
<test2>abc</test2>
</test>
<test>
<test2>def</test2>
</test>

結果はこうなって欲しい。
<test>
<test2>abc</test2>
</test>
こんな事も試したけどうまくいかず・・・
/(<test>(?!<test).+<\/test>)/s ;
何方か、お助け。


116 :nobodyさん:03/12/26 13:56 ID:???
>>115
.+?

117 :nobodyさん:03/12/27 16:00 ID:???
〜〜[hoge]〜[foo]〜〜〜[bar]〜〜[moge]〜

のような感じのテキストで[hoge]以外の[と]で囲まれている部分を消して

〜〜[hoge]〜〜〜〜〜〜〜

のようにしたいのですが、hoge以外の場合マッチという方法が思いつきま
せん。[^hoge]で無いことは確かなんですが・・。
文字列の否定の方法をどなたか教えてくださいませ。

118 :nobodyさん:03/12/27 17:39 ID:???
>>117
s/\[(?!hoge)[^\]]*\]//g;
http://www.din.or.jp/~ohzaki/regex.htm

119 :117:03/12/27 17:54 ID:???
>>118
どうもです。

120 :初心者スレ902,904:03/12/29 16:56 ID:???
Perl コーディング初心者質問コーナー Part30
http://pc2.2ch.net/test/read.cgi/php/1069846177/902-
こちらから誘導されてきました。
再度質問を書きます

あるスクリプトで

my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
$FORM{'FROM'} =~ s/($check)(?: | )+$/$1/g;

というのがあったのですが、"?:"というのはどういう意味なんでしょうか?
(このスレでも"?:"という表現が使われていますね)

ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
ここも見てみたのですが、いまいち意味が分かりませんでした。
教えてもらえると助かります。

121 :初心者スレ902,904:03/12/29 17:03 ID:???
わざわざ誘導されてきたのにすみません。自己解決しました。
ttp://www.kt.rim.or.jp/~kbk/regex/regex.html#GROUPING_NOBR
ここを読んだら分かりました。

122 :nobodyさん:03/12/31 18:09 ID:9hwbEMBW
rubyで
/#{str1}/.match(str2)
としたときstr1のメタ文字を通常の文字としてマッチさせたいのですがどうしたらいいですか?

123 :nobodyさん:04/01/01 00:08 ID:???
>>122
Regexp.escape(str1) か Regexp.quote(str1)

124 :nobodyさん:04/01/01 00:51 ID:???
>>123
thx

125 :nobodyさん:04/01/07 22:03 ID:3+H2s8ZL
<dt>[名無し]さん(bin+cue).rar<>sage<>03/12/30 00:57 ID:St9M3KSl<dd>2 <br>
<dt>クソスレみっけ<><>03/12/30 00:57 ID:o9NEl4Ao<dd>じしんないから3で <br>

とあって、空タグの<>間にある文字列を

<dt><a href="mailto:sage">[名無し]さん(bin+cue).rar</a> 03/12/30 00:57 ID:St9M3KSl<dd>2 <br>
<dt><a href="mailto:">クソスレみっけ</a> 03/12/30 00:57 ID:o9NEl4Ao<dd>じしんないから3で <br>

のように<a>に内包させたい場合どうしたらよいでしょうか
テキストエディタは秀丸を使っています

126 :nobodyさん:04/01/07 22:21 ID:???
>>125
置換ダイアログで
検索: <dt>\f[^<]*\f<>\f[^<]*\f<>
置換: \0<a href="mailto:\3">\1</a>

127 :125:04/01/08 00:00 ID:???
>>126
どもです、バッチリでした
もすこし勉強してきま

128 :nobodyさん:04/01/08 11:30 ID:A5R/iNdF
PHPでHTMLを埋め込める掲示板スクリプトを作ってますが

<…>となっている不等号はHTMLタグとみなして、そのままにしておき
それ以外のHTMLタグとみなせない不等号を&lt;と&gt;に置き換えて
HTMLタグ内にない”と&をそれぞれ&quot;と&amp;に変換するように
正規表現を書きたいのですが色々書き直して試してますが
思い通りに動作しなくて困ってます。
どのように正規表現を書けばよいか知恵を貸してください。お願いします。

<…>の形になってない不等号を&lt;と&gt;に置き換える作業は今は
以下のようになってます。

$message = @ereg_replace("<(([^>]|\n)*)<", "&lt;\\1&lt;", $message);
$message = @ereg_replace("<(([^>]|\n)*)", "&lt;\\1", $message);
$message = @ereg_replace("(([^<]|\n)*)>", "\\1&gt;", $message);


129 :nobodyさん:04/01/09 07:37 ID:???
>>128
preg使えよ…

130 : ◆MbpwKgPmhw :04/01/13 18:01 ID:???
$ENV{'USER_AGENT'}で得られる文字列から、ブラウザ名とバージョンを抜き出す関数を作っています。
正規表現のせの字もわからんような状態から何とかあちこち検索かけてここまで作りました。
しかし、まだ正規表現のありがたみが足りない気がして、不満です。
よければもっと要約できる点、あるいは不備な点の指摘をお願いします。ちなみに、書き込みのためにここでは全角でインデントいます。コピペの際にご留意下さい。
#-----------------------#
# UA一般名化         #-----------------------------------------------------#
#-----------------------#
# 引数は、($ENV{'USER_AGENT'})
sub envUa2uaName{
 my ($UA) = $_[0];
 if($UA =~ /MSIE/){
  $UA =~ s/(.){0,}MSIE ([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/InternetExplorer $2/;
 }
 elsif($UA =~ /Opera/){
  $UA =~ s/(.){0,}Opera(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Opera $3/;
 }
 elsif($UA =~ /Safari/){
  $UA =~ s/(.){0,}Safari(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Safari $3/;
 }
 elsif($UA =~ /Netscape/){
  $UA =~ s/(.){0,}Netscape(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Netscape $3/;
 }
 elsif($UA =~ /Firebird/){
  $UA =~ s/(.){0,}Firebird/Firebird/;
 }
 elsif($UA =~ /^Mozilla/){
  $UA =~ s/Mozilla\/([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Mozilla $1/;
 }
 $UA =~ s/([a-z A-Z 0-9]{0,})\/([0-9]{1,}(\.){0,}[0-9]{0,})/$1 $2/g;
 return $UA;
}

131 :130 ◆MbpwKgPmhw :04/01/13 18:02 ID:???
>>130 =~ s/インデントいます/インデントしています/;

132 :nobodyさん:04/01/13 18:12 ID:???
DoCoMoは?

133 :nobodyさん:04/01/13 18:53 ID:???
>>132

( ゚д゚)ハッ!
そう言えば忘れてました・・・

134 :nobodyさん:04/01/13 19:00 ID:???
j-phoneとvodafoneとauも忘れないでね。

135 :130 ◆MbpwKgPmhw :04/01/13 19:03 ID:???
>>134
サンプルデータが無い・・・・
UAが分からないと正規表現の書きようがない・・・

136 :nobodyさん:04/01/13 19:07 ID:???
そんなものいくらでもころがってるだろう

137 :130 ◆MbpwKgPmhw :04/01/13 19:08 ID:???
>>136

スマソ

138 :nobodyさん:04/01/13 19:46 ID:???
ちなみに俺はWin2000&IE6だが、UAはMozilla/5.0 (Macintosh; N; PPC; en-US; m18) Gecko/20000929 Netscape6/6.0b3となってる。

139 :130 ◆MbpwKgPmhw :04/01/13 20:13 ID:???
>>138

環境変数をイジってる人のまでは対応仕切れないのでそれはそのまま表示します・・・。

140 :未承諾広告※ ◆aiY4htt2.2 :04/01/13 21:12 ID:???
UA なんて偽装し放題なんだからそれからブラウザ名を判定しても何の有り難みもねーよ。

と聞こえてくるのは幻聴でしょうか。。。

141 :nobodyさん:04/01/13 22:04 ID:???
俺にはドリキャスのうめき声が聞こえる。。。

142 :nobodyさん:04/01/14 08:50 ID:???
そういえばpipin@はまだ生き残ってるのか?

143 :nobodyさん:04/01/15 16:48 ID:???
$text = "正規表現で、or にあたるものはないでしょうか? ";
mb_ereg("正規表現|ない|or|しょう",$text);
//"|" は二つだけですよね?

こんな感じで、複数の文字列にヒットする方法を知りませんか?
eregでもpreg_matchでもどちらでも可能であれば教えて下さい。

144 :nobodyさん:04/01/15 17:23 ID:???
H"は?

145 :nobodyさん:04/01/15 17:32 ID:???
>>143
意味不明

146 :nobodyさん:04/01/15 19:03 ID:???
>>143
preg_match('(正規表現|ない|or|しょう)', $text);

147 :nobodyさん:04/01/15 19:56 ID:???
>>143
そのコードのままでは意図通りに動いてないの?

148 :nobodyさん:04/01/15 21:38 ID:Z1eTG8w5
210.153.84.0/24 とか 210.134.83.32/27 とかの表記での
アクセス制限はPerlではできないかと思いますが、
これらを正規表現にてなんとか綺麗にかけないもの
でしょうか。

もしも良い案がございましたらご教授ください。

149 :未承諾広告※ ◆aiY4htt2.2 :04/01/15 21:42 ID:???
>>148
&

150 :nobodyさん:04/01/15 21:44 ID:???
>>148
サブネットマスクで表すアドレス範囲がわかれば簡単なことだろ

151 :nobodyさん:04/01/16 04:47 ID:???
>>149
たった一文字なのに的確なマジレスだな

152 :nobodyさん:04/01/16 17:53 ID:???
空行の上の1行にマッチするということは、正規表現でできますか?

あいうえお\r\n
かきくけこ\r\n
\r\n
さしすせそ\r\n
たちつてと\r\n
naninuneno\r\n
\r\n
歯皮膚へ補\r\n
\r\n

かきくけこ\r\n、naninuneno\r\n、歯皮膚へ補\r\nにマッチして欲しいんですが・・・。

153 :nobodyさん:04/01/16 20:31 ID:???
>>152
([^\n]+\n)\r\n
\1とか$1で参照で出来ると思う。

154 :nobodyさん:04/01/16 20:49 ID:???
こんなんは動きませんか。perl。
(?:\n?)[^\r\n]+\r\n(?=\r\n)

155 :未承諾広告※ ◆aiY4htt2.2 :04/01/16 22:03 ID:???
\b(.+?)\r\n\r\n
手抜きかも。。。

156 :nobodyさん:04/01/16 22:45 ID:???
/(.+?¥x0D?¥x0A)¥x0D?¥x0A/gs

157 :152:04/01/17 00:12 ID:???
>>153-156
皆様、レスありがとうございます。

空行の上の行を取得できました。
勉強不足でした、精進します。
ありがとうございました。

158 :nobodyさん:04/01/18 20:18 ID:???
PHPで、
「(文字列 ほげ か、文字列 ふが)が先頭にある文字列以外にマッチする」という正規表現はどのようにすれば記述できるでしょうか?
/(([^ほ][^げ])|([^ふ][^が])).*/
かと思ったのですが、違うようです……

159 :nobodyさん:04/01/19 00:42 ID:???
>>158
逆に、「〜にマッチしなかったら」という処理にした方が楽。

160 :nobodyさん:04/01/19 14:48 ID:UUNY3/Bm
perlですが、
$domainにドメインが入っていて、(仮にyahoo.co.jp)
$hogeに入力されたURLが入っているときに
$hogeがルートディレクトリから2つ以上掘り下げた場所にあるファイルのURLなら、ある処理をする
ということをしたいのですが、頭の中ではまとまっていてもどのようにすればいいのかが・・。
ちょっと解りにくいと思うので、具体的に$hogeが何ならokで何ならNGかを↓
http://yahoo.co.jp/
http://yahoo.co.jp/xxx
http://yahoo.co.jp/xxx/
http://yahoo.co.jp/xxx/top.html
× http://yahoo.co.jp/xxx/yyy/
× http://yahoo.co.jp/xxx/yyy/zzz/...../foo.html


こんな感じです。
ネックとしてはディレクトリの時「/」をつけてる場合とそうでない場合がある。
index.htmlなどを書く場合とそうでない場合がある。
というところでしょうか。

で、マッチした場合に処理するという形で考えてるんですが、
if ($hoge =~ /^https?:\/\/\Q$domain\E\/([^\/]+)\/※/) { 処理 }
※の部分にスラッシュがあるか、なくてもドットがなければマッチ
という風にすればいけるのかな?などと考えているのですが、
どのように書けばよいのかが解りません。また本当にそれで実現できるのかも「?」です。
わかりにくい質問だとは思いますが、教えていただけませんでしょうか。

161 :nobodyさん:04/01/19 15:22 ID:???
>>160
厳密なこと言うと /xxx/yyy がディレクトリかファイルかは、
実際にその URL にアクセスしてみないとわからないので、
どっかで妥協しないといけないと思う。

で、 >>160 のような前提でマッチするとするなら、こんな感じかな。
$hoge =~ /^https?:\/\/$domain\/([^\/]+)\/([^\/]+\/|[^\/\.]+$)/

162 :nobodyさん:04/01/19 15:33 ID:???
>>161
有難うございます。確かに厳密にはそうですが、まぁここではそこまで突っ込まないことにします。
で、少し書いていただいたソースでテストしてみましたが、おそらく期待通りのようです。
後でまたテストしてみます。有難うございました。

163 :158:04/01/20 00:19 ID:???
>>159
プログラム自体が「設定ファイルに記述した正規表現(のリスト)にマッチしたら」っていう処理なんで、
>逆に、「〜にマッチしなかったら」という処理にした方が楽。
とは分かってるんですが、何とかならない物かと。

……あや、PHPでも '?!' は使えるのか。ってことは、
/^(?!ほげ).*/
で、「文字列 ほげ が先頭にある文字列以外にマッチ」になるのか?
としても、
/^((?!ほげ)|(?!ふが)).*/
じゃないよなぁ……。


164 :nobodyさん:04/01/20 03:08 ID:???
boolを反転させればいいだけ。正規表現使う必要も無し。

165 :nobodyさん:04/01/20 03:48 ID:???
>>163
何の設定ファイルか興味津々。

166 :nobodyさん:04/01/20 04:05 ID:???
>>163
アホですか?

167 :nobodyさん:04/01/20 08:28 ID:???
アホって言うか、いわゆる初心者ってやつです。おまけに自分で調べない、人に聞くことしか出来ないときてますから手に負えません。

168 :nobodyさん:04/01/20 17:57 ID:???
みたこと無い人はPHP質問スレをちらっと訪れてみることをお勧めします。
長期滞在は精神衛生上よろしくありませんので、あくまでピーピングってください。

169 :158:04/01/21 03:02 ID:???
>>164-166
申し訳ないです。数時間色々試して、「正規表現でそういうのは無理」
と思いつつもつい、知ってる人がいれば良いな程度に書き込んでしまいました。
(「無理」って思ったんなら諦めろよ、俺。)

処理の方いじってみる事にします。(とりあえず、当面質問スレには出向かない方向で。)
ありがとうございました。

170 :nobodyさん:04/01/21 06:51 ID:???
(「無理」って思ったんなら諦めろよ、俺。)

気持ち悪いです。

171 :nobodyさん:04/01/21 07:45 ID:???
気持ちいいです。

172 :nobodyさん:04/01/21 15:39 ID:???
>>169
preg_match('/(?:(?!^(foo|bar)).)*/', $str, $arr); if ($arr[0]) do;

これが正規表現でやることか?
つーか>>1のサイトくらい見ろよハゲ

173 :nobodyさん:04/01/25 15:45 ID:???
perlを使っています。
<a href="#epigraph">▲</a> <a href="#D_20040124">▼</a>
を、
<a href="#D_20040124">▲</a> <a href="#epigraph">▼</a>
と、属性値だけ入れ替えるにはどうしたらよいのでしょうか?(属性値は可変です)

正規表現は苦手で、いくら考えても判らなかったので……。

174 :nobodyさん:04/01/25 16:16 ID:???
/(<a href="\#)([^"]+?)(">▲<\/a> <a href="\#)([^"]+?)(">▼<\/a>)/$1$4$3$2$5/gi

こういうことなんかな? 意図がわからんからめちゃくちゃ適当なんだが。

175 :nobodyさん:04/01/25 16:27 ID:???
>>174
できました! そっか、こういう風にすれば良かったのか……。
今度からは自分でできるように、正規表現についてしっかり勉強しようと思います。
ありがとうございました。

176 :nobodyさん:04/02/03 02:35 ID:dCMf0k2c
ホッシュ

177 :nobodyさん:04/02/09 22:07 ID:9171cO3S
IPアドレスの正規表現で
a.b.c.d/8
とか
a.b.c.d/32
ってどういう意味なんでしょうか?
誰か教えてください…

178 :nobodyさん:04/02/09 22:12 ID:???
>>177
正規表現じゃなくてサブネットマスクだろ
ぐぐれ

179 :nobodyさん:04/02/10 18:53 ID:???
めっちゃ簡素な質問で申し訳ないのだが、
PerlでHTMLタグを取り除く処理を行う場合、

s/<.*?>//g;
と書いている場合と、
s/<[^>]*>//g;
と書いている場合がありますよね?
大抵のところで「<.*?>は遅い」とかかれているのですが、
実際どれくらい処理効率が違うのでしょうか

180 :nobodyさん:04/02/10 18:56 ID:???
すみません、すごく初歩的な質問なんですけど、
いくつか並んだ単語の中の、真ん中の単語だけを検索するには
どういう正規表現を使ったら良いのでしょうか?

<item name="アニメA.Aスレッド 13th session " category="AA" board="AAサロン"
<item name="アニメA.Aスレッド 12th session " category="AA" board="AAサロン"
<item name="アニメA.Aスレッド 11th session " category="AA" board="AAサロン"

と並んでいるもののうち、【アニメA.Aスレッド xxth session】だけを検索したいのですが可能でしょうか?

いろいろ検索しつつ試行錯誤をしていますが、どうしても分かりません。
どなたかいらっしゃいましたら、教えて頂けないでしょうか?

181 :nobodyさん:04/02/10 20:26 ID:???
>>179
自分でベンチマークしてみる

>>180
21st 22nd 23rd ってことになるかな?

182 :nobodyさん:04/02/11 05:51 ID:???
/アニメA.Aスレッド [0-9]{2}th session/

183 :nobodyさん:04/02/11 21:58 ID:???
coffeeとかballoonみたいに、
3・4文字目が同じ、5・6文字目が同じような単語をマッチさせる正規表現を教えていただけませんか?

○×△△□□ みたいな形式。1・2文字目はなんでもOK。7文字目以降に何がきてもOK。

sedでおねがいします。

184 :nobodyさん:04/02/11 22:18 ID:???
/..(.)\1(.)\2/

185 :nobodyさん:04/02/11 22:24 ID:???
それtってPerlじゃないんですか・・・?

186 :nobodyさん:04/02/11 22:33 ID:???
/..\(.\)\1\(.\)\2/

187 :nobodyさん:04/02/12 01:00 ID:???
>>185
あんたは何処の誰

188 :nobodyさん:04/02/12 01:23 ID:???
サンタはホモのひげ

189 :nobodyさん:04/02/12 01:38 ID:???
/^(..(.)\2|...(.)\3)/

こうか?

190 :nobodyさん:04/02/12 02:26 ID:???
coffee
tattoo
balloon
saccees

あたりがひっかかればいいのか?

191 :189:04/02/12 02:40 ID:???
すまん、質問文全体的に読み間違えてた。。。

/^..\(.\)\1\(.\)\2/

でいいんじゃない?

192 :nobodyさん:04/02/12 02:44 ID:???
ありがとうございます。
Perlで\1とかが使えるのは知ってたのですが、sedでもつかえるとは思って無かったです。

ぶしつけがましいかもしれませんが、Perlで!~と表される「マッチ以外」を
sedで実装するにはどうすればいいのでしょうか。

実は今回初めてsedというものに触れることになったもので・・・
Perlみたく正規表現が使える、というのは知ってたのですが仕様が違うらしくうまくいかなくて・・・

193 :nobodyさん:04/02/12 02:57 ID:???
>>192
>>1 の正規表現メモを見れ。

194 :nobodyさん:04/02/12 16:51 ID:???
>>192
!

マニュアルは死んでも見ない主義か?

195 :nobodyさん:04/02/12 23:51 ID:???
PHPで2chのスレッドURLの正規表現(ereg)は
http://(.)+\.2ch\.net/test/read\.cgi/(.)+/[0-9]{10}/
これでいいですか?
もうちょっとスマートなのあればお願いします。

196 :nobodyさん:04/02/13 04:16 ID:???
↑キター


197 :nobodyさん:04/02/13 17:14 ID:???
>>195
bbspink.comとmachi.toが抜けてるよ。
(.)はわざと?

198 :nobodyさん:04/02/13 17:38 ID:???
>>196>>197
ごめんなさい。素人なものでよくわからないのです・・・
任意の文字は、「(..)+」じゃないんでしょうか・・・
「.+」でいいですか?
http://(.+\.2ch\.net|.+\.bbspink\.com|.+\.machi\.to)/test/read\.cgi/.+/[0-9]{10}/
でいいでしょうか?
それと、Perlでは、10個の数字なら「\10d」でできたと思うのですが、PHPではできないみたいですね・・・

199 :195:04/02/13 22:04 ID:???
お騒がせしました。自分のダメダメでしたね。
http://([a-zA-Z0-9]+\.2ch\.net|[a-zA-Z0-9]+\.bbspink\.com|[a-zA-Z0-9]+\.machi\.to)/test/read\.cgi/[a-zA-Z0-9]+/[0-9]{10}/
これでOKですね。

200 :nobodyさん:04/02/14 02:42 ID:???
正規表現でどう書くのかと言っても目的によって変わる場合があるからな

201 :nobodyさん:04/02/14 12:38 ID:???
質問です。お師匠様よろしくお願いします。

次の文字列で、<!--from-->〜<!--to-->部分を除去する
正規表現が分からないです。

"あい<!--from-->か<>き<!--to-->うえ<!--from-->くけ<>こ<!--to-->お"
→「あいうえお」を取り出したい

自作の失敗正規表現
/<\!--from-->.*<\!--to-->//g
→「あいお」になってしまう。

202 :nobodyさん:04/02/14 12:46 ID:???
>>201
Perlなら最短マッチ
.*?

203 :nobodyさん:04/02/14 12:54 ID:???
>>202
よくばりを抑えることができました。
お師匠様ありがとうございました!


204 :nobodyさん:04/02/14 13:29 ID:???
>>202
最短マッチ
できないやつってあるの?

C++のboost::regexも出来たよ

205 :nobodyさん:04/02/14 13:50 ID:???
>>204
Perl4ダケダタ
スマソ

206 :nobodyさん:04/02/14 14:44 ID:???
>>205
*awkやsedにもねぇだろ。


207 :nobodyさん:04/02/14 14:47 ID:???
>>206
俺につっかからず
>>204に尾長居します

208 :nobodyさん:04/02/14 23:14 ID:???
置換でimgタグのalt属性だけを全て検出するにはどうすればいいですか
今は

$title =~ s/.*?( alt=\".*?\")*/$1/gs;
$title =~ s/alt="//g;
$title =~ s/"//g;

とやっていますが、効率が悪いと言われました。

209 :nobodyさん:04/02/14 23:29 ID:???
>>208
$title =~ s/.*? alt=\"(.*?)\"*/$1/gs;
ってことじゃないのか。


210 :nobodyさん:04/02/14 23:39 ID:???
>>209
それだと
alt="Alt属性値">

Alt属性値">
ですよね

211 :nobodyさん:04/02/14 23:43 ID:???
そんでしかも
alt属性値は複数ある可能性もあるんです(<img>タグの個数が分からないため)

212 :nobodyさん:04/02/14 23:49 ID:???
効率が悪いといわれた意味は、>>209じゃないかってことだ。
で、求めたいことをやるコードなら、今、プログラム板の
Perl質問箱でも答えたとこだが、
@title = ($_ =~ /.*? alt=\"(.*?)\"*/$1/g);
でよろしかろう。



213 :nobodyさん:04/02/15 00:04 ID:???
あー
ヒントを得られたので改変して自己解決しました。

$title =~ s/.*?alt=\"([^"]*)[^(alt)]*/$1/gs;

これでできました。
どうもありがとうございました。

214 :nobodyさん:04/02/15 00:09 ID:???
>>213
( ゚д゚)ハァ!?
ま、いいか

215 :nobodyさん:04/02/15 00:11 ID:???
>>213
それだと・・・
ま、、いいや

216 :nobodyさん:04/02/15 00:24 ID:???


何か問題があるんでしょうか・・・汗

217 :nobodyさん:04/02/15 00:28 ID:???


alt="〜"以降にaかlかtが含まれるとそれ以降がおかしな事に・・・

218 :nobodyさん:04/02/15 02:32 ID:???
このスレおもしろいな。

219 :nobodyさん:04/02/15 02:58 ID:P41SZm3C
例えば、こんな感じの文字列があって、
90020E68E8D0320A9028D14FF40AE7307BD5A8...
これに16文字ごとに00を挿入するにはどう書けばいいでしょうか?
こんな感じに出力したいのですが
0090020E68E8D0320A009028D14FF40AE730007BD5A8...
自分でチュートリアルみながらやってみたら
アホみたいに00で溢れてしまいました・・・

220 :nobodyさん:04/02/15 03:45 ID:???
>>219
具体的にどうやったのかの正規表現も書いておいた方が
誰かが教えてくれる気になってくれる率高いよ

221 :219:04/02/15 04:05 ID:???
恥ずかしすぎるのですが自分の晒します
$output =~ s/\(................\)/00\1/gs;


222 :nobodyさん:04/02/15 04:20 ID:???
$output = "90020E68E8D0320A9028D14FF40AE7307BD5A8";
$output =~ s/([0-9A-Z]{16})/\1xx/gs;
print $output;

00ができねー。

223 :nobodyさん:04/02/15 04:23 ID:???
$output = "90020E68E8D0320A9028D14FF40AE7307BD5A8";
$output =~ s/([0-9A-Z]{16})/00\1/gs;
print $output;

頭00つきで・・・。

224 :nobodyさん:04/02/15 04:24 ID:???
>>219
ああ、頭00でいいんだ〜。

225 :nobodyさん:04/02/15 04:29 ID:???
#Perlだけどこれではいかんでしょうか

$output =~ s/([0-9A-F]{16})/$1_/g;
$output =~ s/_/00/g;



226 :nobodyさん:04/02/15 04:40 ID:???
>>225
2度もやらなくたって>>223

227 :219:04/02/15 05:27 ID:???
みなさんありがとうございます
無事できますた

228 :>>208:04/02/15 09:16 ID:???
で、結局出来たんですが、これもちょっとまだ違う(属性名に「a」があるものがalt以降に出てくるとエラー)なので・・・

$title =~ s/.*?alt=\"([^"]*)[^a]*?/$1$2/gs;
$title =~ s/([^"]*).*/$1/gs;

「alt」っていう文字列が出てくるまで、ってどういう風に表現するんでしょうか・・・・
紹介された他のスクリプトは全て期待通りの動きをしませんでした

$title=<<END;
<h1><img src="./hoge.png" width="10" height="10" alt="alt属性値"></h1>
<div id="id">
テストaltテスト<br>
</div>
<h2><img src="./hoge2.png" width="10" height="10" alt="alt属性値2"><img src="./hoge3.png" width="10" height="10" alt="alt属性値3"></2>
<div id="id">
テストaltテスト<br>
</div>
END

これに正規表現をかけて、$titleの中身を

alt属性値alt属性値2alt属性値3

に出来ればかなり近いものになると思うんですが・・・・

229 :未承諾広告※ ◆aiY4htt2.2 :04/02/15 10:17 ID:???
print join '', $title =~ /alt="(.*?)"/g;

230 :nobodyさん:04/02/15 10:55 ID:???
@array = ($title =~ /<img[^>]+alt="([^>]*)"[^>]*>/g);


231 :nobodyさん:04/02/15 16:22 ID:???
/(ー_ー)/

232 :nobodyさん:04/02/16 14:35 ID:???
$_ = '_ _';

print 'ごめんなさい' if m(_ _)m;

233 : :04/02/21 11:23 ID:ZPsBKiYf
VBScriptでの正規表現についてご指導をお願いします。
私は↓のサイトで、サッカーの試合後に出される選手の採点をVBScriptを使って集計しております。
http://www.geocities.co.jp/SiliconValley-SanJose/8260/shukeihouhou040220/shukeihouhou.html

例えば、 「中田:6.5」というカキコを読み込むのに
re.Pattern = "([a-zA-Zぁ-んァ-ヶー−一-鶴]+)[  ;:;:…]*(10\.0|10|9\.5|9\.0|9|8\.5|8\.0|8|7\.5|7\.0|7|6\.5|6\.0|6|5\.5|5\.0|5|4\.5|4\.0|4|3\.5|3\.0|3|2\.5|2\.0|2|1\.5|1\.0|1|0\.5|0\.0|0)"
とパターンを設定しているのですが、
2つの問題に直面しております。

一つの問題は選手名の読み込みです。
漢字コードの設定がうまくないために取り込めない選手がいます。
今のところ、「黒部」が「部」になってしまうということが起きています。

もう一つの問題は点数の読み込みです。
採点では0.0〜10.0まで0.5刻みで点数を評価します。
それ以外の数字は無視しようと思うのですが、
3.14だと3と認識してような現象がおきているようです。


以前はjperlで認識させてまして漢字コードに関しては
[a-zA-Zぁ-んァ-ヶー−亜-腕弌-熙]+
でやってて問題は起きなかったですが、VBSでは無理なようです。
適当に文字コード表を開いたら漢字が一で始まって鶴で終わってたので
これを適用したら、そこそこうまくいったのですが、「黒」はだめなようで・・・

234 :nobodyさん:04/02/21 13:17 ID:???
第一水準漢字をUNICODE指定するんだったら、[一-龍]じゃない?
鶴のうしろに、
鷲 鷹 鷺 鹸 鹿 麓 麗 麟 麦 麹 麺 麻 麿 黄 黍 黒 黙 黛 鼎 鼓 鼠 鼻 齢 龍
これだけの文字が残ってるよ。

しかし、JScriptはUNICODEで範囲指定しなきゃならんのか……
あと、置換で面倒なことしてるとおもったら、trがないのか……
ドキュメントのRegExp.Execute()のところにSubMatchesコレクションの記述がまったくない……


235 :nobodyさん:04/02/21 14:01 ID:X1kd7Gnd
すんません。
$short = 'hoge++';
という場合に
$long = 'hogehoge++';
にマッチするかどうか判定するにはどうしたらいいですか。
if ($long =~ /$short/) {}
だと ++ の部分でエラーが出ちゃうです。

236 : :04/02/21 14:14 ID:ZPsBKiYf
>>234
ありがとうございます。「黒部」が読み込めました。
選手名はこれでいけたっぽいです。

>置換で面倒なことしてるとおもったら、trがないのか
どうなんでしょうね。おいらが探しきれなかっただけかも・・・

>RegExp.Execute()のところにSubMatchesコレクションの記述がまったくない
すいません、意味わかんないっす

237 :nobodyさん:04/02/21 14:17 ID:???
>>233
VBSは良く分からないけど、
(10|[0-9](\.[05])?)([^\.0-9]|$)
得点はこんな感じでどうでしょ。

>>235
Perlなら
if ($long =~ /\Q$short/) {}

238 :nobodyさん:04/02/21 14:20 ID:???
>>237
ありがとうございましたぁあああああああああ!!!!

239 : :04/02/21 15:28 ID:ZPsBKiYf
>>237
ありがとうございます。
しかしそれだと10.0が読み込めないようです。
(10\.0|10|[0-9](\.[05])?)([^\.0-9]|$)
こうすればいいのかな?

240 :nobodyさん:04/02/21 16:27 ID:???
>>239
いいんじゃない?

あと、
(10(\.0)?|[0-9](\.[05])?)([^\.0-9]|$)
こんなでも。

241 : :04/02/21 16:31 ID:ZPsBKiYf
>>240
dクス!!ありがとうございます。
これで解決です。

242 :nobodyさん:04/02/21 16:44 ID:TmSpuw1E
ひらがな、漢字、カタカナのみを
許可したい場合どうしますか?

if($FORM{'name'} =~ /\w/g) { &error; }



if($FORM{'name'} !~ /\W/g) { &error; }
if($FORM{'name'} =~ /[a-zA-Z0-9]/g) { &error; }

では、カタカナを受け付けなくなってしまい、


if($FORM{'name'} !~ /\W/g) { &error; }
if($FORM{'name'} =~ /[A-Z0-9]/g) { &error; }

だと、アルファベット小文字が使えてしまいます。

243 :nobodyさん:04/02/21 16:59 ID:???
>>242
文字コードどうしてる?

244 :nobodyさん:04/02/21 17:22 ID:???
>>243
すいません、書くの忘れました。
shift-jisとなっています。

245 :nobodyさん:04/02/21 17:42 ID:???
>>244
euc-jpで

246 :nobodyさん:04/02/21 18:04 ID:???
>>245
euc-jpぢゃないと無理ですか・・・
ありがとうございます。


247 :nobodyさん:04/02/21 21:32 ID:???
むりなもんか

248 :nobodyさん:04/02/21 21:49 ID:???
無理だっつーの
PerlはEUCじゃないとマルチバイトの処理できない

249 :247:04/02/21 21:54 ID:???
だ・か・ら、、、、

文字である以上、文字コードだろ?

文字コードは変動しないよな?

できるじゃん!

250 :nobodyさん:04/02/21 22:08 ID:???
>>249
jperlならな

お前のそのレスみてレベル低いと思った

>文字コードは変動しないよな?
↑特にこことか。


251 :247:04/02/21 22:20 ID:???
今、即席でつくってみたけど 例えばひらがなの場合こういうことだろ?

SJIS:ぁ \x82\x9f
SJIS:ん \x82\xf1

/^(?:\x82[\x9f-\xf1])+$/

なんでできないのか理由家! レベル低いかも知れんけどできるだろ?

252 :nobodyさん:04/02/21 22:23 ID:???
>>242
if ($FORM{'name'} !~ /^(\x82[\x9f-\xf1]|\x83[\x40-\x96]|[\x88-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/){ &error; }
こんなんでいい?
全角アルファベット数字と記号類も省くけど。

>>250
正しく正規表現書けば、Shift_JISでも処理できるよ。
Perl 5.8.xならencoding.pmがお勧めだけどね。
中の人はUnicodeで処理してるらしいけど。

かぶった?

253 :nobodyさん:04/02/21 22:23 ID:???
>>251
・・・
なんかもう、ね。
s/あ/ん/;
と普通にマルチバイト入れてやる場合のこと言ってるんだろ・・・
だれも文字コードでやれなんて言ってない

254 :nobodyさん:04/02/21 22:31 ID:???
>>253
perl 5.8.x以降限定だけど、

use encoding "shiftjis";
...
s/あ/ん/;

255 :247:04/02/21 22:33 ID:???
お前のそのレスみてレベル低いと思った

>PerlはEUCじゃないとマルチバイトの処理できない

↑特にこことか。

jperl とか言い出す始末。。。

256 :nobodyさん:04/02/21 23:00 ID:???
なんか、>>247って必死じゃね?
いや、いいんだけど、>>248と勝手に争ってくれ。
ここ、過疎スレだから、周り気にしないで争ってね、思う存分

257 :nobodyさん:04/02/21 23:20 ID:???
>>252
ありがとうございます。
Shift-Jisで、試してみたところ、
正常動作しているようです。

全角アルファベット数字と記号類も
省きたいと思ってたので助かりました。


258 :234:04/02/21 23:44 ID:???
>>236
すまん、意味不明なこと書いちゃった。

MSのWindows ScriptドキュメントでRegExpオブジェクトのヘルプリファレンス読んだんだけど、
RegExp.Execute()のところに、実行するとSubMatchesコレクションが生成されるって記述が
ぜんぜんないんよ。
てなわけで、SubMatchesコレクションの存在を知らなかった……_| ̄|○
(ふだんはBASP21コンポーネントのMatch()やReplace()を使ってるし)
SubMatchesってキーワードでヘルプを調べれば載ってるんだけどね。


259 :236:04/02/22 10:53 ID:???
>>258
そういうことっすか。
ちなみにつくるとき、ここを参考にしましたよ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting121399.asp

260 :nobodyさん:04/02/22 23:25 ID:kjGz/T2C
「注目に値[あたい]する特徴[とくちょう]が出せる。」

こういう文章から[あたい][とくちょう]の部分を
一括で削除する正規表現を教えてくれないでしょうか。
Wzの検索、置き換えを使っています。

261 :nobodyさん:04/02/22 23:39 ID:???
s/\[.*?\]//g

とかしか思いつかない漏れはここに似つかわしくないですか

262 :nobodyさん:04/02/23 05:58 ID:???
>>260
[[^]]+]


263 :nobodyさん:04/02/23 10:39 ID:???
abc\,edf,ghi という文字列を
$_[0] = abc\,edf
$_[1] = ghi
という具合に split したいのですが、どうすればよろしいでしょうか?

264 :nobodyさん:04/02/23 11:51 ID:???
>>263
split /(?<!\\),/, $str;

以後、Perl の質問は http://pc2.2ch.net/test/read.cgi/php/1075545279/ へ。

265 :260:04/02/23 14:09 ID:???
>>262
出来ました!すごいですね。
自分には難しくて。
ありがとうございました。

266 :nobodyさん:04/02/23 20:41 ID:Ea0t25bl
文字列以外にマッチってできるべか?
こんなふうに書いてみたけどだめやった。
[^(mojiretu)]
それとも(?!)とか工夫すればできるの?


267 :nobodyさん:04/02/23 20:46 ID:???
純粋に!で否定かければいいのでは、とか思いますがどうでしょう

268 :266:04/02/23 21:30 ID:Ea0t25bl
レスどうもです、具体的な例を紹介してくれると助かるんすけど、だめすか?
お願いしまぁす。


269 :nobodyさん:04/02/23 22:14 ID:???
Perlなら
$hoge !~ /^mojiretu/g;
で、文字列以外にヒットするはず

270 :nobodyさん:04/02/24 21:18 ID:1VWZCh18
質問です。
アルファベットのみで構成される6文字以上10文字以下の文字列、をcygwinのgrepを用いて検索したいのですが…。

正規表現の紹介をしているところを読んで回り、
^「A-Za-z]{6,10}
で、アルファベット6文字以上10文字以下、を表すということが分かったのですが、

grep -i "^[a-z0-9./]{6,9}"
としてみても何も反応が無く、

egrep -i "^[a-z0-9./]{6,9}"
とすると、11文字や12文字の文字列も引っかかってきてしまいます。

どう書けばアルファベットのみで構成される、6文字以上10文字以下の文字列、を正確に検索出来るのでしょうか?

宜しくお願いします。

271 :nobodyさん:04/02/24 21:22 ID:???
>>270
egrep -iw "^[a-z0-9./]{6,10}"

途方に暮れて質問させていただいた直後に我に返りました。
wというコマンドを使えば出来ました。

スレ汚し失礼しました…。

272 :270:04/02/24 23:35 ID:1VWZCh18
スミマセン…もう一度質問させてください…。

http://koho.ktplan.jp/tango/y.html

ここを例にして説明します。
上のサイトを開いて、全部選択してテキストにコピペしてy.txtとして保存。
この中から、6文字以上、10文字以下の英単語だけを抜き取ろうとしています。

$ egrep -iw "^[a-z]{6,10}" y.txt

とすると、

English NaviHome0INDEX1 HELP2 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq
Rr Ss Tt Uu Vv Ww Xx Yy Zz基本的な英単語 Y
yesterday
yourself
Copyright c 2001-2004 English Navi All Rights Reserved

という結果になります。

English NaviHome0INDEX1 HELP2 Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq
Rr Ss Tt Uu Vv Ww Xx Yy Zz基本的な英単語 Y

Copyright c 2001-2004 English Navi All Rights Reserved
の部分が、どうしても引っかかってきてしまいます。
上の書き方だと、間にスペースが入っているものとかを排除できないことは分かったのですが、どうすれば目的の文字数の単語だけが抜き出せるのか…頭がパンパンになって来ました。。。

上手く抜き出すことが出来る正規表現の書き方を教えてください。
よろしくお願いします。

273 :nobodyさん:04/02/24 23:40 ID:???
grepて$つかえたっけ

Perlだと
/^[a-z]{6,10}$/i
で、できるかもしれない。

274 :270:04/02/24 23:46 ID:???
>>273
即レスありがとうございます…。

$ egrep -iw "^[a-z]{6,10}+$" y.txt

$ egrep "/^[a-z]{6,10}$/i" y.txt

共にだめでした…。
悩んでみます。

275 :nobodyさん:04/02/24 23:52 ID:???
egrep -iw "^[a-z]{6,10}$" y.txt
じゃないのかと。

276 :270:04/02/25 00:11 ID:???
>>275
あ、スミマセン。。。

egrep -iw "^[a-z]{6,10}$" y.txt

です。
何も起きないのです…。

277 :nobodyさん:04/02/25 00:19 ID:???
正規表現メモによると、egrepでは{n,m}をサポートしていないそうだ。

grepなら{n.m}をサポートしているみたいだが。

278 :270:04/02/25 00:22 ID:???
>>277
egrepだと、とりあえず>>272の状態まではたどり着くのですが、
$ grep -iw "^[a-z]{6,10}" y.txt
これだと何も起きないのです…。
そもそもgrepやegrepだと無理…なのかな…。

279 :nobodyさん:04/02/25 00:42 ID:???
FreeBSDだけど、こんな感じだよ。

$ egrep -iw "^[a-z]{6,10}$" y.txt
yesterday
yourself
$ egrep -V
egrep (GNU grep) 2.4d

280 :270:04/02/25 01:07 ID:???
>>279
FreeBSD、ググッテ見ましたが、自分にはよく理解できませんでした。

自分は
http://sources.redhat.com/cygwin/
このcygwinというのを使用しています。

$ egrep -V
egrep (GNU grep) 2.5

と言うことでした。
つまり、これでは出来ない、ということですかね…。
ありがとうございました。
もうちょっとだけ色々考えてみます。
Copyright c 2001-2004 English Navi All Rights Reserved
↑こういうのが引っかかってくるようだと、英文ページから抜き取ることが出来ないですもんね…。
例としたサイトは辞書形式で、単語ごとに改行があったから何とかなったのか…。

281 :nobodyさん:04/02/25 02:25 ID:???
>>280
man egrep して、冒頭を 100遍読んでみ。

282 :281:04/02/25 02:28 ID:???
あ、すまん、何か勘違いしてた。スルーしてくれ。

283 :281:04/02/25 02:33 ID:???
お詫びといってはナンだが、これでどう?
前の [[:space:]]* は余計かも知れないけど。

$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt

284 :270:04/02/25 02:48 ID:???
>>283
遅くにスミマセン…調べ調べて、

$ grep "^[a-z0-9./]\{6,10\}" y.txt

これで出来ました…。
本当に出来てるのか、検証していきたいと思います。

$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt

これでも出来ました!まずは…この意味を解読することから勉強して行きたいと思います…。

昨日cygwin入れてみて、初めてgrep使って…頭がパンパンです。・゚・(ノД`)・゚・。
オヤスミナサイ!

285 :270:04/02/25 02:50 ID:???
>>284
訂正!

$ grep -iw "^[a-z0-9./]\{6,10\}" y.txt

でした!

|彡サッ

286 :270:04/02/25 03:34 ID:???
$ grep "^[a-z0-9./]\{6,10\}" y.txt

$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt

どちらを使っても、y.txtの中の改行をすべて空白に変えてみて、一面単語の海にすると取り出せないですね…。
もう諦めてマジ寝ます。
また明日悩みます。

287 :281:04/02/25 04:30 ID:???
>>286
それこそ、man egrep して、冒頭を 100遍読んでみ。

ていうか、grep でそれやるなら、
逆に、空白をすべて改行に変えてみた方が取り出しやすいと思われ。

288 :nobodyさん:04/02/25 14:02 ID:12gYevYJ
PERLで
予約語が行にあったら文字で挟んで置き換えるという処理なんですが

$ReplaceStr = $left . $word . $right;
$line =~ s/(\W)$word(\W)/$1$ReplaceStr$2/g;

だと行頭と行末が正しく置換できないです。どうすればいいんでしょうか?



289 :nobodyさん:04/02/25 14:32 ID:???
s/\b$word\b/$left$word$right/g;

290 :nobodyさん:04/02/25 17:55 ID:12gYevYJ
>>289
ありがとうございます!
こんな便利なキャラクタがあったんですね!
それぞれ予約語の配列にforeachかけてやってたんですが
速度的にはこっちの方が速くなるんでしょうか?

chomp(@ReserveWords);
$MachWords = join("|",@ReserveWords);

foreach $line(@inputlines){
    $line =~ s/\b$MachWords\b/$left$&$right/g;
}

291 :266:04/02/25 20:16 ID:v7alvSdo
古い話で申し訳ないっすけど。

>>269
レスどうもっす。

>Perlなら
>$hoge !~ /^mojiretu/g;
>で、文字列以外にヒットするはず

ん〜、申し訳ない、説明不足した。
正規表現で「mojiretu」が無い事にマッチしたいんですよ。
どうでしょう?


292 :nobodyさん:04/02/25 20:19 ID:???
>>291
http://www.din.or.jp/~ohzaki/regex.htm#Without

293 :nobodyさん:04/02/25 22:58 ID:???
!~ はマッチしないものが選ばれるはず。

294 :nobodyさん:04/02/26 12:30 ID:pqrzwzpG
if($FORM{'comment'} =~ /\@/) { &error; }
とした場合、

@が含まれる文が、エラーになるのは
あたりまえなのですが、

病院 という語句までも制限してしまいます。
shift-jisですけど、文字コードとかが関係しているのでしょうか?

295 :nobodyさん:04/02/26 13:27 ID:???
>>294
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

296 :294:04/02/26 13:29 ID:???
調べたところ、
「ァ」や「院」は@と認識されてしまうみたいですね・・・
一度、他の文字に変換してから、
元に戻そうと思います・・・

297 :294:04/02/26 13:37 ID:???
>>295
ありがとうございます。
勉強します。

298 :nobodyさん:04/02/26 16:11 ID:???
if($word =~ /$search/o){
print $1;
}
という処理をした時に、$search内に正規表現用文字($や^等)が入っていた時
例)
$search = "[abc]"等

に、それを正規表現としてとらえてしまいます。
調べてみたところ、どうやらそれが正しい動作という事でしたが、
この$searchを単なる文字列として見て、例のような文字列の検索を行った時に
「aかbかc」ではなく、「"[abc]"という文字列」として検索するにはどうすれば良いんでしょうか。

299 :nobodyさん:04/02/26 16:31 ID:???
>>298
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html#Regular_Expressions
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq6.html#How_can_I_quote_a_variable_to_us

以後、Perl の質問は http://pc2.2ch.net/test/read.cgi/php/1075545279/ へ。

300 :nobodyさん:04/02/27 00:44 ID:28vfJb2l
どっか勘違いしてるのでしょうか?
perlなのですが、
テキストボックスに入れた数値を$in{'count'}に格納して、
それが数字じゃなければエラー出しして終わりにしたいのですが、
数値だろうと、そうでなかろうと、いかのunlessの中を通りません。

 unless ( ($in{'count'} =~ m/^[1-9][0-9]*$/) || ($in{'count'} == 0) ){
  print "Content-type: text/html\n\n";
  print "数字を入れてください。もどってください。";
  exit;
 }


301 :nobodyさん:04/02/27 01:04 ID:???
>>300
こういうことか?

if ("hoge" == 0) { print "ZERO\n" } else { print "NON-ZERO\n" };

302 :300:04/02/27 01:33 ID:???
>>301
えっと、ごめんなさい、正確に言うと、
「正の整数」を入れてもらいたいので、そうでない場合は、エラーではじきたいのですが。。。
「dhfshfhjksad」みたいな適当な文字を入れてもエラーをすり抜けてしまうし、
「345」みたいちゃんとした「正の整数」を入れても、エラーをすり抜けてくれる。。。

303 :nobodyさん:04/02/27 01:46 ID:???
>>300
数字は $in{'count'} =~ m/^[1-9][0-9]*$/ で真になるから unless
ブロックに入らない。(数字を含まない) 文字列を数値コンテキスト
で評価すると 0 になるので $in{'count'} == 0 で真になるから unless
ブロックに入らない。

以後、Perl の質問は http://pc2.2ch.net/test/read.cgi/php/1075545279/ へ。

304 :nobodyさん:04/02/27 03:08 ID:zgPOAYIB
>>292
感謝!

(?:(?!foo).)*
これかぁ〜、なるほど実験しみます。


305 :300:04/02/27 04:09 ID:???
>>303

なるほど、よくわかりました。ありがとうございます。

306 :nobodyさん:04/02/27 21:31 ID:???



307 :nobodyさん:04/02/28 22:17 ID:???
<P class="fuga">hoge</P>

こういうタグをいったんサニタイズした文字列

<P class="fuga">hoge</P>

に対して

m/<(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class="\w{1,20}")>(.*)<\/$1>/

こういう感じにマッチさせたいのですが、$1が働かないのはなぜでしょう。
$1に「P」が入ってうまくいくと思うのはマチガイ?

308 :nobodyさん:04/02/28 22:22 ID:???
あ、失敗^-^;
実体参照されちまった。こうです。


&amp;lt;P class=&quot;fuga&quot;&amp;gt;hoge&amp;lt;/P&amp;gt;

m/&amp;lt;(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class=&amp;quot;\w{1,20}&amp;quot;)&amp;gt;(.*)&amp;lt;\/P&amp;gt;/



309 :nobodyさん:04/02/28 22:25 ID:K5IxNsG1
まことにスマン。こんどこそ。

&lt;P class=&quot;fuga&quot;&gt;hoge&lt;/P&gt;

m/&lt;(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class=&quot;\w{1,20}&quot;)&gt;(.*)&lt;\/P&gt;/

310 :nobodyさん:04/02/28 22:26 ID:???
>>307-309
http://www.kt.rim.or.jp/~kbk/regex/regex.html#BACKREF

311 :nobodyさん:04/02/28 22:32 ID:???
>>310
く、なるほど。perlの特殊変数と正規表現を混同していたわけか・・・

ありがとうございました。恥ずかしい失敗ですが、一歩前進。


なんども失敗してスマン。

312 :nobodyさん:04/02/29 14:20 ID:tS63OhT8
PHPで入力された文字がEUCの半角カナのみかチェックしたいです。
整数のみのチェックは正規表現でできました。

^[0-9]+$ 整数のみの正規表現
EUCの半角カナのみの正規表現は?

313 :nobodyさん:04/02/29 14:29 ID:???
そこまでわかってるならヒント

^(ア|イ|ウ|エ|オ)+$

314 :nobodyさん:04/02/29 15:25 ID:???
>>312
EUC の半角カタカナは、SS2 (8E) + JIS X 0201 カタカナ (A1-DF) だから、
こんな感じでいけそうな気がします。
いかがでしょうか。

^(\x8E[\xA1-\xDF])*$

315 :nobodyさん:04/02/29 17:41 ID:???
マルチにレスすんなよ。
PHPスレで聞いてる

316 :nobodyさん:04/03/01 00:32 ID:uvhpNWvz
aaa@a.jp?subject=????
の?以降の件名部分をPHPで削除したいんだけど、

$str= ereg_replace("/?.*/", "" , $str);

では無理だった・・。
これではお話になりませんか?

317 :nobodyさん:04/03/01 00:56 ID:???
?は0文字か1文字を表すメタ文字の予感

318 :316:04/03/01 02:31 ID:???
317さんのご指摘の元、色々やって出来た予感。
要らないかもしれないけど、書いときます。

$mail = "a@a.a?subject=件名"
preg_match("/^[\w\-\.]+@[\w\-]+\.[\w\-\.]+/","$mail", $matches);
$mail = $matches[0];

正解かどうかわかりませぬが、これでやっていこうと思います。

319 :nobodyさん:04/03/01 02:44 ID:???
>>318
>>317 が言いたかったのは /\?.*/ と思われ。
まあそれで解決してるならいいんだけどね。

320 :nobodyさん:04/03/03 11:51 ID:???
リモートホストを
1.英数字のピリオド区切り
2.英数字のみ
のいずれかの条件でマッチさせようと思い、
(リモホ) =~ m/^(\w+\.?)+\w+$/
などとやったのですが駄目なようで、これ以上思い浮かびません。
どうすれば良いのでしょう。


321 :nobodyさん:04/03/03 15:08 ID:???
>>320
こうじゃね?
m/^(\w+\.)*\w+$/

もうちょっと仕様どおりちゃんとやるならこう?
m/^(?:[0-9a-z]+\.)*[0-9a-z]+$/i

322 :nobodyさん:04/03/04 01:43 ID:???
ああそうか区切る時は前の方(やや不適切な言い方ですが)の
有無を調べれば良かったんですね。
ありがとうございました。


323 :nobodyさん:04/03/05 07:43 ID:???
$charactorにひらがな(あーん)以外が含まれているかどうか判断したいのですが

if ( $charactor =~/[^あ_ん]/) {
print "あーんを以外含んでいます。\n";
}
というふうにしてみたのですが
上手くいきません
自分では見当がつかないのでアドバイスをください

324 :nobodyさん:04/03/05 10:53 ID:???
>>323
-

325 :nobodyさん:04/03/05 11:00 ID:???
Perlメモによると
># 全角ひらがな [ぁ-ん]
>$Zhiragana = '(?:\xA4[\xA1-\xF3])'; # EUC-JP
>$Zhiragana_sjis = '(?:\x82[\x9F-\xF1])'; # SJIS

なので、EUC-JPならこうかな。つかPerl分からん。
if (!$charactor =~/^(\xA4[\xA1-\xF3])*$/) {
print "ひらがな以外を含んでいます。\n";
}

326 :nobodyさん:04/03/05 11:53 ID:???
>>324
コピペするときに間違えました。
>>325
ありがとうございます!

if ( $charactor =~/[^\x82\x9F-\xF1]/) {
print "あーん以外を含んでいます。\n";
}
これで出来るようになりました。


327 :325:04/03/05 12:00 ID:???
>>326
ちょっと待て、それじゃ誤判定しない?
ひらがな以外にマッチではなく、「『文字列がひらがなのみ』にマッチしない」としないと。
if ($charactor !~ /^(?:\x82[\x9F-\xF1])*$/) {
print "ひらがな以外を含んでいます。\n";
}

328 :nobodyさん:04/03/06 21:48 ID:???
>321
ハイフンも使えるから
m/^([\w\-]+\.)*[\w\-]+$/
のような気が。
#ハイフンのエスケープ要るか要らないか忘れたけど


329 :nobodyさん:04/03/07 22:19 ID:???
PHP4で@の読みの「アットマーク」「アトマク」「アツトマァク」「アット」「アツトマアク」らに
マッチする正規表現をお教え下さい。
ア[ッツ]?ト{マ[ーアァ]?ク}? とか アッ?ツ?ト{マ[ーアァ]?ク}? 
初心者なので全然だめです・・。

330 :nobodyさん:04/03/07 23:11 ID:???
上のはメルアドはじきなのでしたけど、
@|@|(あ[っつ]?と).*|(ア[ッツ]?ト).*|(ア[ッツ]?ト).*
でいくことにします。
アットローンでもマッチしちゃうけどいいや・・・・・。

331 :nobodyさん:04/03/07 23:11 ID:???
[アットマーク|アトマク|アツトマァク|アット|アツトマアク]

332 :nobodyさん:04/03/08 03:41 ID:???
ア[ッツ]?ト(マ[ーア]?ク)?

333 :nobodyさん:04/03/08 05:41 ID:???
>332 どうも。
アットローンでもアトムでもマッチしちゃうよね?
^ア[ッツ]?トマ[ーアァ]?ク$     だと「アット」「アト」がマッチしない・・・
「アット」と「アットマーク」にマッチして「アットローン」にマッチしないなんてできないのかなo(~ρ~)o zzz・・・


334 :nobodyさん:04/03/08 10:05 ID:???
>>333
「@ローン」の読みは「アットローン」なんだけど。
マッチしなかったらおかしくないか?@はアットって読んでもいいんだろ?

335 :nobodyさん:04/03/08 13:19 ID:???
PHPで簡単なweb上思いついたスクリプトを書き残すメモ帳のようなものを作成してるんですが
その中で「//〜〜〜\n」や「/* */」などのいわゆるコメントの部分を
色分けして表示したいのですがコメント部分とマッチさせる正規表現がどうしてもわかりません。
「/* */」については/*を<FONT COLOR=RED>/*にし
*/を*/</FONT>にしたのですがこれだと
「""」に囲まれたコメントではない部分も色分けされてしまいます。当たり前ですが・・・。


336 :nobodyさん:04/03/08 15:37 ID:???
>>335
こんなんでいいんじゃないか

<?php
header("Content-Type:text/html; charset=Shift_JIS");

$comment[0] = "\/\/[^\n]*?\n";
$comment[1] = "\/\*(.*?)\*\/";

$msg = "TextTextText // TextText
TextText
TextTextText /* TextText */
TextText
// TextText /* TextText */ Text
Text
";

foreach($comment as $regexp){
$msg = mb_ereg_replace($regexp,"<span style=\"color:red\">\\0</span>",$msg);
}

$msg = nl2br($msg);
echo $msg;
?>


337 :nobodyさん:04/03/10 21:20 ID:???
use Jcode;
$jis=Jcode->new($ARGV[0],'utf8')->jis;
$jis=~s/([^a-zA-Z0-9])/sprintf("%%%02lX",unpack("C",$1))/eg;
$jis=~s/%1B%28B$//; $jis=~s/^%1B%24B//; # <= separate
$jis=~s/%/\\x/g;
こいつで16進にして正規表現かけてんですが

___ファイル内のjisコード文字列____

ああ接続FTP接続うう

__________________________________


FTP接続 <= なら引っかかってくれます

接続FTP <= だと駄目です

  なぜに?

338 :未承諾広告※ ◆aiY4htt2.2 :04/03/10 21:39 ID:???
>>337
テストもせずに s/\G と逝ってみるテスト

339 :337:04/03/10 22:49 ID:QeEknFJh
perl FTP接続 <= だとOK
FTP\x1B\x24B\x40\x5CB3

perl 接続 <= これもOK
\x40\x5CB3

perl 接続FTP <= だと駄目でつ
\x40\x5CB3\x1B\x28BFTP

s/\G と逝ってみたいんですがどこで使うんでつか

アホですまそ


340 :nobodyさん:04/03/11 22:13 ID:???
質問させてください。

abc  abc%xyz  123  123%xyz
という4つの文字列があるときに、左から順番に、

$1 に 'abc' が代入されるようにマッチする
マッチしない
$1 に '123' が代入されるようにマッチする
$1 に '123'、 $2 に 'xyz' が代入されるようにマッチする

にはどう書けばよいでしょうか?

/^(?:(abc)|(123)(?:%(xyz))?)$/
だと、3つ目と4つ目の '123' が $2 に入る

/^(abc|123)(?:%(xyz))?$/
だと、2つ目がマッチする

/^(abc|123(?:%(xyz))?)$/
だと、4つ目の $1 に文字列すべてが入る

みたいな感じでだめでした。
わかりにくい上に低レベルな質問で
申し訳ないですがよろしくお願いします。

341 :nobodyさん:04/03/11 22:40 ID:???
>>340
/^(\w+)(?:$|(?<![A-Za-z])%(\w+)$)/

342 :340:04/03/11 23:05 ID:???
>>341
ありがとうございました。完璧です。
こういうときに Positive Lookbehind Assertion 使うんですね。
ぜんぜん思いつきませんでした orz

343 :nobodyさん:04/03/22 16:58 ID:JNc4vCtR
if( !reply_to || reply_to.search(/\d/) )

JavaScriptでの分岐条件ですが、
「reply_toがないか、あるいはあっても数字以外の文字が含まれている場合はtrue」
という条件式です。
上記でどうもうまく行っているのですが解せません。
数字以外の文字って「\D」ですよね。何か勘違いしていますか?

perl/CGI+JavaScriptで製作中ですが正規表現はあまりやった事ないです。
あるいは上記条件式だとどう書くのが普通ですか?


344 :nobodyさん:04/03/22 17:03 ID:???
>>343
Web制作板で聞けよ

if (inNan(reply_to)) でどうだ?

345 :nobodyさん:04/03/22 17:04 ID:???
if (inNaN(reply_to)) だった

346 :nobodyさん:04/03/22 17:54 ID:???
>>345
> if (inNaN(reply_to)) だった
isNaN(reply_to)でした。
こんなんがあるんですね。
勉強になりました。

347 :nobodyさん:04/03/22 18:05 ID:???
isNaN で良いの? isNaN("123foo") とかも false になるよ。

あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
たぶん >>343 のはうまくいっていないと思われ。
マッチしないときには -1 を返すので、
if ( !reply_to || reply_to.search(/\D/) >= 0 )
とかじゃないかな?

348 :nobodyさん:04/03/22 18:21 ID:???
>>347
falseになるわけねぇだろうが

349 :343:04/03/22 18:24 ID:???
>>347
> isNaN で良いの? isNaN("123foo") とかも false になるよ。

えーと、今回は数字以外の文字が含まれてたら false でオッケイです。
>
> あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
> たぶん >>343 のはうまくいっていないと思われ。
> マッチしないときには -1 を返すので、
> if ( !reply_to || reply_to.search(/\D/) >= 0 )
> とかじゃないかな?

なるほど、、、微妙に返り値が違うんですね。
単純にブール値を返すもんだと思ってました。
勉強になりました。
クライアントサイドJavaScriptってうまく組み込むと便利ですけど、
ブラウザ依存だったりバージョン互換性の問題とか、結構微妙ですね。
いえ、今回の件とは関係ないですけど。
ありがとうございました。

350 :343:04/03/22 18:26 ID:???
>>348
> >>347
> falseになるわけねぇだろうが
ああ、そうですね。数字かどうかですからね。
trueでいいんです。
たぶんうっかりミスですね。御指摘どうも。

351 :nobodyさん:04/03/22 18:41 ID:???
>>348
げ、処理系依存なのか。確かに IE だとならないね。
でも、 isNaN("1e0") とかは false になるよね?

352 :nobodyさん:04/03/29 21:33 ID:???
復帰


353 :nobodyさん:04/04/08 15:03 ID:AQ8qwK3r
"abcdeあいうえお\"fghijかきくけこ";

のようなダブルクォートで囲まれた文字列を取得したいのですが、
文字列に\"を含んでいる場合うまく取得できません。

"[^"]*"と書いているので当然と言えば当然なのですが・・・
どのようにしたら、\"を含む文字列をうまく取得できますでしょうか?

354 :nobodyさん:04/04/08 15:38 ID:???
余計なことをせずに最長マッチさせればいいんじゃないの。
/"(.*)"/
こういうのもありかもしれないけど。
/"((?<=\\").*)"/

355 :354:04/04/08 15:46 ID:???
盆ミスー適当に修正して

356 :nobodyさん:04/04/08 17:11 ID:???
正規表現とかその手の本には必ず出てくる例題だな。

357 :nobodyさん:04/04/09 17:13 ID:Nk138A/f
かれこれ半日もんどりうってます....

htmlファイル中で、aタグ中のリンク先の置換をやりたいのですが、
・mailto:やtel:が含まれる場合は除外
・リンク先(href="url")のurlが、cgiやphp、jspだったら除外
というのをやりたいのです。
で、それで引っ掛かった分(htmlやhtm)を、特定の文字列に置換したいのです。

で、
/<a href="(([^(tel:|mailto:)][-0-9a-z/@~]+[^(.php|.cgi)]") ([^>]+))>/i
なんてやってるんですが、思うようにならんです。
どこがおかしいのでしょう?
先達の皆さま、よろしくおながいします

358 :未承諾広告※ ◆aiY4htt2.2 :04/04/09 17:59 ID:???
>>357
もしかして、//i -> s///i かな?
s{<a href="((?<!tel:|mailto:).+?(?!\.php|\.cgi)".+?>)}{url=$1}i;

実証はしていませんm(_ _)m

359 :未承諾広告※ ◆aiY4htt2.2 :04/04/09 18:12 ID:???
>>358
グダグダやね鬱。

360 :nobodyさん:04/04/09 19:04 ID:???
>>357-358
s/<a href="((?!tel:|mailto:)[-_.!~*'()a-z0-9;\/:@&=+$,%#]+(?<!\.php|\.cgi))"[^>]*>/url=$1/i;
こんな感じ?

>>357
'?'を許さないことで、クエリストリング付きは
即時却下する所が面白いね。

361 :nobodyさん:04/04/09 19:08 ID:???
>>357
一回のマッチで全部判定できなくもないが、分けた方が楽且つ柔軟。
言語が Perl5 なら

s{
  (
    <a
    [^>]+?
    href=(?:(")|(')|(\b))
  )
  (
    (?(2)[^"]+?)
    (?(3)[^']+?)
    (?(4)[^\s>]+)
  )
  (?=
    (?(2)")
    (?(3)')
    [^>]*?
    >
  )
}
{
  my($pre, $url) = ($1, $5);
  if ($url !~ /^(?:mailto|tel):|\.(?:cgi|jsp|php)$/i) {
    $url =~ ...
  }
  $pre . $url
}egix;

362 :nobodyさん:04/04/09 21:00 ID:B1AI3byV
357です。
明日再挑戦します。
ありがとうございます

363 :nobodyさん:04/04/10 13:43 ID:rupp3c37
357でつ。
360さん、361さん、ありがとう!うまくいきました。
でも、361さんのは、漏れには何をやってるのか識別不能です....鬱

364 :nobodyさん:04/04/14 21:47 ID:8xwTd1PB
おまえらは監視されている(^▽^ケケケ

365 :nobodyさん:04/04/14 21:47 ID:8xwTd1PB
おまえらは監視されている(^▽^ケケケ

366 : :04/04/20 01:22 ID:UZzv87o5
htmlファイルを読み込んで、
<a href=http://bbq.2ch.net/bbynews/i/>速報Headline</a> を
<a href="http://bbq.2ch.net/bbynews/i/">速報Headline</a>
の様に、href=の中身を " で括りたいのですが、
$str =~ s/(<[^>]*\bhref\s*=\s*['\"]?)([^\s\"'>]*)/\1\"\2\"/g;
としてしまうと、元々 " で括られている場合にもさらに " が付いてしまうため困っています。
" が無い場合のみ " で括るようにするにはどうすればよいでしょうか。
お知恵をお貸しくださいませ。

367 :nobodyさん:04/04/20 06:46 ID:???
>>366
s{
  (?<=href=)
  (?:(")|(')|(\b))
  (
    (?(1)[^"]+)
    (?(2)[^']+)
    (?(3)[^\s>]+)
  )
  (?(1)")(?(2)')
}
{"$4"}gix;

368 :nobodyさん:04/04/20 16:41 ID:2Qvzqrcy
質問させてください。
あるhtmlファイルの

<!--ここから//-->
テキストテキストテキストテキストテキストテキスト
<!--ここまで//-->

という「<!--ここから//-->」の部分と「<!--ここまで//-->」の間にあるテキストを
他のphpファイルからereg_replaceで置換したいのですが可能でしょうか?

可能な場合、上記の範囲指定は正規表現でどう書いたらよいのでしょうか?

369 :nobodyさん:04/04/20 17:17 ID:???
>>368
http://php.s3.to/man/ref.regex.html
http://www.kt.rim.or.jp/~kbk/regex/regex.html#POSIX

370 :nobodyさん:04/04/20 19:05 ID:???
>>369


371 :nobodyさん:04/04/20 21:41 ID:???
>>367みたいな回答はDQN丸出しだな

372 :nobodyさん:04/04/21 05:52 ID:???
>>366
s/(<\w+\s+href\s*=\s*)(['"]?)([^\2\s>]*)\2(\s*>)/$1"$3"$4/gi;
# まんまですな。

>>371
どこらへんがDQNなの?

373 :366:04/04/21 11:47 ID:???
>>367,372
ありがとうございます。これから試してみます。
実は367は何やってるかわからないほどの素人ですが
精進します。

374 :nobodyさん:04/04/21 18:46 ID:???
>>372
それに気づけないような頭でこのスレに来るなよ

375 :nobodyさん:04/04/21 19:43 ID:???
>>374
もれも分からんから教えてよ

376 :nobodyさん:04/04/21 19:47 ID:???
隊長、>>371=>>374が必死なスレッドを見つけました!


377 :nobodyさん:04/04/21 19:55 ID:???
>>376
おいおい、もう夏の暑さが近づいているというのにまだ春厨か?
いい加減自演認定は恥ずかしいと思えよ。
俺は面白そうだから便乗しただけ



#って書いてもどうせ煽ってくる春厨だろうけど

378 :nobodyさん:04/04/21 19:55 ID:???
隊長、>>372=>>375=>>376が必死なスレッドを見つけました!


379 :nobodyさん:04/04/21 20:02 ID:???
俺は面白そうだから便乗しただけ
俺は面白そうだから便乗しただけ
俺は面白そうだから便乗しただけ
ワラタ

380 :nobodyさん:04/04/21 20:34 ID:???
>>376=>>378=>>379
一人でお疲れ様

なんか必死さが伝わってくるよ、休めよ

381 :372:04/04/21 20:49 ID:???
>>374
hrefと=の間にスペースがあったり、相対アドレスの場合マッチしないからではないですよね?

んー、なんだろう。

382 :372:04/04/21 21:03 ID:???
って、煽ってただけなのか。
がっがり。

383 :nobodyさん:04/04/21 22:05 ID:???
↓んじゃ、次の質問どうぞ。

384 :nobodyさん:04/04/21 22:19 ID:???
>>381
いや、それで合ってるんだけどね

385 :nobodyさん:04/04/21 23:45 ID:???
こまった人たちだな

386 : :04/04/22 01:57 ID:???
>>372
これをPHPで使うにはどう変更すればいいでしょうか?
preg_replace関数を使ってみたのですが、マッチしてくれませんでした。

387 :nobodyさん:04/04/22 06:41 ID:???
>>386
$str = '<a href=http://bbq.2ch.net/bbynews/i/>速報Headline</a>';
$result = preg_replace('/(<\w+\s+href\s*=\s*)([\'"]?)([^\2\s>]*)\2(\s*>)/i', '$1"$3"$4', $str);

こんなのでいけた。

388 : :04/04/22 15:12 ID:???
>>387
うまくいきました。ありがとー
条件を " でくくっててマッチしないのを、 ' に変更したらできました。

389 :nobodyさん:04/04/28 11:02 ID:YDy2pcOH
Perl コーディング初心者質問コーナーより誘導されてきました。

sub/test.htmから<n月>という文字列がある行をマッチさせたいのですが、下のようにすると
ローカルではマッチするんですが、サーバーに上げるとマッチしなくなります。

print "content-type: text/html\n\n<html>";
open(TEST, "sub/test.htm");
while (<TEST>) {
if ($_ =~ /<.*?月>/) {print $_;}
}
close(TEST);
print "</html>";
exit;

4行目を
if ($_ =~ /<(.*?)月>/) {print $_;}
に書き換えるとローカルでもサーバー上でもマッチします。なぜでしょうか。

390 :nobodyさん:04/04/28 13:08 ID:???
>>389
「ローカル」と「サーバー」のそれぞれの Perl のバージョンは?
スクリプトと sub/test.htm のそれぞれの文字コードは?

391 :389:04/04/29 02:51 ID:SDhjA2B7
>>390
ローカルは5.8.3でサーバーは5.6.1です。
ファイルの文字コードはシフトJISです。

392 :nobodyさん:04/04/29 02:56 ID:AOm5G2zY
プログラムって何が面白いんですか

393 :nobodyさん:04/04/29 15:34 ID:cR/VctPC
適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列<適当な文字列"適当な<br>文字列

のような文字列に対して、imgタグやbrタグだけ残して、他の<>"'&あたりを文字参照に置換
したいんですが、正規表現一撃でいけますか?

394 :nobodyさん:04/04/29 15:38 ID:???
文字参照って、実体参照のこと言ってるのか?

395 :nobodyさん:04/04/29 15:46 ID:???
あ、そうです。
文字参照→文字実体参照

上の例だと

適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列&lt;適当な文字列&quot;適当な<br>文字列

となって欲しいのです

396 :nobodyさん:04/04/29 16:02 ID:???
タグ外で&quot;とかまで変換するヤシは意味わかってないね

397 :nobodyさん:04/04/29 17:45 ID:???
>>396
変換しても害は無いと思うが?

398 :nobodyさん:04/04/29 18:44 ID:???
やれやれ、素人はこれだから

399 :nobodyさん:04/04/29 19:01 ID:???
無能な捨て台詞より有能な捨て解説キボンヌ。

400 :nobodyさん:04/04/29 19:06 ID:???
何も分からない素人が何得意気になってるんだか
その程度のことgoogleで調べろよ

401 :nobodyさん:04/04/29 19:41 ID:???
>>400
プッ 必死だな
書き捨てできると思った炉 え? プゲラワラップッ

402 :nobodyさん:04/04/29 20:14 ID:???
>>395=>>397=>>399=>>401
質問者がこんなレベルじゃこのスレも廃れるわけだw
良く分かったよ

403 :nobodyさん:04/04/29 20:44 ID:???
環境
WindowsXP SP1
ActivePerl 5.8.0.806

正規表現でカタカナの「ゼ」を使うとエラーになってしまいます。
カタカナのゼを含む場合だけ「Unmatched [ in regex;」というエラーで止まってしまい、ほかの文字は大丈夫そうなのですが、対処法ありませんか?
if($temp =~ /ゼ/){
色々;
}

404 :nobodyさん:04/04/29 20:51 ID:???
>>389
そんなバカなと思いつつ確認完了。
なぜだろう。

>>393
できるかも知れないけど、プログラム書いたほうが楽だと思う。

>>396
http://www.w3.org/TR/html401/charset.html#h-5.3.2

405 :nobodyさん:04/04/29 20:59 ID:???
>>403
ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

if($temp =~ /\Qゼ\E/){

406 :nobodyさん:04/04/29 21:11 ID:???
>>405
ありがとうございます。
とりあえず意図した動作をするようになりました。
文字コードのせいで [ に認識されていたんですね。
紹介していただいたURLもブックマークしました。
熟読しますね。

407 :nobodyさん:04/04/29 23:02 ID:???
>>393
my $attr = qr/\w+=(?:(?:(')|(")|([^>]))(?:(?(2)[^']*)(?(3)[^"]*)(?(4)[^\s>]*))(?:(?(2)')(?(3)"))\s*)?/;
my $amp = qr/&(?!(?:(?:\#\d+)|(?:\#x[a-f\d]+)|(?:\w+));)/i;
s/(<\/?\w+\s*(?:$attr)*>)|(<)|(>)|(")|($amp)/
$1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
/xge;

Perlで書いてみたけど、どこか穴があるかも。


408 :nobodyさん:04/04/29 23:05 ID:???
> $1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
$1 and $1 or $5 and '&lt;' or $6 and '&gt;' or $7 and '&quot;' or $8 and '&amp;'

409 :nobodyさん:04/04/30 06:46 ID:???
>>404
> http://www.w3.org/TR/html401/charset.html#h-5.3.2

なるほど。では、タグ外で"とかまで変換しても害は無いですね。

410 :393:04/05/03 22:32 ID:???
>>407ありがと。
しかし内容を理解しようとしてみたが、いまだわかりません。
簡単なhtmlパーサを作っていて、<br>と<img>はインライン要素で、閉じタグもない
から、他の処理がすべて終わった後に置き換えればいいや、というロジックでした。

よく考えたら、文字列中に実体参照で<>が出てきたとしても、&が&amp;に展開
されるので、いちど実体参照に展開してから、すべての処理が終わった後に、

s/&lt;br&gt;/<br>/i
s/&lt;img src=&quot;([^"<>]*)&quot;&gt;/<img src="$1">/i

これでいけました。

いろいろテストしていたので、反応が遅くてすまんです。

411 :393:04/05/03 22:39 ID:???
あ、gオプション書き忘れ。s///giね。

それと、お世話になりましたので、ヘタレの作ったhtmlパーサでも見てやろうかという
方がいるならアプロダにでもソースさらします。

412 :nobodyさん:04/05/03 23:52 ID:???
HTMLパーサ?モジュール使ったらあかんの?Perlでしょ?

413 :393:04/05/04 00:09 ID:???
>>412
HTML::Parseモジュールの使い方を理解するのが面倒くさかった

掲示板の投稿に特定のタグと属性のみ許可する、文法に従わないタグは
その旨マークしてテキストとして表示する、という限定的用途なので、自作
のほうが汎用モジュールより高速だと思った

Perlと正規表現の勉強のため

て、感じで。

414 :nobodyさん:04/05/04 01:54 ID:???
ま、車輪の再発明は勉強には有用だが、
実用には不向きなので。

415 :nobodyさん:04/05/05 18:30 ID:???
荒らし板は通報せよ!荒らし狩りだっ!
名無しさん@ゴーゴーゴーゴー! :04/04/14 17:58 ID:WE3vDaf0
 愛と荒らしの掲示板:http://bbs2.otd.co.jp/16588/bbs_plain
が痛い。荒らし依頼すっと、IPアドレス晒される
 依頼か (?)要注意。あまりの痛さにPCを殴りたくなった。

今度は「愛と臨時の掲示板」だってさ!痛すぎる馬鹿だな!
http://bbs10.otd.co.jp/286214/bbs_plain
逃げても無駄だぜ!ゲロ!!つーかお前馬鹿?
卑怯者!逃げるなよ、潜伏中か?

愛と荒らしの掲示板(逃亡先):http://bbs10.otd.co.jp/286214/bbs_plain


416 :未承諾広告※ ◆TWARamEjuA :04/05/05 18:55 ID:???
Rock54 対象の悪寒。

417 :nobodyさん:04/05/06 22:18 ID:???

/^0?[0-3]?[0-7]{1,2}$/ってどんな意味ですか?

418 :nobodyさん:04/05/06 23:08 ID:???
そのまんまだと思うのだが。

419 :nobodyさん:04/05/07 00:17 ID:???
0377までの8進数

420 :nobodyさん:04/05/09 00:57 ID:R8gJ7rV0
perlをシフトJISで書いてるんですが、「表」とかの文字化けする文字を正規表現でマッチングさせる
にはどうしたらいいでしょうか。

$_ =~ s/表/表\/g;

みたいなことをしたいんですが上記の場合「表」のコードが(95 5C)なのでエラーに
なってしまいます。コードのまま検索かけてもうまくいきませんでしたし

$_ =~ s/95 5C/95 5C 5C/g;

どうすれば「表」という一文字を検索に引っ掛ける事ができるでしょうか?

421 :420:04/05/09 01:29 ID:???
色々試していたら、デコードした後に下記のやり方で一応できたのですが、
$_ =~ s/\x95/表\/g;

でも\x95だけでは他の文字にも影響が出てしまいますよね。それで
$_ =~ s/\x95\x5C/g;
としてみましたがこれではマッチしてくれませんでした。どうすればいいでしょうか。


422 :nobodyさん:04/05/09 01:45 ID:???
要は文字化けしないようにエスケープしたいんじゃろ?
出力だけでなく処理もSJISでやってるなら展開しないように工夫すれ

423 :nobodyさん:04/05/09 02:02 ID:???
つか、内部処理はEUCでやれよと

424 :420:04/05/09 02:08 ID:???
>>422
はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。

ところで、みんなはクエリは受け取ったらeucに変換して処理をした後、出力時にsjis
に変換しているのですか?

プラットフォームがwinならsjisで、unixならeucに変換して扱うみたいな事を聞いたの
ですが、winでも処理時はeucで出力の時にsjisに変換すれば大丈夫なんでしょうか?



425 :nobodyさん:04/05/09 02:16 ID:???
>>420
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

426 :nobodyさん:04/05/09 02:18 ID:???
>>424
HTMLをEUCで書く
PerlCGIをEUCで書く

「表」とかで悩んだことは一度も無し。
ほんとみんな無駄な苦労してるなあと思ってる。


HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
(変換時にはちゃんとincode=sjisを付ける)

427 :420:04/05/09 02:39 ID:???
みなさんありがとうございます。今までずっとメモ帳でやってたので、perlもhtml
も自動的にShift_JISで書いてました。何かエディタを使おうと思いますが、色付けもなく
特定文字が太字にもならない、メモ帳と違うのは漢字コード指定で再読み込みができる
っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。


>>426
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
〜最初にeucに変換してから処理する〜の意味が理解できなくて・・・

>>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
解説されてるのでしょうか?

とりあえずお腹が空いたので、お茶漬けでも食べます。


428 :nobodyさん:04/05/09 03:08 ID:???
>>424
> はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
> 内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。
そこでなんで $_ =~ s/表/表\/g; みたいな処理が必要なの?

429 :420:04/05/09 03:48 ID:???
Sift_JISでやっているので、「表」という文字は文字化けしてしまうので、相手が入力した文字の
中に表が入っているか検索して、入っていたら表の後ろに\をつけて問題を解決しようと
思ってましたが、sjisでやること自体が間違いみたいですね。

ところでこれはスレ違いな質問なんですが、エディタを使う事にしたのでファイルの関連付けをメモ帳の部分を
全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
どうしてでしょうか。

430 :420:04/05/09 04:05 ID:???
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
>(変換時にはちゃんとincode=sjisを付ける)

perlをeucで書く場合(HTMLがShift_JIS指定されてる場合),
print "文字列";


$data="文字列";
jcode::convert(\$data,"sjis");
print $data;

としなくてはならないのですか?ってこれも凄いスレ違いですね。こうゆう事はどこのスレに行って
質問すればよいでしょうか。


431 :nobodyさん:04/05/09 04:30 ID:???
>>420
おまいは何もかもすべて他人任せなのか?
ちったぁ自分の脳を使え!

432 :nobodyさん:04/05/09 04:38 ID:???
>>427
> っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
> 太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。
「勝手に」なるんだったら使えないな。素人の言い訳みたいだな。

> ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
> エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
普通ブラウザ側の表示文字コードは自動判別になっている。
自動判別に失敗するのを防ぐためのContent-Typeだ。(IEはContent-Typeは見ないんだったっけ?

> >>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
> 解説されてるのでしょうか?
ちゃんと読んでから何か発言してください。

>>429
> 全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
> どうしてでしょうか。
窓の手入れろ

433 :nobodyさん:04/05/09 04:40 ID:???
>>430
> >HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
> >(変換時にはちゃんとincode=sjisを付ける)
> perlをeucで書く場合(HTMLがShift_JIS指定されてる場合),
> print "文字列";
> を
> $data="文字列";
> jcode::convert(\$data,"sjis");
> print $data;

確かにそうしなければならないが、俺はそれは嫌だからプログラム内に日本語は書かない。
そもそもプログラム内にprintがない。
HTML::Template Template-Toolkit Template:Extract

434 :420:04/05/09 05:03 ID:???
みなさんすいませんでした。みんながやさしかったのでちょっと調子に乗りすぎました。
色々ためになるアドバイスありがとうございました。

>>433
参考にします!ほんとに感謝です。

それでは失礼します。

435 :nobodyさん:04/05/11 15:44 ID:g6OxcqtT

文字列 a=A b="B" c="C d=D" e に対して、

a=A
b="B"
c="C d=D"
e
が出てくるパターンを教えてくださいませ。

之では駄目みたいなんです → /(\w\=(\w|\"\w\")|(\w))/


436 :nobodyさん:04/05/11 16:11 ID:???
/[a-z]=(?:[A-Z]|"[A-Z](?: [a-z]=[A-Z])*")/

437 :436:04/05/11 16:15 ID:???
/[a-z](?:=(?:[A-Z]|"[A-Z](?: [a-z]=[A-Z])*"))?/

438 :435:04/05/11 16:26 ID:???
436=437 さんありがとう

439 :nobodyさん:04/05/24 16:10 ID:yOpX2XMb
質問です。
$dataにはhtmlがごちゃごちゃ入っているとします。例えば
$data =
"<p>\n".
"    ほげれ\n".
"</p>\n".
"<pre>\n".
"    ここは整形済み\n".
"</pre>";

この$dataを他のhtmlに埋め込むプログラムをつくりました。
そのとき、埋め込んで完成したhtmlのソースが見づらいため、
埋め込む$dataの各行にインデントを加え、埋め込み先のhtmlソースと
幅を合わせます。

$data =~ s/\n/\n        /g;
という正規表現で、各行の改行の後ろに次行のインデントを加えてみました。

ところがこの場合、preの中身にも当然インデントが入ってしまい、困っています。
preの中はインデントをかけたくありません。

どういう正規表現で書けばいいでしょうか。

速度はあまり気にしませんが。遅くてもいいので1行の正規表現で書きたいです。
プラットフォームはperl5.8によるCGIです。


440 :nobodyさん:04/05/25 01:23 ID:???
行とタグの二つを認識しつつ、インデントを加えるわけだから、
一行は無理だと思う。

441 :未承諾広告※ ◆TWARamEjuA :04/05/25 11:33 ID:???
>>439
my $Indent = "\t";
my $data =<<"HTML";
<p>
ほげれ
</p>
<pre>
ここは整形済み
</pre>
HTML

$data =
eval {
my $flag;
join '',
map {
$flag++ if m|<pre>|i;
$_ = $flag ? "$_\n" : "$Indent$_\n" ;
$flag-- if m|</pre>|i;
$_;
} split /\n/, $data;
};

print $data;

眠たいのでごちゃくちゃ、、、スマソ

442 :nobodyさん:04/05/25 13:24 ID:???
$data =~ s/(?:(<pre>[\S\s]*?<\/pre>)|^(.+?)$)/($1)?$1:" $2"/mgei;

443 :439:04/05/25 17:16 ID:???
どっちも完璧でした。そしてどっちも私の理解を超えてる・・・。
このコードを眺めて精進します。本当にありがとうございました。

444 :440:04/05/25 19:45 ID:???
>>442
なるほどmオプションで解決できますね。


吊ってきます。。

445 :nobodyさん:04/05/25 20:15 ID:???
(´・ω・)

446 :nobodyさん:04/05/30 02:31 ID:d8FeFDnu
PHP4で文字列を正規表現で解析したいと思います。
文字列は 'YYYYMMDD-hhmmss', 'YYYYMMDD' の二種類がマッチして、
前者は YYYYMMDD と hhmmss を、
後者は YYYYMMDD と '' (空) を取得したいと思います。

/(\d{8})-(\d{6})/ では後者で取得できませんでした。

どなたかパターンを教えてくださいませ。

447 :nobodyさん:04/05/30 02:35 ID:???
?を使えると幸せになれるぽいよ

448 :nobodyさん:04/05/30 02:47 ID:???
/(\d{8})(-(\d{6}))?/ で可能でした。ありがとうございます

しかしながら、取得した配列が
  前者が  YYYYMMDD-hhmmss  YYYYMMDD  -hhmmss  hhmmss
  後者が  YYYYMMDD        YYYYMMDD  ''       ''
となってしまいました。
欲しいものは
  YYYYMMDD-hhmmss から取得したのが  YYYYMMDD-hhmmss   YYYYMMDD   hhmmss
  YYYYMMDD      から取得したのが  YYYYMMDD        YYYYMMDD   ''
なのです

文を追加することで簡単に直せるのですが、パターンで解決できましたら、
よろしければ後学の為にも教えてくださいませ。

449 :nobodyさん:04/05/30 02:50 ID:???
()の意味分かると幸せになれるかも。

450 :nobodyさん:04/05/30 02:50 ID:???
>>448
あ?欲しいものが得られているだろ

451 :nobodyさん:04/05/30 04:49 ID:???
>>448
?:を調べると吉。

452 :nobodyさん:04/06/04 17:11 ID:5ERN6S7J
httpd.confのRewriteRuleで、

http://www.example.com/aaa/bbb/ccc/foo/bar/
または
http://www.example.com/aaa/bbb/ccc/foo/bar
の「bar」(つまりスラッシュ区切りの一番最後の文字列)
を、$1に格納して、/index.php?cat=$1 [L] を表示するにはどうしたらよいのでしょうか?

試しに以下のようにやっても、404になってしまいました。
RewriteRule (^/+)/?$ /index.php?cat=$1 [L]

どうすれば良いのでしょうか?

453 :こうかな?:04/06/04 17:38 ID:???
([^/]+)/?$

454 :452:04/06/04 17:49 ID:???
>>453
あう、おはずかしい勘違い。
うまくいきました。ありがとうございます。

455 :nobodyさん:04/06/21 10:56 ID:DV/+bk/n
はじめまして。
>>1のリンク先を見たのですが、素人&理数系全くダメの私には理解できませんでした・・・
どなたかアドバイスを下さると嬉しいです。

1-1001までの数字を
1→<a name="1">1</a>



1001→<a name="1001">1001</a>
というふうに置換したいのですが、
検索:[0-9]\f|[0-9]\f[0-9]\f|[0-9]\f[0-9]\f[0-9]\f|[0-9]\f[0-9]\f[0-9]\f[0-9]\f
置換:<a name="\0">\0</a>|<a name="\0\1">\0\1</a>|<a name="\0\1\2">\0\1\2\</a>|<a name="\0\1\2\3">\0\1\2\3</a>
とやっても上手くいきません。(↑笑わないでくださいね。これでも必死なんです・・・)
エディタは秀丸です。どうかよろしくお願いします。

456 :nobodyさん:04/06/21 13:16 ID:???
s|\d{1,4}|<a name="$&">$&</a>|;

きっとこんなんじゃ駄目なんだろうな。

457 :455:04/06/21 13:20 ID:???
いろいろぐぐって自己解決いたしました。
[0-9]+\f →<a name="\0">\0</a>
これで出来るようになりました。
今度からもっと調べてから書き込みますね。
スレ汚し失礼しました。

458 :nobodyさん:04/06/21 13:23 ID:???
>>456
すいません、書き込んでいる間にレス下さってたんですね。
ありがとうございます<(. .)>

459 :nobodyさん:04/06/23 14:38 ID:StfIGGBa
'<tag>test1<tag>test2</tag>test3</tag>';

上記の文字列から'test2'の部分だけを取り出したいのですが、
'm /<tag>(.*?)<\/tag>/;' では$1に 'test1<tag>test2' まで入ってしまいます。
'm /<tag>.*?<tag>(.*?)<\/tag>/;' で望みどおりにはなるのですが
エレガントではないように思います。
もっと良い表現はないでしょうか?

460 :nobodyさん:04/06/23 15:40 ID:???
m!.<tag>(.*?)!;

461 :460:04/06/23 15:57 ID:???
m!.<tag>(.*?)<!;

462 :nobodyさん:04/06/23 16:02 ID:???
ありがとうございます。>>461

463 :nobodyさん:04/06/23 18:16 ID:???
正規表現2chスレッド (WEBプログラミング) http://pwiki.chbox.com/pukiwiki.php?%C0%B5%B5%AC%C9%BD%B8%BD


(03/11/19) http://snapshot.publog.net/html/php/2003/11/19/214238.html
(02/11/24) http://pc5.2ch.net/php/kako/1038/10381/1038146241.html
(01/07/26) http://pc.2ch.net/php/kako/996/996105815.html


464 :nobodyさん:04/06/24 22:52 ID:???
正規表現掲示板 - Users Group of EmEditor FrontPage

http://cgi25.plala.or.jp/~c6h6/em_wiki/index.php?%C0%B5%B5%AC%C9%BD%B8%BD%B7%C7%BC%A8%C8%C4

465 :nobodyさん:04/06/25 11:54 ID:g4l68VjT
"A1B5A2B6A3B7A4B8"

と言う文字列があったとして、'B'の2個目の後ろの数字とか、
'A'の3個目の数字などの指定はどうしたら良いでしょうか?
Perlでお願いします。

{m回目にマッチ}を使えば良いかと思ったのですが、使いかたがわかりません。

466 :nobodyさん:04/06/25 12:01 ID:g4l68VjT
書き忘れましたが
m /.{3}(\d)/;
とかで'B'の2個目の後ろの数字は取り出せるのですが、
'A'や'B'はhtmlのタグの変わりですので、任意の文字列の
希望するヒット回数の後ろの文字列を取り出したいと思っています。


467 :nobodyさん:04/06/25 12:15 ID:???
>>466
もうちょっと元々何をやりたかったかを具体的に。

468 :nobodyさん:04/06/25 12:20 ID:???
つか、{m}はm回数目にマッチじゃないからね。
/.*B.*B(\d)/
とかやるしかないんじゃないの?

469 :nobodyさん:04/06/25 12:25 ID:g4l68VjT
>>467

htmlの中の2個目のtableタグの中の文字列を取り出したり、
3個目の画像のURLを取り出したりしたいです。

>>468
>つか、{m}はm回数目にマッチじゃないからね。

ご教授ありがとうございます。

470 :nobodyさん:04/06/25 12:34 ID:???
>>469
だから具体的にそのタグを書けと(ry

471 :468:04/06/25 12:36 ID:???
回数固定じゃないならこうかな? mとかBのところは適宜入れてやる。
/(?:.*?B){m}(\d)/

……でもこれってHTML解析とは違うような気がする。

472 :nobodyさん:04/06/25 12:46 ID:g4l68VjT
>>470
2個目の<tabe></table>内の10個目の<td></td>の間の文字列を取り出したいのですが、
エレガントな表記方法をお願いします。

>>471
まだまだ初心者なので的確な表現ができなくて申し訳ありません。
自分で調べるとっかかりが欲しかったので、>>465のような質問にしました。

473 :nobodyさん:04/06/25 13:09 ID:???
>>472
具体的という意味がわからないならもう帰っていいよ

474 :nobodyさん:04/06/25 13:15 ID:???
HTML のパースネタは盛り上がる (≒ 荒れる) ねえ。

>>472
そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉。

475 :nobodyさん:04/06/25 13:31 ID:g4l68VjT
>>473

ぐたい-てき 0 【具体的】
一般的なものや観念的なものではなく、個々の事実によっているさま。
「―に例をあげる」

具体的に例をあげているだろうが。
具体的という意味がわからないならもう帰っていいよ

>>474
>そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉

ご教授ありがとうございます。
HTML パースライブラリというのを知っただけでも大きな収穫を得ました。

476 :nobodyさん:04/06/25 13:42 ID:???
なんだよ、やっぱり分かってねぇじゃん。
一番必要なのは日本語の勉強だな。

477 :nobodyさん:04/06/25 14:10 ID:???
>>475
>2個目の<tabe></table>内
<table><td><table/></td></table><table/>
どれが2個目のテーブルですか。

どこが具体的ですか。
脳内ですか。そうですか。
おめでたい頭してますね。カワイそうに。

478 :nobodyさん:04/06/27 01:16 ID:???
>>475
HTMLもわかってないようだからそっちを先に勉強しなさい。
マスターするまで二度とこの板には来ないこと。

479 :462:04/06/29 17:06 ID:???
>>463
ごめんなさい。
ereg_replace("\++","+",$word);
で出来ました。

480 :nobodyさん:04/06/29 20:28 ID:8D9V5eyp
$str = "<a href=http://www.abc.com/><b>ABC</b>company</a>";
preg_match("/<a href=(.*)>(.*)<\/a>/i",$str,$str_reg);
これだと、<b></b>があるため、URLとタイトルがうまく抜き取れません。

http://www.abc.com/
<b>ABC</b>company
の2つを抜き出したいのですが、どうしたらいいのでしょうか?
<b>タグが入っていない場合は、うまくいくのですが…。

481 :nobodyさん:04/06/29 21:16 ID:???
>>480
preg_match("/<a href=(.*?)>(.*?)<\/a>/i",$str,$str_reg);

482 :480:04/06/29 22:01 ID:???
>>481
ありがとうございます。できました!

483 :nobodyさん:04/07/03 16:46 ID:3JpN2Yos
DoCoMo/2.0 N2001(c10;ser***************; iccxxxxxxxxxxxxxxxxxxxx)

DoCoMo/1.0/X503i/c10/ser***********
から
ser**********←これは11〜15桁のユニークな英数字
を得たい。
それと、
http://www.dp.j-phone.com/dp/tool_dl/web/useragent.php
J-PHONE/4.0/J-SH51/SN************ SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0
Ext-Profile/JSCL-1.1.0
SN************←12桁のユニークな英数字
を得たい。
よろしくお願いします。

484 :nobodyさん:04/07/03 16:48 ID:???
ser\d{11,15}
SN\d{12}

485 :nobodyさん:04/07/03 16:59 ID:???
>>484
それはかわいそうだろw

486 :nobodyさん:04/07/03 17:18 ID:???
>>484
ありがとうございます。
PHPなのですが、、、もう少し詳しくお願いします

487 :nobodyさん:04/07/16 14:35 ID:IH9/xCo3
>>11さんとは逆に、
アラビア数字(第1条〜第999条)を漢数字(第一条〜第九百九十九条)に置き換える式を教えてください。

488 :nobodyさん:04/07/16 15:37 ID:ihM1iEsJ
次の場合、どのようにすればいいのでしょう?

http://hoge.com/***」の***が、先頭一致で(aaa/|bbb/)以外の場合に、
hoge.com/***をhoge.com/index.cgi?***に変換。
〔(aaa/|bbb/)の場合通常のリクエストと見なす〕
〔***は任意〕
Apacheのmod_rewriteで行い、記述は.htaccessで行う。


489 :nobodyさん:04/07/16 16:01 ID:???
>>488
.htaccess質問コーナー Part2
http://pc5.2ch.net/test/read.cgi/hp/1084861566/

490 :nobodyさん:04/07/16 16:13 ID:???
>>489
【Apache】mod_rewriteについて語るスレ
http://pc5.2ch.net/test/read.cgi/php/1023791370/

というのもありますが、どちらがいいのでしょうか?

491 :nobodyさん:04/07/16 17:28 ID:???
PHPの質問なのですが、全角・半角を無視して検索文字列をハイライトするいい方法ありませんかね?
パフォーマンスが悪いのは承知で、
$hage = mb_convert_case($hoge, 'asKV')
$hage = preg_replace('/pattern/', '<span class="match">$0</span>', $hage);
$part = preg_split('/(<.+?>)/', $hage, 0, PREG_SPLIT_DELIM_CAPTURE);
$result = '';
$pos = 0;
foreach ($part as $key => $value) {
if ($key % 2 == 0) {
if (($len = mb_strlen($value)) > 0) {
$result .= mb_substr($hoge, $pos, $len);
$pos .= $len;
}
} else {
$result .= $value;
}
}
というのも考えてみたけど半角の濁点の処理などをさらに追加せねばならず、大変。
mb_ereg_replaceかpreg_replaceのオプションで全角半角を無視ってのできないかなあ。

492 :nobodyさん:04/07/16 17:35 ID:???
>>491
PHPスレで聞いたほうがいい

493 :nobodyさん:04/07/17 01:01 ID:l2+iEUo8
PHPで。
雑多な文字列の入ったテキストファイルの中から、ホスト名を抽出するにはどう書けばいいのでしょう。
実際やりたいことは、テキストファイルからホスト名部分を抽出→ereg_replaceで空白に置換え。
つまりホスト名の削除です。





494 :nobodyさん:04/07/17 01:19 ID:???
>>493
そのホスト名に当てはまる条件を提示してください

495 :nobodyさん:04/07/17 04:58 ID:aixfBR+9
はじめまして。

以下のような文字列にて"#"より後ろの文字列を
正規表現を使用したeregi_replace関数を用いて全て削除しようと考えています。
("#"も含みます)

$stirng = "あいうえおaiueo#かきくけこ"

以下のようにやっていますが、うまくいきません。
$b = eregi_replace("[#.*]","",$stirng);

どのようにすればよいのでしょうか?

496 :nobodyさん:04/07/17 07:45 ID:???
>>495
"#.*"

497 :nobodyさん:04/07/17 11:31 ID:l2+iEUo8
493です。
>>494
各行から以下のような形式のホスト名部分を削除
#####
YahooBB***********.bbtec.net
\\******.ppp.dion.ne.jp
\*****-*****\\****\-acca.tokyo.ocn.ne.jp
\\***\*\.speednet.ne.jp
\\\.\\\.\\\.\\.ap.highway.ne.jp
 *=数字  \=アルファベット(大文字小文字混在)
#####
これ以外にも出来るだけ柔軟に対応させたいのです。
スクリプトの行数が多くなるのは覚悟の上です。

498 :nobodyさん:04/07/17 11:47 ID:???
>>497
>>102-114

499 :nobodyさん:04/07/17 14:48 ID:TroGWL8b
>>496
ありがとうございます!
本当に助かりました。^^

500 :nobodyさん:04/07/17 15:11 ID:TroGWL8b
split関数にて以下のようなスペースが1つもしくは複数連続に続いてる部分を区切りとして
配列にする場合、split関数の引数はどのように書けばよいでしょうか?

$b = "    02600 0                1111"

現在、$a=split(" *",$b);でやっておりますが、うまく出来ません。

よろしくお願い致します。

501 :nobodyさん:04/07/17 15:15 ID:TroGWL8b
>>500
訂正です。
$a=split(" +",$b);でやっておりますが、うまく出来ません。

補足です。
上記の例の場合、配列$aに以下のように入れたいと思っています。
$a[0]=02600
$a[1]=0
$a[0]=1111

よろしくお願い致します。


502 :nobodyさん:04/07/17 15:16 ID:TroGWL8b
>>501
すいません。また訂正です。

$a[0]=1111
↓↓↓↓↓
$a[2]=1111

503 :nobodyさん:04/07/17 15:30 ID:TroGWL8b
>>502
出来ました。

スペースの全角と半角の区別をしてなかったのが原因でした。
失礼しました。

504 :nobodyさん:04/07/18 10:56 ID:???
/"[^"]*"/
これでダブルクオートに囲まれた文字列に一致すると思うんですが、
ダブルクオートの中にエスケープされたダブルクオートがあると、そこまでで一致終了してしまいます。
当然ですが。

エスケープされた物を無視させるにはどうすればいいですか

505 :nobodyさん:04/07/18 11:12 ID:???
/".*"/

506 :nobodyさん:04/07/18 11:45 ID:???
>>504
"foo\"bar" と \ でエスケープするなら
/(?<!\\)"((?:\\"|[^"])*)"/ で $1 に foo\"bar が入る。
…少なくとも Perl 5.005 以降なら。

507 :nobodyさん:04/07/18 15:24 ID:???
>>506
おおっと

なるほど・・・・
\\"|[^"]が思いつかんかった・・・・・
ありがとうございます

508 :nobodyさん:04/07/18 21:19 ID:???
あれ
でもこれだと

"test\""
これに対応しない・・・
test
になっちゃった・・・・・

509 :nobodyさん:04/07/18 22:03 ID:???
ここはチラシの裏じゃありません

510 :nobodyさん:04/07/18 22:14 ID:???
>>508
使用言語とテストコードを書いてくれんと何が悪いか分からんよ。

#!/usr/local/bin/perl
require 5.005;
$_ = '"test\""Test:"\100-", tes"T""t\"e\"S\"t"';
print "$1\n" while /(?<!\\)"((?:\\"|[^"])*)"/g;
print "$1\n" while /(?<!\\)"([^"]*(?:(?<=\\)"[^"]*)*)"/g; # ループ展開版
__END__

511 :nobodyさん:04/07/18 22:32 ID:???
あ、すんません。開発言語はPerlです。

とりあえず、HTMlタグ内とタグ外、コメントとそれ以外に分けて配列化してるんです
言うならば・・・普通のテキストを

#CDATA, tag, tag, tag, comment, #CDATA, comment, tag, comment, tag.......
みたいな感じで。分かりづらかったらすみません

512 :nobodyさん:04/07/18 22:33 ID:K8gWFvF7
$tmp = $str;
undef @tg;
undef @ot;
push @tg, $1 while($str =~ s/(<!--.*?-->)//s);
@ot = split /<!--.*?-->/s, $tmp;
$i = 0;
foreach (@ot){
push str, $_;
push str, $tg[$i++];
}
foreach (@str){
$tmp = $_;
undef @tg;
undef @ot;
undef @strtg;
push @tg, $1 while(s/(<(?:(?:\\"|[^"])*(?<!\\)"(?:\\"|[^"])*")*?>)//s);
@ot = split /(?:<(?:(?:\\"|[^"])*(?<!\\)"(?:\\"|[^"])*")*?>)/s, $tmp;
$i = 0;
foreach $r (@ot){
push ret, $r, $tg[$i++];
}
}
foreach (@ret){
print $i++, $_ if($_ && $_ !~ /\A\s\Z/s);
}


513 :nobodyさん:04/07/18 22:33 ID:???
あ インデント& sageミスった・・
読みづらくてすみません

514 :nobodyさん:04/07/18 23:15 ID:???
色々考えたんですが出来ません。。
眠いので落ちます・・・・

515 :nobodyさん:04/07/18 23:25 ID:???
iswebのヘッダの広告にマッチする正規表現を教えてください。
サンプル
ttp://koumuinsiken.hp.infoseek.co.jp/

初心者ながら頑張ったのは…
<!-- isweb auto-insert \*/ -->\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n

すんません_no

516 :nobodyさん:04/07/18 23:39 ID:???
>>515

/<!-- isweb auto-insert \*\/ -->.*?<!-- inserted by isweb server\/\* -->/s

こんなんじゃないのか?

517 :nobodyさん:04/07/18 23:52 ID:???
ttp://www.boost.org/libs/regex/doc/syntax.html
文法はこれに準拠してるみたいですが、上手くいきません…。

518 :nobodyさん:04/07/18 23:55 ID:???
>>511
HTML の属性値では " を \ でエスケープしたりせんが。
http://search.cpan.org/dist/HTML-Parser/
http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
これ以上はスレ違いになりそうだから余所でやってくれ。

519 :nobodyさん:04/07/19 00:01 ID:???
>>518

あァ勘違い。
どうもありがとうございました・・・これで解決・・・するかな

520 :nobodyさん:04/07/19 00:02 ID:???
>>515-517
http://pc5.2ch.net/test/read.cgi/tech/1062152374/478-480n
が関係あるに 300 ペリカ。

521 :nobodyさん:04/07/19 00:17 ID:???
>>520
Emeditorとかでマッチのテストしてみたんですが、
/<!-- isweb auto-insert \*\/ -->.*?<!-- inserted by isweb server\/\* -->/s
ではうんともすんとも言いませんでした。

なんか基本的な知識が欠けているような気がします。すんません。_no

522 :nobodyさん:04/07/19 00:47 ID:???
>>521
EmEditorなら複数行にマッチするようにチェック入れなきゃダメよ
もちろん/とか/sもいらない

523 :nobodyさん:04/07/19 00:47 ID:???
>>521
http://www.emeditor.com/jp/help/dlg/find/
http://www.emeditor.com/jp/help/howto/search/search_regexp_syntax.htm
http://pc5.2ch.net/test/read.cgi/software/1087716064/

<!--\s+isweb\s+auto-insert\s+\*/\s+-->(.|\s)+?<!--\s+inserted\s+by\s+isweb\s+server/\*\s+-->

524 :nobodyさん:04/07/19 07:43 ID:???
早い返信ありがとうございます。

Emeditorに複数行にマッチする設定が無いのですが…
Pro版のは"."が改行にもマッチするように設定できるみたいですがこれですかね。_no

あといろいろ試してみたのですが、スペースは\sでも でもマッチするみたいです。
<!-- isweb auto-insert \*/ -->

>>523さんのもうんともすんとも言いませんでした。
おそらく複数行にマッチするようにチェック入れないといけないんでしょうけど。

マターリがんがります…。

525 :nobodyさん:04/07/19 10:24 ID:???
<!--\s+isweb\s+auto-insert\s+\*\/\s+-->.+?<!--\s+inserted\s+by\s+isweb\s+server\/\*\s+-->

>>523
コメントタグ中の/のエスケープが抜けている

526 :nobodyさん:04/07/19 11:59 ID:???
>>524
EmEditor v4 Standard をインストールして確認したところ、\s が
改行にマッチしないし \n を含むパターンを量指定できないな。
一般的な正規表現エンジンと挙動が違うから、ここで質問しても
君の望む答は得られんだろう。この糞ソフトを使い続ける気なら
後は >>523 の専用スレに行ってくれ。

真っ当な正規表現エンジンを積んでいるソフトなら >>516 で OK 。

>>525
検索ダイアログに突っ込むのに / は関係無し。

527 :nobodyさん:04/07/19 12:29 ID:???
>>515
宣伝してるのはお前か?
http://pc5.2ch.net/test/read.cgi/hp/1089046899/39
http://pc5.2ch.net/test/read.cgi/hp/1065089862/324

528 :nobodyさん:04/07/19 12:43 ID:???
手持ちのエディタで検証してみたところ
・PeggyPad
 うんともすんとも
・PHPエディタ
 普通の文字、または左括弧"("が必要です.
と出ました。しょぼーん。

秀まるお使ったほうがいいですかね?


>>527
http://www.google.co.jp/search?num=50&lr=lang_ja&ie=Shift_JIS&oe=Shift_JIS&q=infoseek
で一番上に来るサイトを選んだだけです。とりあえず否定しときますです。

529 :nobodyさん:04/07/19 13:26 ID:???
秀丸も正規表現エンジンを変えてやったけどできなかった。
ローカルのperlを利用するマクロならできたけど。

で、マッチしたとして何をしようってのよ?
保存したソースから削除とかなら複数行置換えできるフリーソフトのほうが簡単だぞ。

530 :nobodyさん:04/07/19 21:20 ID:???
ローカルプロキシです。
あっちのスレにも誤解されそうな人がいますが…

531 :nobodyさん:04/07/19 23:57 ID:???
>>529
秀丸がダメなのはヘルプに説明があるよ。
(「検索系コマンド」の「\nを使った複数行検索の際の制限について」)

>>530
エディタのマクロかなんかでプロキシ作るのかい?

532 :nobodyさん:04/07/22 12:26 ID:???
ローカルプロキシって、まさかおみとろんでは...

533 :nobodyさん:04/07/22 14:35 ID:???
ああ、なるほど
広告を非表示にしたいわけか

534 :nobodyさん:04/07/24 14:34 ID:wErUOaoh
文中に自動リンクをしたいのですが、Googleの検索結果のようなめちゃくちゃ長いURLを短くして表示することは出来ますか?

$str = "googleの結果<br>ttp://www.google.co.jp/search?hl=ja&ie=UTF-8&q=ereg_replace&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja<br>..."
$str = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]","<a href=\\0>\\0</a>", $str);

これをこのように出力したい。
<a href=ttp://www.google.co.jp/search?hl=ja&ie=UTF-8&q=ereg_replace&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja>ttp://www.google.co.jp/search?hl=ja&ie=...</a>

535 :nobodyさん:04/07/24 14:51 ID:???
>>534
$strからgoogleの結果<br>と<br>を取り除いてから
<a href=$str>ttp://www.google.co.jp/search?hl=ja&ie=...</a> でいいだろ。

536 :nobodyさん:04/07/24 15:12 ID:wErUOaoh
早速のレスありがとうございます。

$str はいわゆる掲示板の書き込みのコメント部分です。
で、それを自動リンクしたいんですが、コメント中に長いURLを張るとテーブルが壊れます。
実際のリンクは超略しないで、表示部分だけ短く省略したいんです。

537 :nobodyさん:04/07/24 16:35 ID:???
$str = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]","<a href=\\0>リンク</a>", $str);


538 :nobodyさん:04/07/24 17:11 ID:wErUOaoh
ttp://ns1.php.gr.jp/pipermail/php-users/2002-April/007102.html
ヘボイらしいのですが、ここを参考にして何とかなりました。
お騒がせしました。

539 :nobodyさん:04/07/24 23:27 ID:b6ZQFx0g
<table> の中の、入れ子構造になっている セルを抽出する方法を教えてください


      <table> <tr> <th> TH1 </th> <td> TD1 </td> </tr> </table>
      <table> <tr> <th>
                 <table> <tr> <th> TH2 </th> <td> TD2 </td> </tr> </table>
                 TH3 </th> <td> TD3 </td> </tr> </table>

欲しいものは、
TH1 と TD1
TH2 と TD2
<table> <tr> <th> TH2 </th> <td> TD2 </td> </tr> </table> TH3 と TD3
です

環境は php4.3 です

540 :nobodyさん:04/07/25 01:22 ID:???
入れ子になっている構造は正規文法で表せません

541 :nobodyさん:04/07/25 04:31 ID:???
xslt とかの方が向いてそうだな

542 :nobodyさん:04/07/25 06:16 ID:???
>>539
http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen

543 :nobodyさん:04/07/26 14:57 ID:nr00S6gf
「test.html#aiueo」「abc.jsp#123」という文字列があって
#の前の文字列を取得したい場合はどのような正規表現にすれば良いのでしょうか○| ̄|_


544 :nobodyさん:04/07/26 15:12 ID:???
>>543
^([^#]*)
^(.*?)#

545 :nobodyさん:04/07/26 15:18 ID:???
>>544
ありがとうございます○| ̄|_
うー、もっと勉強しなければ。(*)#とかしてますた。

546 :nobodyさん:04/07/28 01:04 ID:???
xmlで
------------------------
<qqq>
  <abc>123</abc>
  <rrr>aiueo</rrr>
  <abc>456</abc>
</qqq>
------------------------
というような構造のとき、
<qqq>の中の文字列を取り出し
それに対して
/<abc>([^&]+)<\/abc>/
でマッチング処理を行うと、
------------------------
123</abc>
  <rrr>aiueo</rrr>
  <abc>456
------------------------
という結果になってしまいます。
一つ目の<abc>123</abc>に正しく反応させたいのですが
どのようにすればよいのでしょうか。
よろしくお願いいたします。

※マッチング処理の際の
 /<abc>([^&]+)<\/abc>/
 のabc部分は可変です。

547 :nobodyさん:04/07/28 01:24 ID:???
>>546
基本だと思うけれども最小マッチ
/<abc>([^&]+?)<\/abc>/

548 :nobodyさん:04/07/28 01:37 ID:???
>>547
546です。すみません、本当に助かりました。
ありがとうございます。
(とほほさんのHP見ながらやっていたんですが、それ以外にも対応していたり
 するんですね。今後は気をつけます。)

549 :nobodyさん:04/07/28 01:37 ID:???
だからとほほはアテにならない。

550 :nobodyさん:04/07/28 02:00 ID:???
XMLなら正規表現使わずともDOMやSAXで抽出できるんじゃないの

551 :nobodyさん:04/07/28 02:36 ID:???
>>550
むしろそっちの方が正攻法な気も。

552 :nobodyさん:04/07/29 00:49 ID:???
>>547
546ではないけど質問です。

/<abc>([^&]+?)<\/abc>/
だと<abc>123</abc>にはマッチするけど、<abc><123></abc>マッチしませんでした。
こういう文字コードを使われてるものもマッチさせる方法はあるんですか?

553 :nobodyさん:04/07/29 09:01 ID:???
ヴァカには使えない仕様です。

554 :552:04/07/29 10:14 ID:???
ごめんなさい、きちんと表示されてませんでした。

<abc>&lt;123&gt;</abc>

↑は/<abc>([^&]+?)<\/abc>/でマッチしないのですが、
マッチさせる方法はあるのですか?

555 :nobodyさん:04/07/29 10:24 ID:???
>>554
[^]の意味を調べたほうがいいよ。
/<abc>([^<>]*)<\/abc>/

556 :nobodyさん:04/08/01 14:12 ID:???
例えばですが、
$aには、変動する数字が代入されているとします。

【$aが、2000で割り切れる値であるとき、真を返す】

もしくは、

【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】

としたい場合には、どのようなソースになりますか?

ご教授お願いいたします。

557 :nobodyさん:04/08/01 15:25 ID:???
正規表現なんか使わずに素直に
$a%2000
じゃダメなのか?

558 :nobodyさん:04/08/01 15:30 ID:???
print $a =~ /[02468]000$/
? 'つるー'
: 'ふおるす';

でもやっぱり $a % 2000 だよなぁ。。。@こっちの方が遅かったりして。

559 :nobodyさん:04/08/01 15:57 ID:???
>>557
>>558
なるほど。割って0になるかどうかで/
どっちが早いですかねー。
あんまり変わらない??

560 :nobodyさん:04/08/01 16:44 ID:???
>>559
特に速度が肝にならないのであれば、
「意味」がわかりやすいコードを採用するべきだと思う。
なのでふつーは $a % 2000 とするんじゃないかな。

561 :nobodyさん:04/08/01 19:57 ID:???
>>560
ご丁寧にありがとうございます!
勉強になりました♪

562 :nobodyさん:04/08/03 16:53 ID:???
htaccessでRedirectMatchを使ってページを
log.apディレクトリ以外にアクセスした場合にのみ、転送させたいのですが
正規表現がよくわからずお手上げ状態です。
どなたかヒントだけでもいいので教えていただけないでしょうか

563 :nobodyさん:04/08/03 16:58 ID:9nB7Zn3+
RedirectMatch [^log.ap] http://

564 :nobodyさん:04/08/03 17:00 ID:???
>>563
それじゃ無理だよ

565 :nobodyさん:04/08/03 17:08 ID:9nB7Zn3+
RedirectMatch [^|log.ap|] http://

こうか?

566 :nobodyさん:04/08/03 17:10 ID:???
>>565
もっと違う

567 :nobodyさん:04/08/05 19:56 ID:???
いきなり質問です!
Perlで&を&amp;
に変えた後
if($message =~ /http:\/\/([a−zA−Z0−9¥.¥/¥−+#_?〜&¥%=^¥@:¥;]+)/i){
$1 =〜 s/amp¥;//g;
}
で&amp;から&に直しました。。
しかし$1の行でエラーが出ます。
さて、どうしてですか?

568 :向こうで答えた者:04/08/05 20:33 ID:???
>>567
なんだ、マルチかよ!

569 :nobodyさん:04/08/05 20:39 ID:???
>>568
向こう見てから、こっち見たからワロタ

570 :nobodyさん:04/08/05 23:09 ID:???
まさか全角文字使って・・・
と、釣られてみる

571 :nobodyさん:04/08/06 00:32 ID:???
すいません、マルチのつもりは無かったのですが。
もし不快感を催したのであれば、心からお詫び申し上げます。

しかし、私がこれを記していない事は確かです。
語調、時間差での間違いからそれは明らかです。
それを理解の上でのご返答・ご指摘宜しく御願致します。

572 :nobodyさん:04/08/06 12:07 ID:4bPJPC+C
性器豹変

573 :nobodyさん:04/08/06 16:26 ID:???
>>571
ネタ?

574 :nobodyさん:04/08/06 17:13 ID:???
s/煽り|荒らし/あぼーん/g

575 :nobodyさん:04/08/06 22:55 ID:???
"/煽り|荒らし/","あぼーん" 自慰が気になる。なに?

576 :nobodyさん:04/08/06 23:00 ID:???
>>575
>>121

577 :nobodyさん:04/08/07 03:48 ID:???
>>575は g スイッチのことぢゃないの?
確か global の略だったと思う。
パターンにマッチしたのは全部片付けちまいな、の意。

# >>576がなんで >>121 を指してるのかが気になる。

578 :nobodyさん:04/08/09 18:35 ID:???
perlの正規表現で
$value = qq|<a href="hogehoge.html">test</a>|;
$value =~ s/<.*?>//g;
print $value;

でHTMLタグを削除できるけど、これの仕組みがわからない。
*→0回以上一致する
?→0回または1回一致する
.→???????

エロイ人解説おながいします

579 :578:04/08/09 18:44 ID:???
.→改行以外の一文字に一致する

見てた解説サイトにだけちょうどなかったorz

でも*?とする意味はまだわからないでつ;

580 :nobodyさん:04/08/09 18:45 ID:???
>>578
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html

581 :578:04/08/09 19:05 ID:???
>可能な限り小さな 繰り返しでマッチを行わせたいのなら、量指定子の後に“?”を続けます。

>>580
どうして?を付けるとそうなるのかが・・・・
例えば
$test = "<aiu>test</aiu>";
$test =~ s/<.*?>//g;
としたときに.*だけですべてをひとつの文字列として捉えそうなのに(現に?がないとそうなりますが)
?を付けるだけで・・・うまくいえないorz

?がコンパイルされる瞬間はいつなんですか?
<.*の時点で可能な限りマッチしますよね・・・っていうかその時は>これはあってもなくても<.*だけで
最後まで一致するから、じゃあ>はいつコンパイルされるんだ???

もしも
s/<<.*>>//g;
としたら先に<<>>を優先してあまった文字に対して.*をやるのかな?駄目だ・・これじゃ
漏れの疑問をエロイ人に理解してもらうことすらできないorz

582 :nobodyさん:04/08/09 20:25 ID:???
>>581
*? で一塊の量指定子。量指定子としての * と量指定子としての ? を
並べて書いてるわけじゃない。

$test = "<aiu>test</aiu>"; として、

最長マッチ (<.*>) の場合:
1. $test の最初の < と パターンの < がマッチ
2. .* は「何か0文字以上を最大限」だから、aiu>test</aiu> にマッチ
3. パターンにはまだ > が残っているが、文字列は全部調べ尽くしたので
  一旦マッチ失敗。
4. .* は「0文字以上」でさえあればいいので、食べちゃった文字を一文字
 ずつ吐き出し、再試行できる (バックトラック) 。
5. .* にマッチした aiu>test</aiu> から最後の > を除外し、.* の次の
 パターンである > と比べる。
6. $test の最後の > とパターンの > がマッチ
7. パターンが全てマッチ ( < と aiu>test</aiu と > )

最短マッチ (<.*?>) の場合:
1. $test の最初の < と パターンの < がマッチ
2. .*? は「何か0文字以上を最小限」だから、( < と a の間にある) 空文字列
 にマッチ
3. a はパターン > にマッチしないので一旦マッチ失敗。
4. .*? は「0文字以上」でさえあればいいので、もっと詰め込む事もできる。
5. .*? に a を食わせる事にして、i と > を比べる。
6. 同様にパターン > が $test 中の > にぶつかるまで試行を繰り返す。
7. パターンが全てマッチ ( < と aiu と > )

583 :nobodyさん:04/08/09 21:34 ID:???
ある文字列を含まない行を取得したいのですが、
どのようにしたらいいんでしょうか?
例)
aaabbb ERROR aaabbbccc ABC dddeee
aaabbbcc ABC cdddeee
ERROR aaabbbcccddd ABC eee
というようなテキストがあるとして
errorを含まずABCを含む行だけ(この例では2行目)を
マッチさせたいんですが。


584 :nobodyさん:04/08/09 21:44 ID:???
>>583
http://www.din.or.jp/~ohzaki/regex.htm
^(?=.*ABC)(?:(?!ERROR).)*$

585 :nobodyさん:04/08/09 21:46 ID:???
>>583
@match_lines = grep((!/error/i and /\bABC\b/), split /\n/, $Strings);

586 :nobodyさん:04/08/09 22:00 ID:???
>>584, >>585さん、ありがとうございます。
しかし、教えてくださったやり方だと、自分の使っている
エディタ(Peggy)ではできないです。
これはPerlで使える方法なのでしょうか?
(Perl知りませんが。。。もしかしたらjavaの
OROとかでも使えるのだろうか?)
ちなみに秀丸エディタでは前方一致とか後方一致で
マッチさせることができるみたいですね。
そこまでいかない普通の?正規表現しか使えない環境でこれは
実現できないものでしょうか??





587 :nobodyさん:04/08/09 22:05 ID:???
EmEditorならできるよ

588 :nobodyさん:04/08/09 22:22 ID:???
>>587さん、ありがとうございます。
ちょっと見てみます。
でもすでにPeggyをシェアウェアとして長く使っており、
見やすい配色になれてしまったので、
今から乗り換えるつもりはないですが。。。
必要なときだけ使う形でいくしかないかな。
あ、でもこれ使用期限とかあるのかな。

589 :nobodyさん:04/08/09 22:30 ID:???
フリーのVxEdtorの正規表現検索でも >>584 でできたよ。

590 :581:04/08/10 07:09 ID:???
>>582
うお!?
メチャクチャわかりやすい!
保存しておきまつ!

591 : :04/08/10 13:43 ID:2tv/OiLj
>>252
便乗させてください。

if ($FORM{'name'} !~ /^(\x82[\x9f-\xf1]|\x83[\x40-\x96]|[\x88-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/){ &error; }

ここから漢字とひらがなも省いて「全角カタカナのみを許可」という形にするにはどうればよいでしょうか。

592 :nobodyさん:04/08/10 20:24 ID:???
>>591
http://www.din.or.jp/~ohzaki/perl.htm#Character

593 :nobodyさん:04/08/11 20:21 ID:???
>>592
ありがとうございました

594 :nobodyさん:04/08/12 12:26 ID:wFKNBEiY
電話番号をsjisで正規表現するにはどうすればいいでしょうか?
080-1234-5678
とか
03-1234-4321
とか
080-1234-5678
とか
08012345678
とか
0312344321


595 :nobodyさん:04/08/12 13:04 ID:???
[0-9-]*

596 :nobodyさん:04/08/12 14:16 ID:???
>>594
080-1234-5678?
08-01234-5678?
08012345678?

597 :nobodyさん:04/08/12 14:23 ID:???
どういう文字列を電話番号とみなすのか、話はそれからだ

598 :nobodyさん:04/08/12 19:55 ID:???
>>594
/(\d{2,4})-(\d{2,4})-(\d{2,4})/

こんなんか?全角数字は先に半角に変換処理しとけ。

599 :nobodyさん:04/08/12 20:02 ID:???
>>598
それじゃ
01-23-45
にも
0123-4567-8910
にもマッチしちゃうよ
ハイフンがない場合にはマッチしないし

600 :nobodyさん:04/08/12 20:11 ID:???
>>599
>>597

601 :nobodyさん:04/08/12 20:31 ID:???
>>597
>>594 がどこまでのものを求めているのかは知らんが、参考までに。
http://www.soumu.go.jp/joho_tsusin/top/tel_number/q_and_a-2001aug.html
http://search.cpan.org/~taniguchi/Number-Phone-JP-0.03/
http://perldoc.jp/docs/modules/Number-Phone-JP-0.03/JP.pod

602 :nobodyさん:04/08/12 23:02 ID:???
0△       -×××× -□□□□
0△△     -×××   -□□□□
0△△△    -××    -□□□□
0△△△△  -×      -□□□□
0△△△△△-□□□□

0から始まる9or10or11桁
ex>09012345678 (携帯は11桁?)
  家電は9桁(例外)と10桁?

全角も含めると(?:\x82[\x4F-\x58])を入れてやる?
ムズイな


603 :nobodyさん:04/08/12 23:08 ID:???
>>602
それ何コードだ?

604 :nobodyさん:04/08/12 23:18 ID:???
>>602
SJISだろうよ

605 :nobodyさん:04/08/12 23:19 ID:???
× >>602
○ >>603

606 :nobodyさん:04/08/12 23:30 ID:???
バカかこいつは?
全角を半角に直すという処理をなぜ思いつかない

607 :nobodyさん:04/08/13 01:10 ID:???
題意がわからんのでなんともいえないけど、
マッチした文字列をそのまま取り出す、
ということなら全角を半角に直しちゃまずいと思われ。

608 :nobodyさん:04/08/13 08:12 ID:???
>>594を見ると数字の全角半角の混ぜ書きはだめなような気がする。
ハイフンはいいのかな?

609 :nobodyさん:04/08/13 09:18 ID:???
>>606
バカかこいつは?
どうせクエリを受けたらEUCに変換するんだから、全角→半角処理などいらぬ。


610 :nobodyさん:04/08/13 09:57 ID:???
>どうせクエリを受けたらEUCに変換するんだから、全角→半角処理などいらぬ。
大丈夫かコイツ・・・

611 :594:04/08/13 10:22 ID:???
大漁!

612 :nobodyさん:04/08/13 11:18 ID:???
>電話番号をsjisで正規表現するにはどうすればいいでしょうか?


613 :nobodyさん:04/08/13 12:28 ID:???
eucに変換後、数字とハイフンを半角に変換(↓参照)してハイフンを削除。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H
半角数字だけになれば何とでもなんだろ。

614 :nobodyさん:04/08/13 23:16 ID:???
結局誰一人として「電話番号をsjisで正規表現する」ことのできない無能揃いの糞スレ。

615 :nobodyさん:04/08/13 23:29 ID:???
なんでsjisなんだろう
この人内部エンコーディング分かってるのかな?

616 :nobodyさん:04/08/14 00:05 ID:???
それ以前に、必死に煽れば答えを出してくれるという発想が痛い

617 :nobodyさん:04/08/14 01:37 ID:???
>>615
近頃sjisで書いてるプログラムが多いからだろ

618 :nobodyさん:04/08/14 02:10 ID:???
元質問者がいなくなったら放置しとけよ

619 :nobodyさん:04/08/14 02:39 ID:???
>>614
>>614
>>614
>>614
>>614

620 :nobodyさん:04/08/14 10:24 ID:???
>>619
恥ずかしいからやめとけ。
s/煽り|荒らし/あぼーん/g
これが鉄則

621 :nobodyさん:04/08/14 11:16 ID:???
ここは道場だから、質問者ががんばらないといけないんだよ。

622 :nobodyさん:04/08/14 11:25 ID:4Tdhf0SR
面白そうなスレなんであげとく

623 :nobodyさん:04/08/14 11:29 ID:???
>>594>>614だったらえらくえらそうな質問者だな。答える気なくした


624 :nobodyさん:04/08/14 11:42 ID:???
>>602
全角含めるならまず置換して
最初はゼロ、1から5桁の数字、ハイフン一かゼロ、1から4桁の数字、ハイフン一かゼロと四桁の数字が1かゼロ
でそのまま答えでてるんじゃないの?


625 :nobodyさん:04/08/16 01:23 ID:???
>>624
もう終ってるからどうでもいいが、言葉でごちゃごちゃ言うより実際のコーディング例を書いたほうが
100倍わかりやすい。まあ今回は質問者がクソだから、コーディング例など書かないでほしいが。

626 :nobodyさん:04/08/16 06:38 ID:???
コードを理解できてないから質問するとばっかり思ってた。

627 :nobodyさん:04/08/16 08:10 ID:???
電話番号は>>595>>597で終わってると思うんだけどな。
もっと詳しく知りたいなら>>597に答えないと。

628 :nobodyさん:04/08/16 10:56 ID:???
abcdef @ hijklmp @ aiueos.
という文字列があって1つ目の@を(1)、2つ目の@を(2)という風に
置換したいのですが、どのように記述すれば良いのか教えてもらえますと助かります。

629 :628:04/08/16 11:10 ID:???
すみません。PHPスレのほうで特殊な関数を使うことによって
解決しました。お騒がせしてすみません。

630 :nobodyさん:04/08/16 15:12 ID:???
>>628
まじかよ!?
正規表現でも実現しようぜ。

for (0..100){
unless ( $value =~ s/@/$_/ ) { last }
}

perlならこれで動くか?なんか怖いからテストしたくないなw





631 :nobodyさん:04/08/16 15:16 ID:???
全角数字(EUC)を半角数字に変換。
<ルール>
1.言語特有のモジュールを使わずに実現しる。
2.処理前に配列の中に全角数字、半角数字を準備するのは禁止

おまいらこんなはちゃめちゃなルールでできるか?上司が意味不明なこと言ってきたんだよorz

632 :nobodyさん:04/08/16 15:34 ID:???
>>630
perl ならこんな感じか。

$i = 0;
$s =~ s/@/"(" . ++$i . ")"/eg;
print $s;

633 :nobodyさん:04/08/16 15:55 ID:???
>>631
my $str = '1234567890';# EUC
$str =~ s/(?:\xA3([\xB0-\xB9]))/ chr(ord($1)-0xB0+ord('0')) /eg;
print "$str\n";
他の種類の全角文字も入る可能性があるなら、
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
を参考にするといい。

634 :nobodyさん:04/08/16 16:06 ID:???
>>631はごく普通を意味不明と言うめちゃめちゃな質問だな

635 :631:04/08/16 16:25 ID:???
>>633
ウホッ!?

636 :633:04/08/16 19:56 ID:???
ハッ!?
直前までPerlのスレ見てたんで思わずPerlで書いてもた・・・

637 :nobodyさん:04/08/16 21:39 ID:???
配列の中じゃなけりゃいいんだから、s/0/0/gからs/9/9/gまで
10個書き並べればOKじゃないかという気もする

638 :nobodyさん:04/08/16 21:48 ID:???
>>631
>>633
0xA3B0〜0xA3B9までが0〜9なんだよ。
第1バイトが0xA3なのを確認して第2バイトから0xB0を引けばよろし。
もしくは2バイトずつのまとまりから0xA3B0を引けばよろし。


639 :nobodyさん:04/08/16 21:53 ID:???
つーかCで良く実装されてるんだからその通りに実装すりゃいいじゃん

640 :nobodyさん:04/08/20 09:23 ID:???
ずいぶん寂れてるな。ここらで俺が問題を出してやろう。

XSS対策のHTMLエスケープを1行で済ませ。もちろん消すのじゃなくて、特殊文字に置換するんだぞ。

641 :nobodyさん:04/08/20 10:03 ID:???
(´-`).。oO(素直に「XSS対策のHTMLエスケープを1行で描いてみました。
 (式)
無駄な部分や、非効率な部分がありましたら添削いただけるとありがたいです」って書けばいいのにね。。。)

642 :nobodyさん:04/08/20 15:10 ID:???
>>641
だって書いてないし;

643 :nobodyさん:04/08/20 17:34 ID:???
(´-`).。oO(素直に
        「XSS対策のHTMLエスケープを1行で書くやり方を教えてください」
       って言えばいいのにね・・・)

644 :nobodyさん:04/08/20 17:59 ID:???
>>643
別に教えてほしいわけじゃないもん

645 :nobodyさん:04/08/20 19:58 ID:???
ここまで自虐的な構ってくんが拝めるのもあと半月か

646 :nobodyさん:04/08/20 20:13 ID:???
まっ、宿題は自分でしろと言うことですね。

647 :nobodyさん:04/08/21 19:21 ID:zyqI2KUi
置換ツールのスレからきました。
置換ツールで正規表現を使いたいんですけど、

<h2>8/21</h2>

<h2 id="A21">8/21</h2>
という風に、「日付に当たる部分」を「idとして挿入する」という正規表現の書き方をお教え願えませんでしょうか?

#正規表現=perlだと思って、ここにきたんですが、間違っていたら誘導お願いします。

648 :nobodyさん:04/08/21 19:45 ID:???
>>647
>>1
s|(?<=<h2)(>\d\d?/)(\d\d?)(?=</h2>)| id="A$2"$1$2|g;

649 :nobodyさん:04/08/21 20:05 ID:???
>>648
御手数おかけしてすみません。
なんだか動作しませんでした。

ソースを確認したところ、
<h2>8/21</h2>
ではなくて、
<h2>8/21 タイトル</h2>
になっていたので、うまくいかなかったのかもしれません。

>>1から巡っていろいろ勉強してみます。
有難う御座いました。本当に感謝しています。

650 :nobodyさん:04/08/23 13:06 ID:???
>>649
こいつアフォってことで間違いない?

651 :nobodyさん:04/08/23 14:30 ID:???
>>650
アフォでもなんでもいいですよ。
正規表現必要な分だけ勉強して覚えたのでできましたし。
なんで不要に煽るんですかね。

652 :nobodyさん:04/08/23 18:06 ID:???
>>651
なんで質問すらまともにできないんですかね。

653 :nobodyさん:04/08/23 18:09 ID:???
>>652
済んだことをねちねちと。

654 :nobodyさん:04/08/23 19:14 ID:???
>>653
タイトル読めませんか?

655 :nobodyさん:04/08/23 19:59 ID:???
タイトルの正規表現が理解できなかったとみえるな

656 :ピエール:04/08/23 22:11 ID:aJIVYOH0
http://ada-ch.jpn.org/ez/ 煽りならこのサイトが一番

657 :nobodyさん:04/08/24 03:13 ID:???
>>651
>アフォでもなんでもいいですよ。
なんでもよくない。間違いなくお前はアフォだ。リアルに言うと知恵遅れ。
自分がアフォだとも気づかずに必死に勉強とかやってるのってなんか空しいな。
まずは自分がアフォだと認識して、具体的にどの能力が劣るのかを知りなさい。

これからは質問前に自分の疑問と、どうしたいかっていうことをきちんとまとめてから
ここにきて書きはじめなさい。急がば回れってね。質問前に遠回りしてもしっかりまとめれば
誰かがちゃんと答えてくれるよ。

658 :nobodyさん:04/08/24 17:59 ID:???
>>657
いや、解決したから。

659 :nobodyさん:04/08/24 18:23 ID:5aeoylmi
au使いでPCのアドレス(メーラーはBecky!2)にメールを自動転送しています。
その際に受信ボックスから、携帯メール(docomo ezweb vodafone)をフィルタリングマネージャで
別のフォルダ(フォルダ1と仮定)に振り分けたいのですが、
その中でも彼女のメールだけさらに別フォルダ(フォルダ2)にしたいと思ってます。

つまり、
" ***@docomo.ne.jp " " ***@ezweb.ne.jp " " ***@*.vodafone.ne.jp "から来たメールは
フォルダ1に振り分けたいが、もしそれが彼女のアドレスの場合はフォルダ2に振り分ける、
といった感じです。

どのように記述したらいいのでしょうか?

以下、Beckyヘルプより引用


下記の正規表現がサポートされています。

^行頭にマッチします。
$行末にマッチします。
X|YXまたはYにマッチします。(X,Yは正規表現です)
[A-Z]AからZまでの間の文字にマッチします。(A, Zは任意の文字)
[^A-Z]AからZまでに含まれない文字にマッチします。
[ABC]A,B,Cのいずれかの文字にマッチします。 (A,B,Cは任意の文字)
[^ABC]A,B,Cのいずれでもない文字にマッチします。
.任意の一文字にマッチします。
X*Xの0以上の繰り返しにマッチします。 (Xは正規表現)

X+Xの1以上の繰り返しにマッチします。 (Xは正規表現)
X?Xまたは空文字列にマッチします。


()で囲んだ正規表現は解釈の優先順位が高くなります。

660 :nobodyさん:04/08/24 19:08 ID:???
まずは彼女のメルアドを晒せ
漏れがメル友に(ry

661 :nobodyさん:04/08/24 19:25 ID:???
>>659
Becky!のフィルタの仕様がわかんないけど、

^From:.*kanojo.kawaiiyo.kanojo → まず大事なメルを保護
^From:.*(どこも|あう|ぼだほん)\.ne\.jp → 残りのうち携帯メルを振り分け
(中略)
どれにも当てはまらないもの → ベタな inbox に落ちる

こんな仕組みじゃないのかな。

むしろ、こちらでどうぞ。
メールソフト Becky! Part9
http://pc5.2ch.net/test/read.cgi/software/1090377005/

662 :659:04/08/24 20:38 ID:???
>>660
(・ε・)

>>661
よく分からないので該当スレに逝ってきます。
ありがとうございました!

663 :nobodyさん:04/09/03 00:28 ID:V2uWGL3l
カンマもありうる文字列<table><tr><td>1,2,3,4</td></tr><tr><td>a,b,c,d</td></tr></table>カンマもありうる文字列

これでテーブルタグの中にあるカンマだけ</td><td>に置き換えたいのです。

どんなもんでしょう。

664 :nobodyさん:04/09/03 02:17 ID:???
>>663
Perl なら

s{(?<=<table>)(.+?)(?=</table>)}
 { (my $str = $1) =~ s|,|</td><td>|g; $str }eg;


665 :663:04/09/03 07:50 ID:???
>>664
Perlです。ありがと。正規表現一発ではムリということか。
使ったことのない構文がたくさん入ってるんで、ちょっと解析してみます。

666 :663:04/09/03 08:46 ID:???
>>664
とりあえず解析後回しで突っ込んでみたら完璧でした。
もしかして<table>〜</table>が複数ブロックあるとダメかなと思ったけどOK。
なんか自分ではまったく考えられない構文だったのでちょっと絶望感。

とりあえず誰かの役に立てばと、作ってたルーチン晒します。
アウトライン指定を行頭ピリオドの数で、行頭カンマをテーブルと判断して
自動整形。
アウトラインはH1は掲示板タイトルに使うし、H2は記事タイトルに使うから、
H3からね。

$comment = &sanitize($comment,3);
$comment = "\x0A$comment\x0A";
$comment =~ s/\x0A+/<\/p><p>/g;
$comment =~ s/<p>\.\.\.\.([^<]*)<\/p>/<h6>$1<\/h6>/gi;
$comment =~ s/<p>\.\.\.([^<]*)<\/p>/<h5>$1<\/h5>/gi;
$comment =~ s/<p>\.\.([^<]*)<\/p>/<h4>$1<\/h4>/gi;
$comment =~ s/<p>\.([^<]*)<\/p>/<h3>$1<\/h3>/gi;
$comment =~ s/<p>,([^<]*)<\/p>/<tr><td>$1<\/td><\/tr>/gi;
$comment =~ s/<tr>[^,],<\/tr>/<\/td><td>/gi;
$comment =~ s/<\/p><tr>(.*?)<\/tr><p>/<\/p><table><tr>$1<\/tr><\/table><p>/gi;
$comment =~ s{(?<=<table>)(.+?)(?=</table>)}{ (my $str = $1) =~ s|,|</td><td>|g; $str }eg;
$comment =~ s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<a href="$1" target="_top">$1<\/a>/gi;
$comment = "<p>$comment</p>";
$comment =~ s/<p><\/p>//gi;

667 :nobodyさん:04/09/03 16:41 ID:XAO5vI6O
リンク集のぺーじより、
ファイルネームがfoo.cgiに関するリンクをすべて洗い出したいとき、
どのように書けばよいのでしょうか?
/<A 〜〜foo.cgi.*?>/ig
という感じになると思うのですが〜〜の部分がよくわかりません。
ちなみに、href=をつけていないのは、改行がはいっていたり、classなどよけいなタグが入っていることがあるためです。



668 :667:04/09/03 16:56 ID:???
ありゃ、自己解決した。
/<A .*HREF=.*foo.cgi.*?>/ig
でよろしいようですね。
検索結果がタグになっていたんで、Web表示だとうまく見えていませんでした。




669 :nobodyさん:04/09/03 17:52 ID:???
>>667-668
よろしいかどうかは君が相手にしているデータ次第なわけで。

$_ = <<'EOF';
<a class="TRAP" name="href">foo.cgi</a>
<a
href="foo.cgi" class="OK">OK</a>
<a class="OK" href="foo.cgi">OK</a><a href="foo.cgi" class="OK">OK</a>
<a class="OK" href="foo.cgi"
>OK</a>
<a href="fooocgi">TRAP</a>
<a href="bar.cgi?href=foo.cgi">TRAP</a>
<a hreflang="ja" name="fooocgi">TRAP</a>
EOF

print '[', join("]\n[", /<A .*HREF=.*foo.cgi.*?>/ig), "]\n";
print "---\n";
print '[', join("]\n[", /<a\b[^>]*?\shref=[^>?]*?foo\.cgi[^>]*>/ig), "]\n";

まぁ解決したようなのでこれ以上は突っ込まんでおく。

670 :nobodyさん:04/09/05 17:08 ID:VHVjccb7
phpで第二空白から第三空白までの文字列取得したいんですが、
どのような方法ありますか?
aaaaaa aaaaa aaaaaaaaaaaaa aaaa aaaaa
         |← ここです →|

671 :nobodyさん:04/09/05 18:32 ID:???

空白を正規表現で何て書くか分かったら解決な。

672 :nobodyさん:04/09/05 19:42 ID:???
正規表現使うより
スペースでexplodeしたほうがいいんじゃないの?

673 :nobodyさん:04/09/06 07:17 ID:???
>>672
$a = array_slice(explode(" ",$aaaaa), 2, 1);
これでいいですか。

674 :nobodyさん:04/09/06 18:07 ID:???
>>673
そこまで分かっているなら試せばよかろう・・・

675 :nobodyさん:04/09/07 09:23 ID:Z5/Re9xz
<a href="../test/read.php/bbs/1234567890/10" target="_blank">>>10</a>

<a href="../test/read.php/bbs/0987654321/155" target="_blank">>>155</a>
xxxxxxxxxx.datから上記のようなアンカーリンクを>>10のようにしたい。
どなたかお願いします。

676 :nobodyさん:04/09/07 09:24 ID:Z5/Re9xz
?a href="../test/read.php/bbs/1234567890/10" target="_blank">&gt;&gt;10</a>

?a href="../test/read.php/bbs/0987654321/155" target="_blank">&gt;&gt;155</a>
xxxxxxxxxx.datから上記のようなアンカーリンクを>&gt;0のようにしたい。
どなたかお願いします。

677 :nobodyさん:04/09/07 13:36 ID:???
>>675-676
サパーリ意味ワカンネ

678 :nobodyさん:04/09/07 14:23 ID:???
>>675-676
同じくマッタク意味ワカラン

679 :nobodyさん:04/09/07 16:33 ID:???
>>675は専用ブラウザのログの減量化を目論んでおり
スレ内アンカーのAタグを削除すればかなり効果があると睨んでいる。
専用ブラウザのためAタグが無くともポップアップするので困らないと思ったのだろう。
そしてアンカーを削除することに成功し、ポップアップしないことを確認し
今度は「それを元に戻す正規表現を教えて下さい」と質問しに来るのだ。

680 :nobodyさん:04/09/07 17:22 ID:???
意味がわからん、もっと分かりやすく説明してくれ

681 :nobodyさん:04/09/07 17:44 ID:???
簡潔に言えば、「Datからアンカーを除去したい」だろ。
自分でやれよそれくらい。>>1

682 :nobodyさん:04/09/07 17:49 ID:???
アンカー消すのか?
いいのか?
2chブラウザはアンカー自動でして無いと思うけど
dat直読みだろ。それでいいのか?
それなら簡単に消せるだろうが、なんに使うのか

683 :nobodyさん:04/09/09 09:11 ID:???
質問です。

「2ch」をアドレスに含まない「http」で始まるリンクにマッチさせることはできますか?
オートリンクで挿入されたリンクを対象にしています。

<a [^>]+(!?2ch)[^>]+>http
こんな感じかなあとやってみたのですが、出来ませんでした。

684 ::04/09/09 09:13 ID:???
書き忘れ。

マッチする場所は問いません。

685 :nobodyさん:04/09/09 20:10 ID:???
漏れなら、正規表現ひとつで済まさずに、
http:// でマッチ」→「2ch にマッチしたら飛ばす」→「処理」、とかするかなあ。

686 :683:04/09/09 21:31 ID:???
回答ありがとうございます。

$regexp = <STDIN>;
if($log =~ /$regexp/){

perlで上記のような感じになってるんで半分諦めていますが、
できるものなら高度な正規表現を使ってみたいと思った次第なのです。
Perl5.8.2で使える正規表現で何かいい表現はありますか?

687 :nobodyさん:04/09/10 10:41 ID:???
>>683
<a (?![^>]*2ch)[^>]+>http


688 :683:04/09/10 10:46 ID:???
>>687
希望どおりにマッチしました。
[^>]を中に入れてしまえばよかったんですね。
あと ?! と !? 間違ってましたね。。。
ありがとうございました。

689 :nobodyさん:04/09/13 00:58:55 ID:???
perlですが、
URLにマッチさせる際、正確に(https://とかにも)マッチするようにしたいのですが、
どうすれば一番簡潔に決められますか?

あと、メアドと電話番号のそれぞれをmailto:とteltoに置き換えたいのですが、どうすればよいか思い浮かびません。
英数@英数とかにすると電話番号@〇〇.ne.jpとかが判別できないので…

よろしくお願いしますm(_ _)m

690 :nobodyさん:04/09/13 02:41:38 ID:???
>>689
URL: http://www.din.or.jp/~ohzaki/perl.htm#httpURL
メールアドレス: http://www.din.or.jp/~ohzaki/perl.htm#Mail
電話番号: >>594-602


691 :???にマッチさせるには?:04/09/14 23:26:21 ID:Kd7HVFLL
「ID:???」(あるいは「???」)にマッチするか判定する正規表現はどう書きますか?

$id =~ /ID:???/
とすると、エラーになりました。↓
Nested quantifiers in regex; marked by <-- HERE in m/ID:??? <-- HERE /

WindowsXPでActivePerlを使用しています。

692 :nobodyさん:04/09/14 23:30:02 ID:???
>>691
エスケープ

693 :nobodyさん:04/09/14 23:41:29 ID:???
>>691
エラーメッセージ見てわかってくれよ・・・

694 :691:04/09/14 23:56:41 ID:Kd7HVFLL
>>692-693
できました。ありがとうございました。

695 :nobodyさん:04/09/19 15:59:53 ID:???
正規表現を表示するフォントで見やすいものありますか?
等幅のゴシックかなあ・・・。

696 :nobodyさん:04/09/19 23:14:45 ID:???
>>695
http://pc5.2ch.net/test/read.cgi/tech/1032261438/
http://pc5.2ch.net/test/read.cgi/prog/1090997542/


697 :nobodyさん:04/09/20 10:26:19 ID:???
>>696
THX!
上のスレの>>55がめちゃくちゃ役に立ったよ。

698 :nobodyさん:04/09/22 17:13:59 ID:JesDYCu3
#含む#以降の文字列にマッチさせるにはどうすればよいでしょうか?

あと、090xxxxxxxx@example.comみたいなメアドを電話番号と区別するにはどうすればよいでしょうか?
(電話番号はtel:メアドはmailto:にしたいのです)

よろしくお願いしますm(_ _)m

699 :nobodyさん:04/09/22 17:46:51 ID:???
> #含む#以降の文字列にマッチさせるにはどうすればよいでしょうか?
$'

> あと、090xxxxxxxx@example.comみたいなメアドを
> 電話番号と区別するにはどうすればよいでしょうか?
$`

700 :nobodyさん:04/09/23 02:56:01 ID:???
このスレって丸投げもOKになった?

701 :nobodyさん:04/09/23 04:38:16 ID:???
>>700
最初から OK だよ。

但し、丸投げとバレた時点でアウト、というルール。

702 :nobodyさん:04/09/26 07:43:52 ID:FGVvy0I6
hoge12234.jpg
みたいなファイルネームの文字列から数字の部分だけを取り出して変数に代入したいんですが、どのようにすればいいんでしょうか?

703 :nobodyさん:04/09/26 07:50:03 ID:???
>>702
>>1

704 :nobodyさん:04/09/26 07:57:37 ID:FGVvy0I6
1のどれ見ればいいのですか?

705 :nobodyさん:04/09/26 08:00:19 ID:???
>>704
何故にそこまで指定せにゃならんのだ
ヒント与えてやってんだから自分で探せよ

706 :nobodyさん:04/09/26 08:01:04 ID:???
>>704
> このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
> 質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

>>701も見てみろ

707 :nobodyさん:04/09/26 08:04:00 ID:???
道場ですから

708 :nobodyさん:04/09/26 08:04:27 ID:FGVvy0I6
>どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
>質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
て書いてありますね。
使用言語はperlです。

709 :nobodyさん:04/09/26 08:15:50 ID:???
> 700 名前:nobodyさん 投稿日:2004/09/23(木) 02:56 ID:???
> このスレって丸投げもOKになった?


> 701 名前:nobodyさん 投稿日:2004/09/23(木) 04:38 ID:???
> >>700
> 最初から OK だよ。

> 但し、丸投げとバレた時点でアウト、というルール。

ちょっとは自分で努力しなさい。
やった結果がうまく出来なかった場合、漏れたちがアドバイスをしよう。

710 :nobodyさん:04/09/26 08:26:31 ID:FGVvy0I6
考えたのは
ファイル名を一文字ずつ分解して配列変数に入れて、一つずつ0-9に該当するか見ていって、該当したらスカラー変数に入れてくっつけていく。
いかにも効率がわるいですが、どうすればいいですか?

711 :nobodyさん:04/09/26 08:28:13 ID:???
何のために正規表現があるのかと

712 :nobodyさん:04/09/26 08:31:49 ID:???
正規表現理解しろよ

713 :nobodyさん:04/09/26 08:33:31 ID:FGVvy0I6
だから、どう表現していいのかわからないので教えてください。
ということで書き込みしてるわけですが。

714 :nobodyさん:04/09/26 08:36:37 ID:???
ちょっとは自分で努力しなさい。

ってループしてる…

715 :nobodyさん:04/09/26 08:42:00 ID:???
>>1のリンク先見ろって言ってんのがわからないかなぁ
見た上で>>710みたいに考えてるんだったらやり手だね

716 :nobodyさん:04/09/26 08:51:07 ID:???
てか釣りだろ、放置汁

717 :nobodyさん:04/09/26 08:51:53 ID:FGVvy0I6
>>715
さっきから、誰に向かって、書いてるつもりなの?
こんな質問スレで、自分にだけわかる言葉でレスつけても仕方ないと思うんだけど、
まさしく>>715はバカの壁ってやつですね。

718 :nobodyさん:04/09/26 08:54:57 ID:???
やっぱ釣りか
さーて釣り宣言まだかな

719 :nobodyさん:04/09/26 08:57:36 ID:FGVvy0I6
時間が悪かったみたいですね。
残念。

720 :nobodyさん:04/09/26 08:58:39 ID:???
よくある光景だなぁ

721 :nobodyさん:04/09/26 09:00:45 ID:???
正規表現スレで>>710な発言してる時点でいつ来ても同じだな

722 :あぼーん:あぼーん
あぼーん

723 :nobodyさん:04/09/28 15:15:15 ID:???
[:graph:]に日本語が該当しないのは仕様ですか?
キーワード処理に便利なんですが。

724 :nobodyさん:04/09/28 17:57:22 ID:???
>>723
仕様です。

725 :723:04/09/28 18:52:44 ID:???
>>724
ありがとうございます。

726 :nobodyさん:04/09/29 02:49:00 ID:???
_

727 :nobodyさん:04/10/01 01:34:03 ID:???
数値のみをマッチさせるにはどうしたらいいですか?
アルファベット等がどこかに含まれたらマッチしない表現を考えています。
言語はPerlです。
1
10
-10
0.101
100.1
-1000.01
桁数固定なら深く考えることもないのですが、上みたいなマイナスが入ったり小数点が動いたりする可能性を考えたらわからなくなってしまいました。


728 :nobodyさん:04/10/01 14:00:54 ID:???
こんなんどうだろう。
^-?[0-9]+(\.?[0-9]+|[0-9]*)$

729 :nobodyさん:04/10/01 14:05:48 ID:???
ミス。^-?[0-9]+?(\.[0-9]+|[0-9]*)$

しかし汚ねーなあ。たぶんググればまともなの出てくるよ。

730 :nobodyさん:04/10/01 14:12:08 ID:???
>>729
数字の読み方としてはそれもありだが、正規表現的にはコレで十分

/-?[0-9]+(\.?[0-9]+)?/

8進数マッチするけどいいんだよね

731 :nobodyさん:04/10/01 14:13:33 ID:???
コピペしたらおんなじミスしたw

/-?[0-9]+(\.[0-9]+)?/

732 :nobodyさん:04/10/01 14:19:08 ID:FcpwUMKG
-

733 :nobodyさん:04/10/01 14:56:15 ID:???
aaaaa0.1aaaaa にマッチするよ

.5 とかもあるだろ?

734 :nobodyさん:04/10/01 15:02:38 ID:???
なんか初心者が・・・

735 :nobodyさん:04/10/01 15:03:27 ID:???
>>733
反例は正規表現でお願いします。

736 :nobodyさん:04/10/01 15:08:12 ID:???
.5 みたいな表記はステでいいんじゃないの?
>>727が判断することだけど。

# Perlスレでは確か「n進数や指数はどうよ?」でブームが終わったような。

737 :733:04/10/01 15:10:26 ID:???
これは?
/^-?\d*(?:\.?\d+)?$/

738 :nobodyさん:04/10/01 15:11:04 ID:???
まあ井川のサインボールでも見てリフレッシュしろよ
http://2chart.fc2web.com/2chart/igawa.html

739 :nobodyさん:04/10/01 15:12:00 ID:???
>>737
・・・・・・・・・。

740 :733:04/10/01 15:12:51 ID:???
あっ!やっぱ間違えた。。。空文字にマッチしてしまう。。

741 :nobodyさん:04/10/01 15:14:01 ID:???
放置しろ。

742 :nobodyさん:04/10/01 17:19:34 ID:???
/^-?(0|[1-9]\d*)(\.\d+)?$/

743 :727:04/10/01 21:36:43 ID:???
こんばんは。
いくつもありがとうございます。
>>733
.5のような表記は無しです。
試してみたところ>>729 >>742が目的にあった動作をするようなので使ってみます。
みんな良く調べて何が違うのが勉強してみます。
正規表現、便利だけど難しいですね

744 :nobodyさん:04/10/02 16:22:06 ID:???
$mes = ereg_replace('([^[:graph:]])([[:alpha:].]{2,})([^[:graph:]])',
'\1<a href="keyword.php?q=\2">\2</a>\3', ' ' . $mes);

こうやって、URLの可能性がないアルファベットの連続をキーワードとしてリンクさせたいのですが、
これだとスペース置きにキーワードが並んだ場合、どちらかしか replace されません。
MSN Messenger など MSN と Messenger 両方にマッチさせたいのですが、
何か良い方法はありませんでしょうか。

745 :nobodyさん:04/10/03 02:24:24 ID:???
ereg_replace('([[:alpha:].]{2,})((?=[^[:graph:]])|$))',
'<a href="keyword.php?q=\1">\1</a>', ' ' . $mes)

とりあえず、これでいいと思う。
自分はURLを「http:」で始まる単語としたくて、
(?<!http:)([^\s]{2,})
でやってみたけど、
[^\s]が全部取っちゃうようでうまくいかなかったorz

746 :nobodyさん:04/10/03 02:25:54 ID:???
スマソ。括弧を1つ取るの忘れた。
×((?=[^[:graph:]])|$)) ○((?=[^[:graph:]])|$)

747 :744:04/10/03 04:57:52 ID:???
>>745-746
回答ありがとうございます。

XREA を利用しているので PHP の 4.3.8 を利用しているのですが、
Warning: ereg_replace(): REG_BADRPT が出てしまいました
(いろいろ試したみたところ、 (?= に反応しているようでした)。
preg mb_ereg でも同様のコードを試してみたところ (?= はパスするものの
ereg と違って [:graph:] に日本語がマッチしてしまうようです(こっちが正しいのかな?)。

745のコードを参考に mb_ereg で以下のように書き直してみたところなんとか動作しました。

$mes = mb_ereg_replace('([a-zA-Z.]{2,})((?=[^a-zA-Z0-9<>":;.,/=?+_&@\-])|$)',
'<a href="keyword.php?q=\1">\1</a>', $mes);

よくわからないのですが、[:alpha:]を使うと漢字にマッチしたりして挙動が変になっていました。

うーん、まだまだ勉強が必要です。

748 :nobodyさん:04/10/03 05:14:58 ID:???
eregはPosix拡張、pregはPerl拡張。

749 :nobodyさん:04/10/03 05:29:07 ID:???
正規表現ライブラリがちがううんだよ。PHPマニュアルにも書いてあるが、
例によって>>1の正規表現メモんとこ参照すると分かりやすい。

750 :nobodyさん:04/10/03 22:20:30 ID:???

あるシステムの独自タグをあつかっています。

<XXXX Name = Test1 number = 1 value1 = "テスト" value2 = "テスト\"ああ\"" value3="テスト3 \t test">
</XXXX>

という具合に、<XXXX で始まるタグの中にかかれた各属性と値をそれぞれ分割したいのです。最初、Javaプログラムで頑張って書いていましたが、
へたれな自分のプログラムが長くなってしまいバグも所々に…。くせものが属性と値の表記で、valueというキーの値がaaaa としても、
value = aaaa の場合
value = "aaaa" の場合で異なる値にしたい(" がポイント)
value=aaaa や、途中で改行やタブが入る、
value=
aaaa
といった場合もあります。

値の中に、ダブルクォーテーションが入る場合やスペースが入った場合を考慮してJavaプログラムで何とかしようと思ってましたがスパゲッティ状態です。

正規表現でエイヤっと属性名と値で分割させたいのですが、、、>>1のサンプルをあさってますが、もし、何か良いモノ知っていましたら教えてください。


751 :750:04/10/03 22:21:42 ID:au5XkXk9
ageときます。スマン

752 :nobodyさん:04/10/04 01:59:41 ID:???
>>750
その独自タグの仕様をはっきりさせなければ誰もわからんよ。
「=」の隣にスペースが入っていたりダブルクォートでくくっていたり
いなかったりしてるし。

753 :nobodyさん:04/10/04 02:00:16 ID:???
s/<XXXX[\n\s]+([^>]*)>(.|\n)*<\/XXXX>/$1/g;
/(.+?)[\n\s]*=[\n\s]*("(\\"|[^"])+"|[^\s]+)(?:[\n\s]+|$)/; #$1=属性, $2=値

やっとできた・・・。
\"を含める方法とか、勉強になりました。

754 :753:04/10/04 02:10:49 ID:???
>>752
そうだ、
>value = aaaa の場合
>value = "aaaa" の場合で異なる値にしたい(" がポイント)
これがどういう結果を望んでいるのか分からないままやってたw

とりあえず、ダブルクォートは残す仕様にしておいたけど。

755 :750:04/10/04 07:43:16 ID:3m/jnQ5F
ありがとう〜(;´д`) とりあえず、ためしてみます。。

>>752にあるように、= の両隣は、スペースが入ったり、入らなかったりします。厳密にはJavaでいうところのホワイトスペースを許可してて、タブとか全角スペースなどもありです。ここは許可しないことを改善してもらうつもりです。
あとで結果報告しますね。ありがとう〜

756 :nobodyさん:04/10/04 11:31:31 ID:???
可能であれば、独自な形式でなくて、
みんなが使ってるフォーマット (XML ね) にしてもらうようにした方が良いと思う。

757 :nobodyさん:04/10/04 15:15:50 ID:???
同感。あとちゃんとtokenizeすればスパゲッティにはならんでしょ、このくらい。

758 :nobodyさん:04/10/11 11:12:51 ID:ek9GJkPH
質問させてください。
EZwebの絵文字をShift_JISコードに変換する正規表現を書いたつもりなのですが、
”♪”マークなど一部の絵文字以外の記号にマッチしてしまいます・・・。

(使用言語:PHP 4.3.3)
$sjis='[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
$text=preg_replace("/((?:$sjis)*)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text);

EZweb絵文字だけにマッチさせるようにするには、どうのように直したら良いでしょうか?
よろしくお願いします。



759 :nobodyさん:04/10/12 01:28:24 ID:???
(?:$sjis)*のところ、(?:$sjis)*?にしないと全部取っちゃうよ。
そこら辺は大丈夫?

760 :759:04/10/12 01:34:03 ID:???
ああ、そうか。
[顔文字]♪
のパターンが良くないのね。
今まで
♪[顔文字]
でやってたから気づかなかった。

言い訳だけど、具体的にどういうパターンがダメなのか書いてほしかったな。

761 :759:04/10/12 03:17:53 ID:???
[\xf3-\xf7][\x40-\xfc]は絵文字の文字コードってことで良いかな。
sjisの漢字の範囲は[\x81-\x9F\xE0-\xEF][\x40-\x7E\x80-\xFC]じゃない?

てなわけで、とりあえずこれ。
/($sjis)([\xf3-\xf7][\x40-\xfc])/e

でも、これでは絵文字が連続した場合は変換できない。

やはり、どこが1バイト目か2バイト目か分かるように、
あらかじめ明確に文字を区切らなきゃいけないっぽい。

$text = preg_replace("/($sjis)/", "$1 ", $text);
$text = preg_replace("/([\xf3-\xf7][\x40-\xfc])\s/e", "'['.bin2hex(\\1).'] '", $text);

こんな感じにすれば確実。もっといい方法あれば良いんだけど。
PHPはやったことないので、細かい間違いはご容赦・・・。

762 :nobodyさん:04/10/12 14:09:22 ID:oX6FVXHm
正規表現のプロの方々のお力をお借りしたく、質問をさせてください。

perl のマッチングで文章中の全角数字を的確に取得したいのですが、
どうにもこうにも化けてしまいます。

$value = "もしかして762はバカ?";
if($value =~ /([0123456789]*)/){
    $match = $1 ;
    print "$match \n"; #←「・」となってちゃんと取得できてない
}

環境:
  Perl5 (ActivePerl)
  Win2k
  文字コードはSJISで。

どうすればよいのでしょうか・・・

763 :nobodyさん:04/10/12 14:22:00 ID:???
>>762
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

764 :nobodyさん:04/10/12 14:39:46 ID:???
とりあえずこんな感じで対処できたようです・・・見苦しい感じですが

$value = "実は764は変態?";
if($value =~ /(\x82[\x4F-\x58]\x82[\x4F-\x58]\x82[\x4F-\x58]|\x82[\x4F-\x58]\x82[\x4F-\x58]|\x82[\x4F-\x58])/){
    $match = $1 ;
    print "$match \n";
}

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

765 :759:04/10/12 14:52:38 ID:???
漏れならこうだな。
/((?:\x82[\x4F-\x58])+)/

766 :nobodyさん:04/10/12 20:54:11 ID:???
Shift_JISか。。。

767 :758:04/10/12 22:55:44 ID:c8Tbm8wX
>>759
レスありがとうございます。
ちょっと質問がわかりにくくてすみません。
具体例を出すと、以下のような感じです。

$sjis='[\x81-\x9F\xE0-\xEF][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
$text="今日はカレーだ♪るんるん♪";
$text=preg_replace("/((?:$sjis)*?)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text);
print $text;  // ← '今日はカレーだーf482]驍るん'

それで、昨日からいろいろ試したところ、
$text=preg_replace("/\G((?:$sjis)*?)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text);
とすることで、ウチの環境では解決しました。
ですが、レン鯖(PHP 4.0.6)ではEZweb絵文字に全くマッチしなくなりました・・・orz

どなたかアドバイスよろしくお願いします。
もしPHP固有の問題であるなら該当スレに移動します。

768 :758:04/10/12 23:07:38 ID:???
あ、書き忘れていました orz
>>761で教えていただいた方法ですが、

$text="今日はカレーだ♪るんるん♪マ"; // 最後の文字は SJISコードF6CFの絵文字
$text = preg_replace("/($sjis)/", "\\1 ", $text);
$text = preg_replace("/([\xf3-\xf7][\x40-\xfc])\s/e", "'['.bin2hex(\\1).']'", $text);
print $text; // ←'今 日 は カ レ ー だ ♪ る ん る ん ♪ [f6cf]'

となって、文字ごとにスペースが入ってしまい、
そうかと言って
2行目を $text = preg_replace("/($sjis)/", "\\1", $text); に変えたら
'今日はカレーだ♪るんるん♪マ'(変化無し)という状況です・・・。



769 :nobodyさん:04/10/13 19:34:15 ID:???
ダブルコーテーションの内側にある"を全て\"にエスケープするには、どのように置換すればよろしいでしょうか?
$text = '$a = "foo"bar"; $b = "hoge"huga"hage";';
これを'$a = "foo\"bar"; $b = "hoge\"huga\"hage";'にしたいです。

770 :nobodyさん:04/10/13 19:50:38 ID:???
>>769
無理。というか無茶。
「ダブルコーテーションの内側」の文字列や $text 全体に、
何か一定の制限や特性があるならなんとかできなくもないかも知れないけど。

771 :nobodyさん:04/10/13 20:05:36 ID:???
前にスペースある"と後ろにセミコロンがある"を除いたすべての"をエスケープするという方法でもいいのですが。

772 :nobodyさん:04/10/13 20:10:59 ID:???
>>771
Perl なら
$text =~ s{\x20"(.*?)";}{ (my $str = $1) =~ s/"/\\"/g; qq|\x20"$str";| }eg;

773 :nobodyさん:04/10/13 20:14:38 ID:???
もしくは
$text =~ s{(?<=\x20")(.*?)(?=";)}{ (my $str = $1) =~ s/"/\\"/g; $str }eg;

774 :nobodyさん:04/10/13 20:48:20 ID:???
772-773
サンクス。とりあえずそれでできましたが、
$text = '$a = "foo";bar";';
みたいなケースも考えるときついですね。
とりあえず、出直してきます。

775 :nobodyさん:04/10/14 02:46:56 ID:???
>>758
1.sjis-winをutf8にする
2.utf8はsjisやeucのような途中マッチが起こらない
3.そのためにはソースもutf8で書いた方がよい
4.utf8でezweb文字列の正規表現を書く

うまくできたらソース晒してね

776 :nobodyさん:04/10/14 04:01:33 ID:???
>>775
4. がうまくできるとは到底思えないのだが。
ていうか単に煽ってるだけか?

777 :nobodyさん:04/10/14 07:09:58 ID:???
別に普通に出来るだろ
"\xF6\xCF" -> "\xEE\x93\xB6"

778 :776:04/10/14 14:00:36 ID:???
>>777
調べてみたら、
 - EZweb の絵文字は Shift_JIS のユーザ定義領域を使っていて、
 - Shift_JIS のユーザ定義領域は Unicode との対応が定義されている
なので、ちゃんと相互変換もできるし問題ないということなのかな。
漏れが無知だったようだ。すまん。

779 :nobodyさん:04/10/16 19:49:17 ID:???
550から999までというのはどういう風に書けばよろしいでしょうか?

780 :nobodyさん:04/10/16 20:02:11 ID:???
>>550-999
ってレス番の話じゃないのか?

781 :nobodyさん:04/10/16 20:06:43 ID:???
>>780
レス番の話ではなく、数字の550から999までだけマッチングさせたいのです。

782 :nobodyさん:04/10/16 20:07:41 ID:???
/[5-90][5-90][0-9]/
???

783 :782:04/10/16 20:14:15 ID:???
さっき正規表現勉強し出したアホです、
間違ってたらスマソ。
叩かないで(´・ω・`)

784 :nobodyさん:04/10/16 20:18:18 ID:???
>>782
すみませんが、これですと2桁目に1から4が入るとマッチしなくありません?例えば640とか。

785 :nobodyさん:04/10/16 20:18:33 ID:???
ifでいいじゃん

786 :nobodyさん:04/10/16 20:25:55 ID:???
/(550|551|552|553(ry

787 :nobodyさん:04/10/16 20:27:24 ID:???
>>786
いや、マヂで!?w

788 :782:04/10/16 20:28:35 ID:???
/5[5-90][0-9]|[6-90][0-9][0-9]/
こうかな?

789 :nobodyさん:04/10/16 20:29:43 ID:???
>>788
もうおまえはレスしなくていいよ
せめて試してから書けよ

790 :782:04/10/16 20:32:35 ID:???
どうやって試すん?(´・ω・`)

791 :nobodyさん:04/10/16 20:35:49 ID:???
>>788
おっ、なるほど、500台とそれ以降に分ければいいのですね!ありがとうございます、1つ賢くなりました(`・ω・´)

792 :nobodyさん:04/10/16 20:38:10 ID:???
>>789
んじゃ喪前が素晴らしく簡潔な奴を披露したら?

793 :nobodyさん:04/10/16 20:38:37 ID:???
>>791
いや、782間違ってるから

794 :782:04/10/16 20:39:32 ID:???
/5[5-90][0-9]|[6-9][0-9][0-9]/
0がひとつ多かったみたい
(・∀・)

795 :nobodyさん:04/10/16 20:41:25 ID:???
自演乙

796 :782:04/10/16 20:42:46 ID:???
/5[5-9][0-9]|[6-9][0-9][0-9]/
これで最後・・・修行してきまつ

797 :nobodyさん:04/10/16 20:55:24 ID:???
どういう文字列を調べたいのかわからんのによく答えられるな。

798 :nobodyさん:04/10/16 21:01:13 ID:???
/(0|[5-9])[0-9][0-9]/

799 :nobodyさん:04/10/16 21:02:00 ID:???
て、500〜だったな∧||∧

素直に/[5-9][0-9][0-9]/でいいんちゃうの?

800 :nobodyさん:04/10/16 21:03:45 ID:???
あーもうシバキ倒してください

801 :nobodyさん:04/10/16 21:04:15 ID:???
>797
馬鹿がキタ━━━━━━(゚∀゚)━━━━━━ !!
お前な、上のやつよーく見ろ。

802 :nobodyさん:04/10/16 21:05:12 ID:???
>797 => >798 orz
このスレ馬鹿しかいないってことでFA?

803 :nobodyさん:04/10/16 22:19:30 ID:???
>>781
if ($n =~ /[1-9]\d{2}/ and 550 <= $&) { マッチ; }

804 :nobodyさん:04/10/16 23:10:17 ID:???
>>803
マジレスすんなよ!空気嫁!!

805 :nobodyさん:04/10/16 23:28:12 ID:???
>804
だから?

806 :779:04/10/17 00:19:04 ID:???
779ですが、なんかうまくいったようです。みなさんありがとう。

807 :nobodyさん:04/10/17 00:28:58 ID:???
>>804
まだ続けるつもりだったのか?どう見ても終焉の空気が流れてるだろ。食う清め。

808 :nobodyさん:04/10/18 04:08:53 ID:aBkVRsoL
if($type =〜 /image\/.*/){

はどういう意味ですか?

809 :nobodyさん:04/10/18 04:13:49 ID:???
おそらくcontent-typeかmime-typeかが画像であるかってことじゃない?

810 :nobodyさん:04/10/18 11:03:43 ID:???
いや、'\' じゃなくて '\' だから、parse error・・・・
って、MLとマルチポストするなよ。

811 :nobodyさん:04/10/18 11:29:23 ID:???
〜 これにはつっこまんのか

812 :nobodyさん:04/10/18 12:01:37 ID:???

'\' 俺が悪いのか?
-


v'\'v そうさ。
 o

813 :nobodyさん:04/10/18 12:42:55 ID:???
ML にはちゃんと半角で '~', '\' としてるからわかってそう書いてるんだと思うけど。

ていうか、記号をわざわざ全角で書いてるひとが多いけど、なんでなんでしょ?
'&' や '"' と同じような罠にはまるのを避けてるのかな?

814 :nobodyさん:04/10/18 13:11:12 ID:???
>>813
SafariだとASCII or Unicode以外でポストするとき、迷惑にも
? -> \, ? -> 〜 に変換しやがるのです。

815 :nobodyさん:04/10/18 13:13:22 ID:???
なぜか数値参照が化けた..orz
バックスラッシュ・チルダが全角バックスラッシュ・全角ウェーブダッシュにされるんです。

816 :nobodyさん:04/10/18 13:43:13 ID:???
そうだったのかあ。
よくプログラミングネタや UNIX のトラブルシュートネタで、
コードやエラーメッセージをそのまま貼れ、って言うことがあるけど、
そういうのがあるとすると厄介ですなあ。

817 :nobodyさん:04/10/22 17:38:02 ID:xzmN9eHo
perlのサブルーチンを抜き出すような正規表現はどう書けばいいでしょうか?
言語はperlです。

-----------
sub aaa{
1
2
}
\n
sub bbb{
3
}
\n
\n
------------
この場合

-----------
aaa{
1
2
}
\n

bbb{
3
}
\n
\n

出力したいのですが。
よろしくお願いします。

818 :nobodyさん:04/10/22 18:28:19 ID:???

つまらん

819 :817:04/10/23 01:25:36 ID:fB1MfhBi
そう言わず、ヒントだけでも下さい!

820 : ◆7CWqH7Oesg :04/10/23 13:26:33 ID:???
$data=~ s/[\x0A\x0D]=\w+.*?=cut//gs;
$data=~ s/([\s;{}]*)#[^\x0A\x0D]*/$1/g;
$data=~ s/[\x0A\x0D]__(?:END|DATA)__.*//s;
@result= $data=~ /\s+sub\s+([a-zA-Z_]\w*\s*(?:\([^)]*\))?\s*\{(?:[^}]|\{[^}]*\})*\})/g;

これでどう?

821 :nobodyさん:04/10/23 13:52:56 ID:fB1MfhBi
$data = "sub aaa{\n1\n2\n}\n\nsub bbb{\n3\n}\n\n\n";

$data=~ s/[\x0A\x0D]=\w+.*?=cut//gs;
$data=~ s/([\s;{}]*)#[^\x0A\x0D]*/$1/g;
$data=~ s/[\x0A\x0D]__(?:END|DATA)__.*//s;
@result= $data=~ /\s+sub\s+([a-zA-Z_]\w*\s*(?:\([^)]*\))?\s*\{(?:[^}]|\{[^}]*\})*\})/g;

print @result;

を実行しても

bbb{
3
}

しか表示できません。

822 : ◆7CWqH7Oesg :04/10/23 14:01:51 ID:???
>>821

@result= $data=~ /\s+sub
を以下に変えないといけないようだ。

@result= $data=~ /(?:^|\s|=)sub

823 :nobodyさん:04/10/29 01:30:56 ID:???
「直前が{でも}でもない改行を削除」を性器表現するとどうなりますか?

824 :nobodyさん:04/10/29 02:15:48 ID:???
>>823
実装言語を言わずに回答が欲しいですかそうですか

825 :nobodyさん:04/10/29 02:35:07 ID:???
実装言語はなんでもいいです、でもいいですが、とりあえずはPerlでよろしくです。

826 :nobodyさん:04/10/29 03:55:33 ID:???
>>823
s/([^\^{}])\n/$1/g; # unixの改行
s/([^\^{}])\r\n/$1/g; # windowsの改行
s/([^\^{}])\r/$1/g; # Macの改行


827 :nobodyさん:04/10/29 06:16:46 ID:???
また丸投げかよ

828 :826:04/10/29 12:08:28 ID:???
ごめn、まちがった。
s/(^|[^{}])\n/$1/g;
だた。

829 :nobodyさん:04/10/29 13:38:27 ID:???
これでもよくね? s/([^{}])\n/$1/g;

>>823
次に質問するときはちょっとでも努力の跡を見せれ。

830 :nobodyさん:04/10/29 13:51:59 ID:???
すまない、そしてありがとう。
829でできました。

831 :nobodyさん:04/10/29 15:00:41 ID:???
828、829とも改行が続く場合に削除できない。
また、829では先頭の改行を削除できない。
直前のパターンを指定する場合、普通は
(?<=PATTERN) や (?<!PATTERN) を使う。
この場合なら、s/(?<![{}])\n//g; とする。

>>829
次に回答するときはちょっとでも試行の跡を見せれ。


832 :nobodyさん:04/10/29 15:14:32 ID:???
>>831
改行が続く場合と、先頭の改行の違いを述べよ。
828が正解。
実際に試してから偉そうなこと言えよな。


833 :nobodyさん:04/10/29 16:20:34 ID:???
>>823-832
# 「直前が { もしくは } の改行のみ残る」なら、これは3行になる筈
my $orig = "\n\nfoo\n\n{\nbar\n}\n\nbaz\n\n";

(my $copy = $orig) =~ s/(^|[^{}])\n/$1/g; # 828
print "[$copy]\n";
# [
# foo
# {
# bar}
# baz]
# … NG.

($copy = $orig) =~ s/(?<![{}])\n//g; # 831
print "[$copy]\n";
# [foo{
# bar}
# baz]
# … OK.

834 :nobodyさん:04/10/29 16:25:51 ID:???
>>832
$_ = <<EOH;

abc

123
EOH
の時、1行目のが「先頭の改行(^\n)」で、
abcの後ろと次の空行の改行が「続く改行(\n\n+)」。

これを>>828に通すと
abc
123
となり、>>831に通すと
abc123
となる。
{ と } の後ろ以外の改行は消すんだったよな?
恥の上塗りご苦労。

835 :nobodyさん:04/10/29 16:32:05 ID:???
>>832
833-834を踏まえた上で、828が正解である根拠を述べよ。
831が正解。
頭良くなってから偉そうなこと言えよな。

836 :nobodyさん:04/10/29 16:34:53 ID:???
>>833=>>834
ばか?変数に入れたものなんか誰も処理しないよ。
変数に書いてる間にエディタで取った方が速いよ。
普通のファイルでやって皆。
--------

foo


{

bar

}


baz


-----------

837 :nobodyさん:04/10/29 16:38:48 ID:???
>>836
>>825は「とりあえずはPerlでよろしく」と言ってるわけだが。

838 :825:04/10/29 16:40:55 ID:???
解決したんでもうやめれ。

839 :nobodyさん:04/10/29 16:43:14 ID:???
>>834
いちいちヒアドキュメントなんか書いてる間に
(あるいはスクリプトに挿入してEOHなんてやってる
間に)エディタの置換でやったほうが速いよ。
>>831が間違いだと言ってないからな。
ただ、否定の?は遅いからな(プッ

840 :nobodyさん:04/10/29 16:46:04 ID:???
ということで、828が最善解。

841 :nobodyさん:04/10/29 17:58:19 ID:jREmvBrx
JavaScriptの正規表現使って文字列の先頭と最後の空白を取りたいのですが
どう書けばいいのでしょうか?
abc dfg hij a
を(先頭と最後に3つ空白がある)
abc dfg hij a

みたいにしたいのです。

教えてください。

842 :nobodyさん:04/10/29 18:24:10 ID:???
>>841
str = " abc dfg hij a ".replace(/^\s+|\s+$/g, "");
分かりやすく、前後のスペースは全角にしたので注意。
.replaceを適用した文字列や変数自身は置換されないので、
結果を受け取る必要あり。

843 :nobodyさん:04/11/02 02:39:16 ID:???
/*str1*/str2/*str3*/
という文字列があって/*〜*/の部分をereg_replaceで空文字列に置き換えようとしたとき

ereg_replace("(/\*.*\*/)","","/*str1*/str2/*str3*/");
てやると、先頭の/*と末尾の*/がマッチして全部消えるんだけど
test2は残して、test1とtest3だけ消す方法ってある?

844 :nobodyさん:04/11/02 04:38:17 ID:???
test?
( ゚Д゚)

845 :nobodyさん:04/11/02 06:03:36 ID:???
(/\*.*?\*/)

846 :nobodyさん:04/11/02 12:08:40 ID:???
(/\*([^*]|\*+[^/*])*\*+/)

847 :843:04/11/02 15:34:08 ID:TAdMjWDI
すまそ…激しく誤植だった。
>ereg_replace("(/\*.*\*/)","","/*str1*/str2/*str3*/");
>てやると、先頭の/*と末尾の*/がマッチして全部消えるんだけど
>str2は残して、str1とstr3だけ消す方法ってある?
でした。

>>846サソ
(/\*([^*]|\*+[^/*])*\*+/)で、できました〜
ありがとうございました。

848 :あぼーん:あぼーん
あぼーん

849 :nobodyさん:04/11/04 12:11:00 ID:???
perlでEUC以外の文字列を削除するスクリプトを作成しましたが、
エラーが出てしまい困っています。
削除前には他の文字コードの場合にはEUCに変換しています。

$pattern部分はperlメモさんを参考にしています。

my $str = ' aaaa bbb ccc dddd';
my $pattern = '(?:[\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区
. '\x8E[\xE0-\xFE]|' # 半角カタカナ
. '\xA2[\xAF-\xB9\xC2-\xC9\xD1-\xDB\xEB-\xF1\xFA-\xFD]|' # 2区
. '\xA3[\XA1-\xAF\xBA-\xC0\xDB-\xE0\xFB-\xFE]|' # 3区
. '\xA4[\xF4-\xFE]|' # 4区
. '\xA5[\xF7-\xFE]|' # 5区
. '\xA6[\xB9-\xC0\xD9-\xFE]|' # 6区
. '\xA7[\xC2-\xD0\xF2-\xFE]|' # 7区
. '\xA8[\xC1-\xFE]|' # 8区
. '\xCF[\xD4-\xFE]|' # 47区
. '\xF4[\xA7-\xFE]|' # 84区
. '\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト文字
$str =~ s/[^$pattern]//g;
print $str;

どなたかご教授ください。

850 :nobodyさん:04/11/04 12:23:58 ID:???
$pattern = " ";
にしないと展開されないんじゃない?

851 :nobodyさん:04/11/04 14:35:28 ID:???
ヒント: Perlメモには、Perl正規表現雑技へ というリンクがある

852 :849:04/11/04 15:54:14 ID:???
>>851
いろいろやってみたけど、上手くいきません・・・

853 :nobodyさん:04/11/04 17:48:33 ID:???
文字列に「\」という文字を含めたい場合は、
クォートに関係なく「\\」と書かないとダメ。

854 :nobodyさん:04/11/05 06:33:14 ID:???
>>894
文字クラスに正規表現は使えないのでは。
マッチングパターンを全部逆(EUCコード以外にマッチ)にすれば良いし、
面倒なら、マッチしたEUCコードを取り出すようにすれば良いと思う。

my $pattern = '([\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区
...

my $str2;
$str =~ s/$pattern/$str2 .= $1/geo;
print $str2;

855 :849:04/11/05 10:36:41 ID:???
みなさんありがとうございます。
まだテストしてないので試してみます。
本当にありがとうございます。

856 :nobodyさん:04/11/06 16:21:10 ID:oGen/DNT
test#・・・・の文字列の#以降の文字を任意の文字に置き換えたいです。
トリップみたいなことです。
splitではできたんですが、replaceではできませんでした。
replaceでやる方法はありますでしょうか?
よろしくお願いします。


857 :nobodyさん:04/11/06 16:47:50 ID:???
>>856
まずは split でどうやったか示してもらおうか

858 :nobodyさん:04/11/09 20:14:47 ID:???
>>856に返答がなくてじれったい!

$hoge = "任意の文字";
s/#.*/$hoge/;

でいいよな。


859 :nobodyさん:04/11/14 12:57:00 ID:???
いま、Perlで文字列検索のCGIプログラムを作っているところなのですが、
やっているうちに挙動が変なところがあるのに気づきました。
エラー部分のみを挙げます。

$a="北関";
$b="夢";

if($a =~ /$b/){
 print 'OK!';
}else{
 print 'NG!';
}

これをEUCで記述すると「OK!」と表示、つまり「北関」の中に「夢」がヒットしてしまいます。
Shift_JISでは「NG!」、ヒットしません。
EUCでも正しく動作するように出来ないでしょうか?
おそらく、「北」「関」のJISコード(それぞれ4B4C、3458)が「夢」のJISコード(4C34)にかぶることが原因だと思いますが、
これをうまく回避する方法を検索することが出来ませんでした。
ご教授いただければ幸いです。

860 :nobodyさん:04/11/14 19:14:58 ID:???
Perl 5.8以降なら

use encoding "euc-jp";

my $a = "\xcb\xcc\xb4\xd8";
my $b = "\xcc\xb4";
print ($a =~ /$b/ ? 'OK!' : 'NG!');

--
String::Multibyteをインストールするなら

use String::Multibyte;

my $euc = String::Multibyte->new('EUC_JP');
my $a = "\xcb\xcc\xb4\xd8";
my $b = "\xcc\xb4";
print ($euc->index($a, $b) >= 0 ? 'OK!' : 'NG!');

--
自力で解決

my $a = "\xcb\xcc\xb4\xd8";
my $b = "\xcc\xb4";
my $euc = "^(?:[\x00-\x7e]|\xfe?[\xa0-\xff][\xa0-\xff]|\x8e[\xa0-\xff])*";
print ($a =~ /$euc$b/ ? 'OK!' : 'NG!');

861 :859:04/11/14 23:27:07 ID:???
>>860
ご教授、ありがとうございました!
期待したとおりの効果を得ることが出来ました。
感謝いたします。

862 :nobodyさん:04/11/18 15:33:53 ID:z5HMJmKG
hoge=aaa
hoge=aaa&piyo=bbb
のような文字列の「aaa」だけを抜き出すには
"/hoge=(.+?)/"
       ↑ここになにを入れればいいのでしょうか?

863 :nobodyさん:04/11/18 15:39:06 ID:???
>>862
"/hoge=(.+?)&/"

864 :862:04/11/18 18:40:51 ID:???
>>863
レスありがとうございます。
でも、それだと上の行のaaaが抜き出せないです。
ちなみに、最後に改行コードはついていません。

$a = 'hoge=aaa';
$b = 'hoge=aaa&piyo=bbb';

といった感じのデータです。

865 :nobodyさん:04/11/18 19:08:47 ID:???
>>864
/hoge=[^&]+/

866 :862:04/11/18 19:45:25 ID:???
>>865
ありがとございます。
すごい単純なことを落としていました。
&を除くものを取得すれば良いんでした。

867 :nobodyさん:04/11/19 20:49:42 ID:???
半角の英数記号のみにマッチする正規表現ってどうなりますか?
(制御文字はマッチしない)
半角英数のみなら良く見るのですが。

868 :nobodyさん:04/11/19 21:03:27 ID:???
>>867
> 半角英数のみなら良く見るのですが。
じゃあそいつから数を除けばいいだろ

869 :nobodyさん:04/11/19 21:03:56 ID:???
↑読み間違えた。

870 :nobodyさん:04/11/19 21:04:54 ID:???
記号足せばいいんでないかと

871 :nobodyさん:04/11/19 21:05:09 ID:???
すいません。/[:print:]/ でいけました。

872 :nobodyさん:04/11/20 08:08:33 ID:2uxiNSVv
サクラエディタでPHPのヒアドキュメントの部分を色分けしたいと思っているんですが
正規表現でマッチさせる事とか出来ませんでしょうか?

↓こんな感じの部分を色分けしたいんですが。
print <<< PRINT_HTML
<div class="box">
<b>ぬるぽ</b>
</div>
PRINT_HTML;

873 :nobodyさん:04/11/21 08:46:27 ID:baqdUP4H
ひあどきゅめんと

874 :nobodyさん:04/11/21 17:13:13 ID:bKPK+kaX
>>872
ヒアドキュメントが醜いからPerlは結構嫌われているわけで
PHPは変数内でも改行できるという点から
PHPでヒアドキュメントは使わない方がいいと思うけど。

875 :nobodyさん:04/11/21 20:42:22 ID:???
>>874
んなこたーはない

876 :nobodyさん:04/11/21 23:14:38 ID:???
一向に答え出されないな。
自分はサクラエディタとやらは使わないしPerlしかやらないが、
良ければこれを参考にしてくれ。

/<<<s*([a-zA-Z0-9_]+)\n.*?n\1;/

主な条件は、後方参照ができること(\1が使える)と、
複数行のマッチができること(.に\nを含ませる)。

できれば .*? を (.*?) として、$2で抜き出せれば理想的なんだが。

877 :nobodyさん:04/11/22 00:27:02 ID:???
>>875
874ではないが874に同意だな
ヒアドキュメントははっきり言って見にくい
確かにPHPで使ってるとなぜ使うのか疑問になる
これは人それぞれの慣れと書き方だと思うけどね

878 :nobodyさん:04/11/22 00:32:29 ID:???
んー、スレ違いだね。そういえばこの板って雑談スレ無いね。

879 :nobodyさん:04/11/22 04:03:50 ID:???
$strもEUC-JPでスクリプトもEUC-JP
$str =~ s/ //g;
ってやっても文字化けするケースと
そのまま正常なケースがあるんだがなんでだろ?

Perlメモを見て
$Zspace = '(?:\xA1\xA1)';
$str =~ s/$Zspace//g;
でやっても無理だった

880 :nobodyさん:04/11/22 05:48:42 ID:???
>>879
たまたま、前の文字の最後が \xA1 で後の文字の最初が \xA1 に
マッチするようなケースにあたるとまずくなるよね。

881 :nobodyさん:04/11/22 06:14:54 ID:???
>>880
対処法とかない?
処理のときだけunicodeとか別の文字コードに変換してやった方がいいんかな?

882 :872:04/11/22 06:45:50 ID:C8SlIvxc
>>874 >>877
そ、そうなんですか!?
自分的には、変数を直接使用でき、「"」や「'」をエスケープする必要が無く、
HTMLソースをそのままコピペ出来るので、なかなか使いやすいと思っていたのですが…
ちなみにこんな感じで書いてるんですが、邪道なんでしょうか…
http://cyberbooth.fc2web.com/admin.html

>>876
ご教示をありがとうございます!
そのコードを参考に色々と自分で試してみます。
まだPHPは5日程前に始めたばかりでして、
どうもまだこの「正規表現」に苦戦していましたので、非常に助かりました。

883 :nobodyさん:04/11/22 07:24:57 ID:???
>>822
変数直接書けるけど
{}で囲ったりしないと後ろの文字が変数名の続きと勘違いしてしまうケースあるし
何よりほとんどのテキストエディタで対応してない
使ったあとの自動インデントが狂うエディタ多数

ヒアドキュメントは確かに便利であるし機能としてあるから邪道ではないと思うが
ttp://www.kauda.jp/~suguru/comp/php/strings.html
とか書いてるけどPHPではいらんっぽい
ただPerl出身者はおそらくヒアドキュメント大好き人ばっかだと思う

組んでるときはいいけど作った後に見ると見にくいって感じかな

>>877の通り、最後は好き嫌いのレベルなんだけどね

884 :nobodyさん:04/11/22 20:51:42 ID:???
お、おれは Perl 出身者だが、ヒアドキュメントが大嫌いで、
Perl なら Template Kit, PHP なら Smarty ばっか使ってるぞ

スレ違いだな、すまん

885 :nobodyさん:04/11/22 21:24:40 ID:???
PHP だと地の文 (?) が既にヒアドキュメントみたいなもんな気がするので、
ヒアドキュメントってほんとに必要かなあ、って思ってしまう。

886 :nobodyさん:04/11/22 21:26:24 ID:???
ヒャァァァ

887 :nobodyさん:04/11/22 22:25:47 ID:???
>>885
それが普通の発想

888 :nobodyさん:04/11/25 14:13:58 ID:???
自分でしか使わないものだとヒアドキュメント楽なんだけど、
仕事だと見た目なおすたびにソースいじるの嫌だからテンプレ
にしちゃうな...って、正規表現関係ないね。


889 :872:04/11/25 16:30:50 ID:???
>>884 >>888
なるほど、ロジック部分と、ビュー部分を分離して管理する
「Smarty」なるツールがあるんですね。
これはかなり便利そうです。
お陰で一つ勉強になりました!

890 :nobodyさん:04/11/25 18:50:17 ID:???
↓さて、それでは次の方、正規表現ネタをどうぞ。

891 :nobodyさん:04/11/26 11:53:40 ID:???
>>879さんで質問された
EUCでの空白問題で同じように私も壁にぶつかりました

解決法は特に載ってないみたいなんですが
どうしようもないんですか?

892 :nobodyさん:04/11/26 12:31:17 ID:???
>>891
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match

893 :nobodyさん:04/11/27 11:11:00 ID:???
/aaa/bbb/ccc/script.cgi
↑のような文字列から最後の"script.cgi"を抜いた文字列(/aaa/bbb/ccc/)に
マッチする正規表現ってどうなるでしょうか?

894 :893:04/11/27 11:25:14 ID:???
付け加えると、先頭は必ず/。
/の数(パスの深さ)は任意で、最後のスラッシュまでを取り出したい訳です。

895 :nobodyさん:04/11/27 11:35:32 ID:???
$string1 =~/^(\/.*\/)[^\/]*$/;
$string2 = $1;
print $string;

896 :nobodyさん:04/11/27 11:35:51 ID:???
最後はprint $string2;だった

897 :893:04/11/27 12:26:49 ID:???
>>896
ありがとうございます。
ばっちりいけました。

898 :nobodyさん:04/11/27 17:33:21 ID:???
なんで正規表現かけない奴がこのスレにいるのか謎

899 :nobodyさん:04/11/27 17:34:18 ID:???
>>898
なんで謎なのか謎

900 :nobodyさん:04/11/27 17:44:38 ID:???
正規表現のスレで>>898みたいなのがいる謎

901 :nobodyさん:04/11/27 17:47:14 ID:???
丸投げ乞食供必死だなw

902 :nobodyさん:04/11/27 17:47:30 ID:???
確かに、このスレは道場だから質問スレじゃないよな。

例えば、>>895に対して
m!(.*/)! の方がスマートでいいじゃない?
とか。。。 勝負を挑んでいく感じ?

903 :nobodyさん:04/11/27 17:53:19 ID:???
質問はいいんじゃね?
全然できましぇん全部やってください〜なら初心者スレにでも逝けって感じ
>>1よみゃディレクトリ取得くらい素人でも出来る

>>902がスマーティかどうかは置いとくにしても

904 :nobodyさん:04/11/27 17:55:29 ID:???
うむ

905 :nobodyさん:04/11/27 18:24:14 ID:???
>>902
仕切り文字を変えることはどうでも良い気が。
ロジック的に別のマッチパターンを出してく方が挑戦的で良いな。

906 :nobodyさん:04/12/01 22:05:03 ID:MrbpLm4t
丸投げすいません。
"あ,い,う " ,え,お という文字列のダブルクォーテーションでくくられた部分の半角カンマ(,)を全角カンマ(,)に変換するのはどうしたらいいでしょうか?
変換前:"あ,い,う " ,え,お
変換後:"あ,い,う " ,え,お


907 :nobodyさん:04/12/01 22:13:31 ID:MrbpLm4t
↑追記です。
上記からダブルクォーテーションの削除も同時に行いたいです。
変換前:" あ,い,う " ,え,お
変換後:あ,い,う,え,お

908 :nobodyさん:04/12/01 22:16:51 ID:???
>>906
実装言語は?

909 :nobodyさん:04/12/01 22:22:39 ID:MrbpLm4t
ASPでBASP21というコンポーネントを使ってPerl5互換の
正規表現文字列置換を使います。
ですので、Perl5でお願いします。

910 :nobodyさん:04/12/02 03:16:36 ID:???
>>909
こりゃどうだ。

$dat="\"あ,い,う \" ,え,お";
while($dat=~ /"(.+?)"/){
$ushiro = $';
($mae = $1) =~ s/,/,/g;
$dat = $mae . $ushiro;
}
print $dat, "\n";



911 :nobodyさん:04/12/02 10:04:13 ID:???
丸投げはNGだって言ってるのがわからんか?

912 :nobodyさん:04/12/02 10:17:11 ID:???
>>910
微妙な優しさだなw

913 :nobodyさん:04/12/02 12:22:09 ID:c/xEYFBx
「aaaaaのように同じ英数字が行の先頭から5つ以上連続して続く」
という正規表現はどう書いたらいいのでしょうか?
$a =~ /^[0-9a-zA-Z]{5,}/
とするとaaaaaはもちろんマッチするのですが、abcdeもマッチしてしまいます。
aaaaaもbbbbbもcccccもマッチする、しかしabcdeはマッチしない、とやりたいのです。
ご教授おねがいします

914 :906:04/12/02 12:29:03 ID:???
>910
ありがとうございます!
でも、今回のものではループは使用できませんでした。すいません。
strData = "あ,い,う" ,え,お
strWk = bobj.Replace("s/"".+,.+""/,/kg",strData)
という形でやってみたのですが、[「,」,え,お]となってしまいました。
ループを使わないと無理なんですね。すいませんでした。

915 :nobodyさん:04/12/02 13:36:05 ID:???
>>913
/^([0-9a-zA-Z])\1{4,}/

916 :nobodyさん:04/12/06 10:40:45 ID:???
>>915
914じゃないけど、なるほど〜と思ってしまった。

917 :nobodyさん:04/12/06 11:02:55 ID:???
>>916
一つ賢くなったな。頑張れ。

918 :nobodyさん:04/12/06 21:15:27 ID:???
3歳の息子に教えようと思うんだけど、
顔文字みたいな正規表現無いかな?

919 :nobodyさん:04/12/06 23:32:21 ID:???
/(.)(.)/
おぱーい

920 :nobodyさん:04/12/07 01:20:47 ID:???
/(;´Д`)ハァハァ/e

921 :nobodyさん:04/12/07 03:16:21 ID:???
>>918
/J+_+`/
/[^_]人[_^]/
/(?=_=)/
/(V)o\o(V)/ ←バルタン星人
(o|o) ←ウルトラマン
!|!○| ̄|_!|!

正規表現の考え方で育った人間ってどうなるんだろうと
ハァハァしながら作ってみた。

922 :nobodyさん:04/12/07 22:38:18 ID:???
$Strings =~ m(_ _)m;

923 :のりのみや:04/12/10 07:24:26 ID:xBvxelrR
これこれ、ちとおたずねしたいのじゃが、
テキストファイル内の行をランダムで10行ほどgrepするにはどうすれ良いのじゃ?
まろにはとんとわからんでのう…
どなたか教えてくれぬか?
この通りじゃ

924 :nobodyさん:04/12/10 08:07:02 ID:???
>>923
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ

925 :nobodyさん:04/12/10 12:28:02 ID:???
>>923
まあ、もちついて、
「使用する言語」と「どこまで試したか」と「『何をやりたいか』をもっと具体的に」
を書け。

926 :nobodyさん:04/12/14 05:12:31 ID:???

$value =~ s/[$WwWw]+//g;

はうーうまくいかないっす。


927 :nobodyさん:04/12/16 18:01:44 ID:Ovl4zL1K
abc を含んでいる文字列にはマッチするけど def を含んでいる
文字列にはマッチしないっていう正規表現はどうかけばよいですか?

928 :nobodyさん:04/12/16 18:42:21 ID:???
>>927
Perl なら /^(?:(?!def).)*?abc(?:(?!def).)*\z/
もっと簡単にかけそうな気もするけど。

929 :nobodyさん:04/12/16 22:12:09 ID:???
>>927
どんなの書いたんだ?

930 :nobodyさん:04/12/17 11:25:58 ID:???
>>928
ありがとう。
先読みを使うんだろうなとは思ったけど、ドットと組み合わせることは
思いつかなかったです。

931 :nobodyさん:04/12/17 11:52:31 ID:???
糞丸投げ乙

932 :nobodyさん:04/12/19 12:51:50 ID:???
はじめまして。
$aa="123456";として
$aaの行末から3、4つ目の数字(この場合34)を変数に格納したいのですが、
正規表現でできますか?

933 :nobodyさん:04/12/19 13:27:35 ID:???
>>932
\d{2}..$

934 :nobodyさん:04/12/19 15:59:53 ID:???
>>932
<?php
$aa = '123456';
preg_match('/(\d\d)\d\d$/', $aa, $match);
echo $match[1];
?>

935 :nobodyさん:04/12/20 08:38:14 ID:???
お前ら死ねよ

936 :nobodyさん:04/12/20 11:06:28 ID:???
>>935
基地外は回線はずしてコードで首吊れ

937 :nobodyさん:04/12/20 18:59:11 ID:???
自殺は止めろよ。

938 :nobodyさん:04/12/21 05:59:53 ID:???
自殺するくらいなら友達になってくれ

939 :nobodyさん:04/12/21 09:43:55 ID:???
>>937-938
イイヤツ

940 :nobodyさん:04/12/22 06:53:40 ID:???
練炭ならあるよ

941 :nobodyさん:04/12/22 09:46:08 ID:???
練炭あるなら、七輪で火起こして、
日本海の冬の幸をたんまり仕入れろ。
築地で仕入れろ。力一杯仕入れろ。
強く、優しく、そして時にはエロく。
そうやってダンディーに仕入れた冬の幸を、
極上の練炭で焼く。やさしく焼く。じっくり焼く。
焼き上がり直前は、一気に火を煽って瞬間の仕上がりに全てを賭ける。
そして、食べる。焼き上がりを食べる。ハフハフしながら食べる。
味わう。素材の持ち味をすべて引き出して食べる。
感じる。素材の持つ力強さとうま味を精一杯感じる。

そして、思いを馳せろ。
自分が食べたものは、かけがえのない命だと。
たとえ単に美味な日本海の冬の幸だろうと、つがいだったものもいれば子供もいたかもしれない。
その命を自分は食してしまったのだと。
そして考えろ。それは命が命をつなぎ止める、地球上の壮大な生態系の一部であることを。

最後に、想え。感謝を。命への感謝を。生きていることへの感謝を。


942 :nobodyさん:04/12/22 10:19:52 ID:???
>>941
ソコマデイクトクサイ

943 :nobodyさん:04/12/22 11:07:26 ID:???
1.
main_1="test   "

main_2="test"
にする。
つまりjavascriptで一行の文字の末尾のスペースを消すにはどうしたら良いですか?
main_2=main_1.replace(/$([  ]*)/,"");
では置き換えされません。

2.
全てマッチしたかどうかはどの様に調べたらよいですか?
数字のみの文字列かどうかを調べたい場合
text_1="0a"
text_2="0"
Reg_1=/[0-9]/
だとtext_2でもマッチしてしまいます。


よろしくお願いします。

944 :nobodyさん:04/12/22 14:00:17 ID:???
>>943
1. 末尾のスペースなら str.replace(/([ ]*)$/, "") じゃない?
2. 先頭から末尾まで全て数字、ということで /^[0-9]+$/ かな?

945 :943:04/12/28 18:03:52 ID:???
>>944
ありがとうございます。
^$は難しい……

946 :nobodyさん:04/12/28 20:23:05 ID:N6XrfelJ
[1234]と[]に囲まれた文字列(中の数字はランダム)を指定して別の文字に
置き換えたいんですが、\[.*\]じゃダメなんですよね。
どうすればいいのでしょうか。ちなみに秀丸を使ってます。

947 :nobodyさん:04/12/28 20:28:35 ID:gvnNaLCU
>>946
置き換えたい文字を直接指定すればいいだけだろ。

948 :nobodyさん:05/01/08 18:38:47 ID:1HeEdFHi
指定したHTMLタグを消去するような正規表現を考えてるんだけど、
$str =~ s/<a\s.*?>(.*?)<\/a>/$1/ig;
とやると、aタグの一部が消えずに残ってしまったりして困ってます。
あと、.*?は遅いと書いてあるのですが、良い案があれば教えてください

949 :初心者:05/01/08 18:52:51 ID:TEnfV1Iz
すみません。PHP4.3.8で、日本語対応の正規表現関数を使おうとしている
のですが、うまくいかないので、どなたか教えて頂けますでしょうか。
phpinfo();を書くと、「mbstring」の表に
Multibyte (japanese) regex support enabled が表示されるので、日本
語対応の正規表現関数は使えると思うのですが、うまくいかないのです。

<?php
print("結果は");
$kekka=ereg("a","abcd",$br);
print($br[0]);
$kekka=mbereg("b","abcd",$cr);
print($cr[0]);
print("です");
?>
と書くと、「結果はaです」としか表示されません。「結果はabです」と
表示させたいのですが、どうすれば良いのでしょうか。教えて頂けると
非常に助かります。宜しくお願い致します。

950 :949:05/01/08 19:12:39 ID:TEnfV1Iz
すみません。mb_eregにしたら出来ました。PHP4では、mb_eregに
すれば出来るんですね。お騒がせしました。。。

951 :nobodyさん:05/01/08 19:29:22 ID:???
>>948
実はHTMLタグの削除と正規表現は相性が悪かったり。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_remove_HTML_from_a_stri

それでもやるとしたら、
$str =~ s/<a\s[^>]*?>(.*?)<\/a>/$1/ig;
ぐらいかな。
一部が残るのは分からない。

952 :nobodyさん:05/01/08 19:49:31 ID:/O5s2fue

http://rinristarin.value-net.net/22/fir/ リリカちゃんが


     エッチしたら更新する日記。最近ずっとこの子に萌えっす。

                俺ともお願いぃぃ・・・



953 :nobodyさん:05/01/08 20:06:53 ID:???
>>948
<A>タグが残ってるという理由じゃないだろうな

954 :nobodyさん:05/01/08 21:06:07 ID:???
タグ間のテキストを抽出しないのなら開始タグ、終了タグを無視して削除するとか。

955 :nobodyさん:05/01/09 10:04:16 ID:???
splitで最初の「:」だけで区切るにはどんな正規表現使えばいい?
@data = split(/:/, $str);
だと、余分な区切りまで・・・

956 :nobodyさん:05/01/09 10:17:30 ID:???
@data = split(/:/, $str, 2); じゃなかったかな。

957 :nobodyさん:05/01/09 10:32:46 ID:???
性器表現ならこうか
@data = $str =~ m/^([^:]*):(.*)/;


958 :nobodyさん:05/01/09 15:20:06 ID:???
>>954
それだね。

s/<\/?a(\s[^>]*)?>//ig

これぐらいでもいいかも。

959 :nobodyさん:05/01/11 22:33:00 ID:nnjmq/8Z
apacheの httpd.conf弄りたいんですが、
http://*.hoge.jp/
ってどうやって書くんでしょう?書籍とかと数時間格闘しましたが
ぱっさり理解できないのです

960 :nobodyさん:05/01/11 22:40:20 ID:???
>>959
もっと具体的に。

961 :nobodyさん:05/01/11 22:42:43 ID:???
とてもスレ違いな悪寒

962 :nobodyさん:05/01/12 00:48:18 ID:mmvJMOP+
例えば

文字列 = "例えば(その1)や(その2)など";

で( )の中身をとりたいんすけど素直に"/\((.+)\)/"とすると
"その1)や(その2"がマッチしてしまいます。
"/\(([^\(]+)\)/"とすると"その1"しかマッチしてくれません。
whileを使ってもうまくいきません。どのようにしたらいいでしょうか。
phpでpreg_matchしています。


963 :nobodyさん:05/01/12 00:56:34 ID:???
"/\(([^)]+)\)/"の間違いじゃないのか
そしてpreg_match_allの間違いじゃないのか

964 :nobodyさん:05/01/12 00:58:27 ID:???
つーか"/\((.+?)\)/"でOKか

965 :962:05/01/12 01:10:13 ID:???
963さん、964さんありがとうございました。
それでいけました。
使ってるリファレンス本にpreg_match_allがのってなかったので気付きませんでした。
きちんとマニュアル読むようにします。

966 :959:05/01/12 13:29:58 ID:o9KFPT4S
レスありがとうございます。

直リンクを防ぐために
httpd.confを次のように弄ったのですが、
上手く動作しませんでした。
サブドメインからのアクセスなら、
サブドメインが何でも、直リンクにはならないように設定したいのです。
自宅サーバー板で正規表現を勉強しろ、とのコメントをいただいて、
悪戦苦闘してるんですが、パッサリ理解できないのでございます。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://*\.hogehoge\.jp/.*$ [NC]
RewriteRule ^(.*)$ - [F]
これは動きませんでした。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://abc\.hogehoge\.jp/.*$ [NC]
RewriteRule ^(.*)$ - [F]
こっちは正しく動作しました。

967 :nobodyさん:05/01/12 14:01:55 ID:???
> !^http://*\.hogehoge\.jp/.*$

*は直前の文字が0以上繰り返される、という意味なので、上の式がマッチするのは
http://.hoge . . .
http:////.hoge . . .
http:///////////////////////////////////////////////.hoge . . .
など。

どんな文字でもマッチさせるには、「.」の0もしくは1以上の繰り返し、と書けばいいんだが、
あらゆるパスにマッチする正規表現はかけてるのに、あらゆるサブドメインにマッチする
正規表現が書けないとはこれいかに。

968 :nobodyさん:05/01/12 14:04:36 ID:???
>>966
正規表現で「 * 」は「直前の文字や正規表現を 0回以上繰り返す」という意味なので、
上の例の「 /* 」の箇所で「 / を 0回以上繰り返す」という意味になっちゃってる。
おそらくそこでやりたいのは「アルファベットを 1回以上繰り返す」だと思うので、
「 !^http://[a-z]+\.hogehoge\.jp/.*$ 」とすればいいんじゃないかな。
「 + 」は 1回以上繰り返す意味。

969 :nobodyさん:05/01/12 15:11:10 ID:1iafFrJp
<a name="a193"></a><dt>
<span class="2ch_number">193</span> :
<span class="2ch_name">以下、名無しにかわりましてVIPがお送りします</span>:
<span class="2ch_date">05/01/12 13:43:10 ID:Zzzz4wKL</span></dt>
<dd>
<a href="http://jumpres/read.cgi/news4vip/1105500214/183"><a href="http://jumpres/183">>>183</a></a>
のレスをよく見ていえよ
<a href="http://jumpres/read.cgi/news4vip/1105500214/187"><a href="http://jumpres/187">>>187</a></a>! <br><br></dd>


↑のこういう一行(長いから改行してるけど)から>>999の左右にある<a></a>を外すっていうのをやりたいです。
どうしたらいいですか?

970 :nobodyさん:05/01/12 15:18:40 ID:???
>>999をサブパターンにとって、リンク全体をそれに置換してやればOK。
つかアンカータグのネストなんかぶっちゃけありえない

971 :959:05/01/12 15:19:29 ID:???
>>967-968
ありがとうございます。
教えていただいたhttp://[a-z]+\.hogehoge\.jp/.*$
で上手く行きました。
本当に助かりました。感謝感激です

972 :nobodyさん:05/01/12 17:23:47 ID:???
>>969
アンカータグ全部要らない、ってことなら、
何も考えずにとにかく <a ...> と </a> を取り除いちゃえばええのでは。

973 :nobodyさん:05/01/13 20:32:10 ID:rZkv4VMu
abcdefg{__hoge__}hijklmn
のような文字列の
{__hoge__}とカッコ等が付いたものと、hoge と文字のみの2つを取得したく
以下のようにしてみました。

preg_match_all("/\{__(.+)__\}/","$str","$match");

一行に {__(.+)__} 形式の文字が一つしかない場合は、上手くいくのですが
二つ以上あるばあい、{__hoge__}{__piyo__} と最大のマッチをしてしまいます。
最小のマッチをさせるには、どうすればいいのでしょうか?

974 :nobodyさん:05/01/13 20:44:16 ID:???
>>973
preg_match_all("/\{__(.+?)__\}/",$str,$match);

975 :973:05/01/13 22:43:11 ID:???
>>974
ありがとふ。
やっぱりそれか。出来てたのに見落としてしまっていた orz

976 :nobodyさん:05/01/15 14:08:23 ID:DsGxQZIF
Perlで、引数としてファイル名を受け取った場合に(例えば ./test.pl)、そのファイルが
あるとされるディレクトリ(例でいう./)を調べて、そのファイルがあるかどうかをチェック
したいのですが、引数のファイル名最後のスラッシュ以後を消す方法が分かりません。

どういった正規表現を用いれば良いのでしょうか?

977 :nobodyさん:05/01/15 14:56:01 ID:???
>>976
そんなことで正規表現を使ってどうするよ。
「ファイルテスト演算子」でぐぐれ。

978 :nobodyさん:05/01/17 03:16:40 ID:???
>>976
ファイルテスト演算子とは知りませんでした(死

ところで、その引数から、拡張子とディレクトリ構造?(./、../、/)を消して
ファイルの名前だけを知りたいのですが、(./ディレクトリ名/**.txtでいう**)
そういう時は以下みたいに3段かませばいいですか?

$name = "./test/test.txt";
$name =~ s/\A\.|\A\.\.//g;
$name =~ s/\A\/|\A\/\S*\/|\S*\///g;
$name =~ s/\.\S*$//g;

うまく取得できない例外は起きそうでしょうか?

979 :nobodyさん:05/01/17 03:36:56 ID:???
そんなに何行も書くほどのことじゃない。

ファイル名を取り出したいなら
$name = "./test/test.txt";
$name =~ /.+\/(.+)/;
print $1;

test.txt

ファイル名のみに置き換えたいなら
$name =~ s/.+\/(.+)/$1/;
$name = "./test/test.txt";
print $name;

test.txt

980 :nobodyさん:05/01/17 04:07:56 ID:???
ふつー File::Basename じゃね?

981 :nobodyさん:05/01/17 07:42:04 ID:???
>>980
"正規表現道場"


982 :nobodyさん:05/01/17 09:08:29 ID:???
>>980
次スレを

983 :980:05/01/17 11:48:08 ID:???
>>981
正規表現を使うのが適切でないときに「正規表現を使うな」と指摘するのは
"正規表現道場" にふさわしくないと?

984 :980:05/01/17 11:53:51 ID:???
>>982
立てますた。

正規表現道場@2ch Part4
http://pc5.2ch.net/test/read.cgi/php/1105930285/


985 :nobodyさん:05/01/17 15:42:34 ID:???
>983
ネタごとに補足、でいいのかな

986 :nobodyさん:05/01/18 06:55:18 ID:???
>>983
正規表現じゃない方が楽なら、
そっちを教えてあげるのが
優しいお兄さんとしての役割。
正しい誘導をしてあげていると思います。

987 :nobodyさん:05/01/19 06:32:23 ID:???
>>986

        て
        ん
          し

988 :nobodyさん:05/01/19 08:19:55 ID:???
    じゃ 
     え 
     さ 
     を 


989 :nobodyさん:05/01/20 02:09:00 ID:???
require  "http://pc5.2ch.net/php/";
&1105930285;


990 :nobodyさん:05/01/20 12:41:11 ID:???
990

991 :nobodyさん:05/01/20 12:56:21 ID:???
バカが立てた糞スレタイともやっとおさらばか

992 :nobodyさん:05/01/20 12:57:20 ID:???
ばかっていうな!

993 :nobodyさん:05/01/20 13:05:58 ID:???
ばかなんて言ってないだろう。
バカって言ったんだよ、バーカ。

994 :nobodyさん:05/01/20 13:16:13 ID:???
ヽ(冫、)ノズコーッ

995 :nobodyさん:05/01/20 13:17:39 ID:???
おさらばかキタ━━━━━━(゚∀゚)━━━━━━ !!

996 :nobodyさん:05/01/20 13:21:36 ID:???
>>995
ばかっていうな!

997 :nobodyさん:05/01/20 13:31:15 ID:FNQvtzHY
997

998 :nobodyさん:05/01/20 13:51:09 ID:???
バカよ、さらば!

999 :nobodyさん:05/01/20 13:55:38 ID:???
999

1000 :nobodyさん:05/01/20 13:55:54 ID:???
1000げっとでちゅー

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

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

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