正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
03/11/19 21:42ID:Kst3Nn4Sこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
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/
0002nobodyさん
03/11/19 21:44ID:???0003nobodyさん
03/11/19 22:56ID:???0004nobodyさん
03/11/20 00:40ID:???0005nobodyさん
03/11/20 01:09ID:???0006nobodyさん
03/11/20 13:42ID:???0007nobodyさん
03/11/20 15:18ID:???0008nobodyさん
03/11/20 20:06ID:???$MyJob =~ s/仕事/労働/;
0009nobodyさん
03/11/20 20:06ID:???0010nobodyさん
03/11/20 20:15ID:???0011nobodyさん
03/11/21 14:29ID:???条文(第一条〜第九百九十九条)をアラビア数字(第1条〜第999条)に置き換える式を教えてください。
0013未承諾広告※ ◆aiY4htt2.2
03/11/21 21:05ID:???$arabic{'第一条'} = 1;
から、
$arabic{'第九百九十九条'} = 999;
まで入れといて、
対象文字列 $joubunn に対して置換してみるとか?
$joubunn =~ /$regexp/$arabic{$regexp}/ foreach my $regexp (keys %arabic);
効率悪そうな悪寒。。。
0014nobodyさん
03/11/21 22:07ID:???そういうハッシュテーブル使っていいなら、これでそんなに効率悪くないかと。
%arabic = ('一' => 1, ..., '九百九十九' => 999,);
$joubunn =~ s/(?<=第)(.+?)(?=条)/(defined($arabic{$1}))?$arabic{$1}:$1/ge;
てゆかそもそもそのハッシュテーブルの初期化が効率悪そうな悪寒。。。
0015nobodyさん
03/11/21 22:43ID:???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;
# なんかこれって位取りの処理の仕方が肝で、正規表現とはあんまり関係なさそうな予感。
0016nobodyさん
03/11/23 02:27ID: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行目にも正しくマッチできるように
修正していただけませんか?
0017nobodyさん
03/11/23 03:02ID:???0019nobodyさん
03/11/24 18:36ID:???漢数字<->数値<->アラビア数字 で相互変換できればどういったケースでも使える
ちまり正規表現は数字文字列の抜き出しに使うくらいがいいね
0020nobodyさん
03/11/25 00:30ID:???「改行も含めて全部」はどう表現すればよいのでしょう?
「.*」で「改行以外の任意の文字0個以上=改行含まない全文字列」
ですが
「改行も含めた任意の文字0個以上=改行も含めた全文字列」はどう表現すればよいのでしょう?
一応言語はJavaですが、PERLも同じらしいのですが・・
0021nobodyさん
03/11/25 00:39ID:???Perlなら /s オプション
または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
JavaScriptは知ってるがJava言語は知らん。
0022nobodyさん
03/11/25 00:42ID:???>> または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
>> JavaScriptは知ってるがJava言語は知らん。
Javaでも全部できたみたい!!
今から意味調べます。ありがとうございます!
0023nobodyさん
03/11/25 00:43ID:???http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#DOTALL
0024nobodyさん
03/11/29 00:22ID:???<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ファイルが一行になっちゃうんですね。
0025nobodyさん
03/12/01 13:50ID:???もっとスマートな方法があるかもしれないけど、漏れだったらこうするかな。
1. <xsl:template /> の中だけ取り出す
2. 取り出したものを \n を <xsl:text>\n</xsl:text> に置換する
3. 置換したものを <xsl:template /> の中に戻す
0026nobodyさん
03/12/01 14:07ID:???<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>
0027nobodyさん
03/12/05 18:55ID:???---------------------
あ\n
\n
\n
\n
あ\n
---------------------
\nは改行です。
上のようなテキストファイルから2つ以上の連続した空白行を一つにまとめたいと思い、
$対象文字列 =~ m/^\s*\n$/; (空白文字0個以上だけで構成され改行で終わる)
にマッチしたらフラグをセットし、フラグがオンに間はファイルに出力せず、
フラグがオンかつマッチング対象が空白文字だけで構成されていなければフラグをオフにする。
としようとしたのですが、
対象に空白文字と改行以外の文字が含まれるというのをどうやって表現していいか分かりません。
よろしくお願いします。
002827
03/12/05 19:01ID:???はいどうも
0029nobodyさん
03/12/05 19:03ID:???0030nobodyさん
03/12/06 23:50ID:???0031nobodyさん
03/12/07 03:53ID:ye6hWK3e同じカバン持ってる奴にお前のカバンを持ってかれたのか?
0032nobodyさん
03/12/07 05:21ID:???かもしれん
0036nobodyさん
03/12/09 11:55ID:???・サブドメインがあればそれも
・ドメインに~が続いていたらそのユーザーID(?)まで
↑の条件付でして、思うようにいってくれなくて困ってます。
$siteurl =~ /^https?:\/\/(.*?)\/((.).*)/;
$hoge = $1;
$hoge .= "/$2" if ($3 eq "~");
こんな感じのとこまで考えたんですけどこれだと
http://hoge.hoge/~hoge
http://hoge.hoge/hoge
は意図したとおりなんですが、
ドメインより後ろに何も入ってないときは駄目だし・・
他にも色々調べながら試したんですが
ドメインの後にスラッシュがないと駄目だとか、
とにかく何か色々だめだめなんです。
正規表現からっきし駄目な僕に教えていただけませんでしょうか?
0037nobodyさん
03/12/09 13:43ID:???これでどうかな?
$hoge = $1 if ($siteurl =~ /^https?:\/\/([^\/]+(?:\/~[^\/]+|)).*/);
0038nobodyさん
03/12/09 14:09ID:???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/~//;
0039nobodyさん
03/12/09 16:14ID:W6bkuxufgooの辞書から関連語句だけを集めて用語辞典を作りたいので、
「説明文から検索」の機能で抽出した後、
左側に出てきた見出しだけをテキストエディタにコピペして、
単語以外は全て削除したいと思っています。
メモ帳とワードの他にVisual C++があるのですが、
これらで何とかできませんか?
例えば・・・
http://dictionary.goo.ne.jp/search.php?MT=%CE%EB%CC%DA&kind=jn&mode=0
すずき 【鈴木】
姓氏の一。...
すずき-あきら 【鈴木朖】
(1764-1837) ...
すずきいせき ―ゐせき 【鈴木遺跡】
東京都小平市にある旧石器...
すずき-うめたろう ―うめたらう 【鈴木梅太郎】
(1874-1943) ...
上記の場合でいうと、
(半角スペース)【鈴木】・・・から行末まで削除、とか
(全角スペース)―ゐせき(半角スペース)【鈴木遺跡】・・・から行末まで削除、というふうに
とにかく最初のひらがな単語だけを残したいのです。
▼などの記号も混ざっているので、段階を踏まなきゃならないのかなとも思いましたが
「正規表現メモ」とか見ても
どうすればいいのかさっぱりなんです(´д`;
よろしくお願いします。
004136
03/12/09 16:36ID:???>>37さんのをちょっとだけテストさせていただいたところ
どうやら期待通りに動いてくれているようです。
それぞれ何をしているのかを調べながら、テストを重ねさせていただきたいと思います
>>38さんの方は返ってくる値が、>>36で質問した
「今回ぼくがやりたいこと」とは期待していたものとは違ったんですが、
最終的にやりたいことが、
「後々入力されたほかのデータが、登録されているサイトのサーバー上にあるか、
というか、
そのサイト上のデータかどうかを調べる」
ということがしたかったので、ユーザーIDの自分の中での定義など、
なにか考え直す必要があるような無いような、そんな感じがしました。
・・何が言いたいのが良くわかりませんし、やたら長文で読みにくいと思いますが、
兎に角何がいいたいかといいますと、
本当に有難うございました。
0042nobodyさん
03/12/09 16:39ID:???下の書き方だとエラーが出てしまいます。どこか間違ってるんでしょうか?
if ($min =~ ^(\d+)(?(?{$1 % 3})(?!))$){
0044
03/12/09 16:45ID:5gjkqVTXそれを言っちゃあおしめえよ。
0046nobodyさん
03/12/11 14:45ID:jBSAkNSo「XXXXX.html」に置き換えるような処理はどうすればよいでしょうか?
XXXXXが可変です。
0047nobodyさん
03/12/11 14:52ID:???004946
03/12/11 15:14ID: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が渡されたよ";
}
0050nobodyさん
03/12/11 15:38ID:???おおう、いいんじゃない。前後はカッコ要らんけど。
$test =~ s/\$img\[(\w+)\]/func($1)/ge;
0051nobodyさん
03/12/11 21:09ID:???if ($min =~ /^(\d+)(?(?{$1 % 3})(?!))$/){
=~の右辺は正規表現だから、m/正規表現/、その省略形、/正規表現/
0052nobodyさん
03/12/11 21:11ID:???0053nobodyさん
03/12/14 11:28ID:9SKP9sfiここの2ページ以降の正規表現おしえてください
0054nobodyさん
03/12/14 12:18ID:???0055nobodyさん
03/12/14 12:19ID:9SKP9sfihttp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・
0056nobodyさん
03/12/14 12:29ID:9SKP9sfihttp://cgupload.dyndns.org/~upuser/up2/imgboard.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・
0058nobodyさん
03/12/14 12:55ID:???0060nobodyさん
03/12/14 12:59ID:???0061nobodyさん
03/12/14 13:01ID:9SKP9sfiしてねーよ妄想野郎
0062nobodyさん
03/12/14 13:02ID:???0063nobodyさん
03/12/14 13:05ID:???◆HTML講座(Web製作板)
http://pc2.2ch.net/test/read.cgi/hp/1010398268/
0064nobodyさん
03/12/14 13:10ID:9SKP9sfiそこでおしえてくれ
0065初心者
03/12/15 04:53ID:llm//hKNが分からないのですが、[@]wordではないし、どうなるのでしょうか。
0067nobodyさん
03/12/15 06:14ID:???0068nobodyさん
03/12/15 09:03ID:???006968
03/12/15 09:05ID:???なんで正規表現でやる必要があるのかよく分からんが。
0070nobodyさん
03/12/15 10:25ID:8LAW+/sT一つの正規表現に拘る必要はないと思うが、、、?
条件分岐だとして例えば
if($key_word=〜/@/ || $key_word=〜/word/){〜以下実行文
では駄目なのかな?
0071nobodyさん
03/12/15 10:31ID:???Read Only Member : 書き込まない利用者。
0074nobodyさん
03/12/15 14:41ID:???0075nobodyさん
03/12/15 23:09ID:8LAW+/sT70は間違ってはいないよ、不充分かも知れんが。
そもそも65の質問がどういうシチュエーションでどういう動作の目的でどういうマ
ッチングをさせたいのかを詳細に述べていないという不充分な訊き方なので、70のよ
うな「充分用を足すかどうかは保証の限りではない」当たり障りのない答えが返って
きても当然だと思うが。
70の記述で取り敢えず「@」「word」が含まれていれば、その含まれている最初
の箇所マッチする。 複数含まれていて、それを全てマッチさせるのか、n回目まで
マッチさせるのかなどでオプション等の補助的記述が必要になって来るし、「含まれ
ている」ではなく「その単語そのもの独立だけに厳密マッチ」させるのならが、また
違う話になってくる、それをイチイチ説明していたら解説書になってしまう、それは
自分で読んでくれってことになる。
0076nobodyさん
03/12/16 09:10ID:???0078nobodyさん
03/12/16 16:12ID:???0080nobodyさん
03/12/18 18:53ID:zzUoxnBBX25.125
X12.1
X78.
でなく
X25
X789
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
0083nobodyさん
03/12/18 19:11ID:zzUoxnBBXは無視してもらっていいです。
0084nobodyさん
03/12/18 19:27ID:???$hoge = "a(b(c))";
の時に、$hoge =~ m/(.*)\((.*)\)/
とすると、$1は"a(b"で、$2は"c)"になりました。
つまり文末から見ていることになるのですが、これを
$1は"a"で、$2は"b(c)"になるようにするにはどうすればいいでしょうか。
よろしくお願いします。
0085nobodyさん
03/12/18 19:36ID:???それは文末から見ているんじゃない。. は ( も含むから
最初の .* が一番長くマッチできるところまで取り込んでいるだけ。
/([^)]*)\((.*)\)/ か /(.*?)\((.*)\)/ かこの辺↓参照。
http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
0087nobodyさん
03/12/18 20:34ID:???0088nobodyさん
03/12/18 21:08ID:zzUoxnBB例えば
10.
10.01
10
のうち、全ての"10"を拾います。 上記3つの数値のうち小数点を含まない
10(3つ目)のみにマッチさせたいんです。
0091nobodyさん
03/12/19 06:15ID:z9mYPuUz0092nobodyさん
03/12/19 08:15ID:tSEWBAlW小数点を含まない数値にマッチさせるパターンを教えて下さい。
X25.125
X12.1
X78.
でなく
##X25##
##X789##
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
009339
03/12/19 10:20ID:???自力で検索したサイトは難しい所ばかりだった気がしたのですが、
>>1のリンク先を一通りち回って、今回は何とかなりました。
たぶん答えるのもアホらしい低レベルな質問だったんでしょうね。
スレ汚し失礼しました。
0094nobodyさん
03/12/19 13:04ID:???0096nobodyさん
03/12/19 23:48ID:???0097nobodyさん
03/12/21 14:45ID:???お前さんのレベルじゃ,
込み入った正規表現に手を出すのはまだ早いんじゃないか?
とりあえずわかりやすい代替手段でも使っておけ。
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"; }
0098nobodyさん
03/12/21 23:40ID:qD9UdeKRnyのキー情報(↑みたいなの)を正規表現で表すことできますかね?
ダウソ板のスレを全部取り込んで、
キー情報だけ抜き出してリストを作りたいです。
0099nobodyさん
03/12/22 00:11ID:???0101nobodyさん
03/12/22 02:02ID:???0102nobodyさん
03/12/23 15:26ID:???からも
xxx.xxxx.ap.so-net.ne.jp
からもプロバイダ名を抽出させる方法を教えてください。
0103nobodyさん
03/12/23 18:11ID:???と
(\S+\.)?\S+\.[a-zA-Z]{3}
俺にはこんなものしか思いつかねーよ
0104nobodyさん
03/12/23 19:52ID:???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
0106nobodyさん
03/12/24 14:10ID:???2ch.netを取得したいと仮定して答えても問題ないかな?
0109nobodyさん
03/12/25 19:44ID:???[-0-9a-zA-Z]+.[-0-9a-zA-Z]+$
多分[-0-9a-zA-Z]じゃ足りないけどよく分からないので。識者よろ
0110nobodyさん
03/12/25 19:55ID:???0111nobodyさん
03/12/25 20:51ID:???<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
0112nobodyさん
03/12/25 21:14ID:???後ろから二つ目の.まで
hogehoge.ne.XXのように.の後が2文字なら
後ろから三つ目の.まで
.XXXのXがすべて\dならIPアドレスということで全部
とでもしておけばいいんじゃない?適当すぎですが
0115nobodyさん
03/12/26 13:51ID:icJ7Wsig$_ = << "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 ;
何方か、お助け。
0117nobodyさん
03/12/27 16:00ID:???のような感じのテキストで[hoge]以外の[と]で囲まれている部分を消して
〜〜[hoge]〜〜〜〜〜〜〜
のようにしたいのですが、hoge以外の場合マッチという方法が思いつきま
せん。[^hoge]で無いことは確かなんですが・・。
文字列の否定の方法をどなたか教えてくださいませ。
0118nobodyさん
03/12/27 17:39ID:???s/\[(?!hoge)[^\]]*\]//g;
http://www.din.or.jp/~ohzaki/regex.htm
0120初心者スレ902,904
03/12/29 16:56ID:???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
ここも見てみたのですが、いまいち意味が分かりませんでした。
教えてもらえると助かります。
0121初心者スレ902,904
03/12/29 17:03ID:???ttp://www.kt.rim.or.jp/~kbk/regex/regex.html#GROUPING_NOBR
ここを読んだら分かりました。
0122nobodyさん
03/12/31 18:09ID:9hwbEMBW/#{str1}/.match(str2)
としたときstr1のメタ文字を通常の文字としてマッチさせたいのですがどうしたらいいですか?
0125nobodyさん
04/01/07 22:03ID:3+H2s8ZL<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>に内包させたい場合どうしたらよいでしょうか
テキストエディタは秀丸を使っています
0126nobodyさん
04/01/07 22:21ID:???置換ダイアログで
検索: <dt>\f[^<]*\f<>\f[^<]*\f<>
置換: \0<a href="mailto:\3">\1</a>
0128nobodyさん
04/01/08 11:30ID:A5R/iNdF<…>となっている不等号は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);
正規表現のせの字もわからんような状態から何とかあちこち検索かけてここまで作りました。
しかし、まだ正規表現のありがたみが足りない気がして、不満です。
よければもっと要約できる点、あるいは不備な点の指摘をお願いします。ちなみに、書き込みのためにここでは全角でインデントいます。コピペの際にご留意下さい。
#-----------------------#
# 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;
}
0132nobodyさん
04/01/13 18:12ID:???0134nobodyさん
04/01/13 19:00ID:???0136nobodyさん
04/01/13 19:07ID:???0138nobodyさん
04/01/13 19:46ID:???0140未承諾広告※ ◆aiY4htt2.2
04/01/13 21:12ID:???と聞こえてくるのは幻聴でしょうか。。。
0141nobodyさん
04/01/13 22:04ID:???0142nobodyさん
04/01/14 08:50ID:???0143nobodyさん
04/01/15 16:48ID:???mb_ereg("正規表現|ない|or|しょう",$text);
//"|" は二つだけですよね?
こんな感じで、複数の文字列にヒットする方法を知りませんか?
eregでもpreg_matchでもどちらでも可能であれば教えて下さい。
0144nobodyさん
04/01/15 17:23ID:???0148nobodyさん
04/01/15 21:38ID:Z1eTG8w5アクセス制限はPerlではできないかと思いますが、
これらを正規表現にてなんとか綺麗にかけないもの
でしょうか。
もしも良い案がございましたらご教授ください。
0152nobodyさん
04/01/16 17:53ID:???あいうえお\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にマッチして欲しいんですが・・・。
0154nobodyさん
04/01/16 20:49ID:???(?:\n?)[^\r\n]+\r\n(?=\r\n)
0155未承諾広告※ ◆aiY4htt2.2
04/01/16 22:03ID:???手抜きかも。。。
0156nobodyさん
04/01/16 22:45ID:???0158nobodyさん
04/01/18 20:18ID:???「(文字列 ほげ か、文字列 ふが)が先頭にある文字列以外にマッチする」という正規表現はどのようにすれば記述できるでしょうか?
/(([^ほ][^げ])|([^ふ][^が])).*/
かと思ったのですが、違うようです……
0160nobodyさん
04/01/19 14:48ID:UUNY3/Bm$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\/([^\/]+)\/※/) { 処理 }
※の部分にスラッシュがあるか、なくてもドットがなければマッチ
という風にすればいけるのかな?などと考えているのですが、
どのように書けばよいのかが解りません。また本当にそれで実現できるのかも「?」です。
わかりにくい質問だとは思いますが、教えていただけませんでしょうか。
0161nobodyさん
04/01/19 15:22ID:???厳密なこと言うと /xxx/yyy がディレクトリかファイルかは、
実際にその URL にアクセスしてみないとわからないので、
どっかで妥協しないといけないと思う。
で、 >>160 のような前提でマッチするとするなら、こんな感じかな。
$hoge =~ /^https?:\/\/$domain\/([^\/]+)\/([^\/]+\/|[^\/\.]+$)/
0162nobodyさん
04/01/19 15:33ID:???有難うございます。確かに厳密にはそうですが、まぁここではそこまで突っ込まないことにします。
で、少し書いていただいたソースでテストしてみましたが、おそらく期待通りのようです。
後でまたテストしてみます。有難うございました。
0163158
04/01/20 00:19ID:???プログラム自体が「設定ファイルに記述した正規表現(のリスト)にマッチしたら」っていう処理なんで、
>逆に、「〜にマッチしなかったら」という処理にした方が楽。
とは分かってるんですが、何とかならない物かと。
……あや、PHPでも '?!' は使えるのか。ってことは、
/^(?!ほげ).*/
で、「文字列 ほげ が先頭にある文字列以外にマッチ」になるのか?
としても、
/^((?!ほげ)|(?!ふが)).*/
じゃないよなぁ……。
0164nobodyさん
04/01/20 03:08ID:???0167nobodyさん
04/01/20 08:28ID:???0168nobodyさん
04/01/20 17:57ID:???長期滞在は精神衛生上よろしくありませんので、あくまでピーピングってください。
0169158
04/01/21 03:02ID:???申し訳ないです。数時間色々試して、「正規表現でそういうのは無理」
と思いつつもつい、知ってる人がいれば良いな程度に書き込んでしまいました。
(「無理」って思ったんなら諦めろよ、俺。)
処理の方いじってみる事にします。(とりあえず、当面質問スレには出向かない方向で。)
ありがとうございました。
0170nobodyさん
04/01/21 06:51ID:???気持ち悪いです。
0171nobodyさん
04/01/21 07:45ID:???0172nobodyさん
04/01/21 15:39ID:???preg_match('/(?:(?!^(foo|bar)).)*/', $str, $arr); if ($arr[0]) do;
これが正規表現でやることか?
つーか>>1のサイトくらい見ろよハゲ
0173nobodyさん
04/01/25 15:45ID:???<a href="#epigraph">▲</a> <a href="#D_20040124">▼</a>
を、
<a href="#D_20040124">▲</a> <a href="#epigraph">▼</a>
と、属性値だけ入れ替えるにはどうしたらよいのでしょうか?(属性値は可変です)
正規表現は苦手で、いくら考えても判らなかったので……。
0174nobodyさん
04/01/25 16:16ID:???こういうことなんかな? 意図がわからんからめちゃくちゃ適当なんだが。
0175nobodyさん
04/01/25 16:27ID:???できました! そっか、こういう風にすれば良かったのか……。
今度からは自分でできるように、正規表現についてしっかり勉強しようと思います。
ありがとうございました。
0176nobodyさん
04/02/03 02:35ID:dCMf0k2c0177nobodyさん
04/02/09 22:07ID:9171cO3Sa.b.c.d/8
とか
a.b.c.d/32
ってどういう意味なんでしょうか?
誰か教えてください…
0179nobodyさん
04/02/10 18:53ID:???PerlでHTMLタグを取り除く処理を行う場合、
s/<.*?>//g;
と書いている場合と、
s/<[^>]*>//g;
と書いている場合がありますよね?
大抵のところで「<.*?>は遅い」とかかれているのですが、
実際どれくらい処理効率が違うのでしょうか
0180nobodyさん
04/02/10 18:56ID:???いくつか並んだ単語の中の、真ん中の単語だけを検索するには
どういう正規表現を使ったら良いのでしょうか?
<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】だけを検索したいのですが可能でしょうか?
いろいろ検索しつつ試行錯誤をしていますが、どうしても分かりません。
どなたかいらっしゃいましたら、教えて頂けないでしょうか?
0182nobodyさん
04/02/11 05:51ID:???0183nobodyさん
04/02/11 21:58ID:???3・4文字目が同じ、5・6文字目が同じような単語をマッチさせる正規表現を教えていただけませんか?
○×△△□□ みたいな形式。1・2文字目はなんでもOK。7文字目以降に何がきてもOK。
sedでおねがいします。
0184nobodyさん
04/02/11 22:18ID:???0185nobodyさん
04/02/11 22:24ID:???0186nobodyさん
04/02/11 22:33ID:???0188nobodyさん
04/02/12 01:23ID:???0189nobodyさん
04/02/12 01:38ID:???こうか?
0190nobodyさん
04/02/12 02:26ID:???tattoo
balloon
saccees
あたりがひっかかればいいのか?
0191189
04/02/12 02:40ID:???/^..\(.\)\1\(.\)\2/
でいいんじゃない?
0192nobodyさん
04/02/12 02:44ID:???Perlで\1とかが使えるのは知ってたのですが、sedでもつかえるとは思って無かったです。
ぶしつけがましいかもしれませんが、Perlで!~と表される「マッチ以外」を
sedで実装するにはどうすればいいのでしょうか。
実は今回初めてsedというものに触れることになったもので・・・
Perlみたく正規表現が使える、というのは知ってたのですが仕様が違うらしくうまくいかなくて・・・
0195nobodyさん
04/02/12 23:51ID:???http://(.)+\.2ch\.net/test/read\.cgi/(.)+/[0-9]{10}/
これでいいですか?
もうちょっとスマートなのあればお願いします。
0196nobodyさん
04/02/13 04:16ID:???0198nobodyさん
04/02/13 17:38ID:???ごめんなさい。素人なものでよくわからないのです・・・
任意の文字は、「(..)+」じゃないんでしょうか・・・
「.+」でいいですか?
http://(.+\.2ch\.net|.+\.bbspink\.com|.+\.machi\.to)/test/read\.cgi/.+/[0-9]{10}/
でいいでしょうか?
それと、Perlでは、10個の数字なら「\10d」でできたと思うのですが、PHPではできないみたいですね・・・
0199195
04/02/13 22:04ID:???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ですね。
0200nobodyさん
04/02/14 02:42ID:???0201nobodyさん
04/02/14 12:38ID:???次の文字列で、<!--from-->〜<!--to-->部分を除去する
正規表現が分からないです。
"あい<!--from-->か<>き<!--to-->うえ<!--from-->くけ<>こ<!--to-->お"
→「あいうえお」を取り出したい
自作の失敗正規表現
/<\!--from-->.*<\!--to-->//g
→「あいお」になってしまう。
0208nobodyさん
04/02/14 23:14ID:???今は
$title =~ s/.*?( alt=\".*?\")*/$1/gs;
$title =~ s/alt="//g;
$title =~ s/"//g;
とやっていますが、効率が悪いと言われました。
0211nobodyさん
04/02/14 23:43ID:???alt属性値は複数ある可能性もあるんです(<img>タグの個数が分からないため)
0212nobodyさん
04/02/14 23:49ID:???で、求めたいことをやるコードなら、今、プログラム板の
Perl質問箱でも答えたとこだが、
@title = ($_ =~ /.*? alt=\"(.*?)\"*/$1/g);
でよろしかろう。
0213nobodyさん
04/02/15 00:04ID:???ヒントを得られたので改変して自己解決しました。
$title =~ s/.*?alt=\"([^"]*)[^(alt)]*/$1/gs;
これでできました。
どうもありがとうございました。
0216nobodyさん
04/02/15 00:24ID:???何か問題があるんでしょうか・・・汗
0217nobodyさん
04/02/15 00:28ID:???alt="〜"以降にaかlかtが含まれるとそれ以降がおかしな事に・・・
0218nobodyさん
04/02/15 02:32ID:???0219nobodyさん
04/02/15 02:58ID:P41SZm3C90020E68E8D0320A9028D14FF40AE7307BD5A8...
これに16文字ごとに00を挿入するにはどう書けばいいでしょうか?
こんな感じに出力したいのですが
0090020E68E8D0320A009028D14FF40AE730007BD5A8...
自分でチュートリアルみながらやってみたら
アホみたいに00で溢れてしまいました・・・
0221219
04/02/15 04:05ID:???$output =~ s/\(................\)/00\1/gs;
0222nobodyさん
04/02/15 04:20ID:???$output =~ s/([0-9A-Z]{16})/\1xx/gs;
print $output;
00ができねー。
0223nobodyさん
04/02/15 04:23ID:???$output =~ s/([0-9A-Z]{16})/00\1/gs;
print $output;
頭00つきで・・・。
0225nobodyさん
04/02/15 04:29ID:???$output =~ s/([0-9A-F]{16})/$1_/g;
$output =~ s/_/00/g;
0227219
04/02/15 05:27ID:???無事できますた
0228>>208
04/02/15 09:16ID:???$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
に出来ればかなり近いものになると思うんですが・・・・
0229未承諾広告※ ◆aiY4htt2.2
04/02/15 10:17ID:???0230nobodyさん
04/02/15 10:55ID:???0231nobodyさん
04/02/15 16:22ID:???0232nobodyさん
04/02/16 14:35ID:???print 'ごめんなさい' if m(_ _)m;
0233
04/02/21 11:23ID:ZPsBKiYf私は↓のサイトで、サッカーの試合後に出される選手の採点を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では無理なようです。
適当に文字コード表を開いたら漢字が一で始まって鶴で終わってたので
これを適用したら、そこそこうまくいったのですが、「黒」はだめなようで・・・
0234nobodyさん
04/02/21 13:17ID:???鶴のうしろに、
鷲 鷹 鷺 鹸 鹿 麓 麗 麟 麦 麹 麺 麻 麿 黄 黍 黒 黙 黛 鼎 鼓 鼠 鼻 齢 龍
これだけの文字が残ってるよ。
しかし、JScriptはUNICODEで範囲指定しなきゃならんのか……
あと、置換で面倒なことしてるとおもったら、trがないのか……
ドキュメントのRegExp.Execute()のところにSubMatchesコレクションの記述がまったくない……
0235nobodyさん
04/02/21 14:01ID:X1kd7Gnd$short = 'hoge++';
という場合に
$long = 'hogehoge++';
にマッチするかどうか判定するにはどうしたらいいですか。
if ($long =~ /$short/) {}
だと ++ の部分でエラーが出ちゃうです。
0236
04/02/21 14:14ID:ZPsBKiYfありがとうございます。「黒部」が読み込めました。
選手名はこれでいけたっぽいです。
>置換で面倒なことしてるとおもったら、trがないのか
どうなんでしょうね。おいらが探しきれなかっただけかも・・・
>RegExp.Execute()のところにSubMatchesコレクションの記述がまったくない
すいません、意味わかんないっす
0237nobodyさん
04/02/21 14:17ID:???VBSは良く分からないけど、
(10|[0-9](\.[05])?)([^\.0-9]|$)
得点はこんな感じでどうでしょ。
>>235
Perlなら
if ($long =~ /\Q$short/) {}
0239
04/02/21 15:28ID:ZPsBKiYfありがとうございます。
しかしそれだと10.0が読み込めないようです。
(10\.0|10|[0-9](\.[05])?)([^\.0-9]|$)
こうすればいいのかな?
0241
04/02/21 16:31ID:ZPsBKiYfdクス!!ありがとうございます。
これで解決です。
0242nobodyさん
04/02/21 16:44ID: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; }
だと、アルファベット小文字が使えてしまいます。
0247nobodyさん
04/02/21 21:32ID:???0248nobodyさん
04/02/21 21:49ID:???PerlはEUCじゃないとマルチバイトの処理できない
0249247
04/02/21 21:54ID:???文字である以上、文字コードだろ?
文字コードは変動しないよな?
できるじゃん!
0251247
04/02/21 22:20ID:???SJIS:ぁ \x82\x9f
SJIS:ん \x82\xf1
/^(?:\x82[\x9f-\xf1])+$/
なんでできないのか理由家! レベル低いかも知れんけどできるだろ?
0252nobodyさん
04/02/21 22:23ID:???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で処理してるらしいけど。
かぶった?
0253nobodyさん
04/02/21 22:23ID:???・・・
なんかもう、ね。
s/あ/ん/;
と普通にマルチバイト入れてやる場合のこと言ってるんだろ・・・
だれも文字コードでやれなんて言ってない
0255247
04/02/21 22:33ID:???>PerlはEUCじゃないとマルチバイトの処理できない
↑特にこことか。
jperl とか言い出す始末。。。
0256nobodyさん
04/02/21 23:00ID:???いや、いいんだけど、>>248と勝手に争ってくれ。
ここ、過疎スレだから、周り気にしないで争ってね、思う存分
0257nobodyさん
04/02/21 23:20ID:???ありがとうございます。
Shift-Jisで、試してみたところ、
正常動作しているようです。
全角アルファベット数字と記号類も
省きたいと思ってたので助かりました。
0258234
04/02/21 23:44ID:???すまん、意味不明なこと書いちゃった。
MSのWindows ScriptドキュメントでRegExpオブジェクトのヘルプリファレンス読んだんだけど、
RegExp.Execute()のところに、実行するとSubMatchesコレクションが生成されるって記述が
ぜんぜんないんよ。
てなわけで、SubMatchesコレクションの存在を知らなかった……_| ̄|○
(ふだんはBASP21コンポーネントのMatch()やReplace()を使ってるし)
SubMatchesってキーワードでヘルプを調べれば載ってるんだけどね。
0259236
04/02/22 10:53ID:???そういうことっすか。
ちなみにつくるとき、ここを参考にしましたよ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting121399.asp
0260nobodyさん
04/02/22 23:25ID:kjGz/T2Cこういう文章から[あたい][とくちょう]の部分を
一括で削除する正規表現を教えてくれないでしょうか。
Wzの検索、置き換えを使っています。
0261nobodyさん
04/02/22 23:39ID:???とかしか思いつかない漏れはここに似つかわしくないですか
0263nobodyさん
04/02/23 10:39ID:???$_[0] = abc\,edf
$_[1] = ghi
という具合に split したいのですが、どうすればよろしいでしょうか?
0264nobodyさん
04/02/23 11:51ID:???split /(?<!\\),/, $str;
以後、Perl の質問は http://pc2.2ch.net/test/read.cgi/php/1075545279/ へ。
0266nobodyさん
04/02/23 20:41ID:Ea0t25blこんなふうに書いてみたけどだめやった。
[^(mojiretu)]
それとも(?!)とか工夫すればできるの?
0267nobodyさん
04/02/23 20:46ID:???0268266
04/02/23 21:30ID:Ea0t25blお願いしまぁす。
0269nobodyさん
04/02/23 22:14ID:???$hoge !~ /^mojiretu/g;
で、文字列以外にヒットするはず
0270nobodyさん
04/02/24 21:18ID: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文字以下の文字列、を正確に検索出来るのでしょうか?
宜しくお願いします。
0271nobodyさん
04/02/24 21:22ID:???egrep -iw "^[a-z0-9./]{6,10}"
途方に暮れて質問させていただいた直後に我に返りました。
wというコマンドを使えば出来ました。
スレ汚し失礼しました…。
0272270
04/02/24 23:35ID:1VWZCh18http://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
の部分が、どうしても引っかかってきてしまいます。
上の書き方だと、間にスペースが入っているものとかを排除できないことは分かったのですが、どうすれば目的の文字数の単語だけが抜き出せるのか…頭がパンパンになって来ました。。。
上手く抜き出すことが出来る正規表現の書き方を教えてください。
よろしくお願いします。
0273nobodyさん
04/02/24 23:40ID:???Perlだと
/^[a-z]{6,10}$/i
で、できるかもしれない。
0274270
04/02/24 23:46ID:???即レスありがとうございます…。
$ egrep -iw "^[a-z]{6,10}+$" y.txt
$ egrep "/^[a-z]{6,10}$/i" y.txt
共にだめでした…。
悩んでみます。
0275nobodyさん
04/02/24 23:52ID:???じゃないのかと。
0277nobodyさん
04/02/25 00:19ID:???grepなら{n.m}をサポートしているみたいだが。
0278270
04/02/25 00:22ID:???egrepだと、とりあえず>>272の状態まではたどり着くのですが、
$ grep -iw "^[a-z]{6,10}" y.txt
これだと何も起きないのです…。
そもそもgrepやegrepだと無理…なのかな…。
0279nobodyさん
04/02/25 00:42ID:???$ egrep -iw "^[a-z]{6,10}$" y.txt
yesterday
yourself
$ egrep -V
egrep (GNU grep) 2.4d
0280270
04/02/25 01:07ID:???FreeBSD、ググッテ見ましたが、自分にはよく理解できませんでした。
自分は
http://sources.redhat.com/cygwin/
このcygwinというのを使用しています。
$ egrep -V
egrep (GNU grep) 2.5
と言うことでした。
つまり、これでは出来ない、ということですかね…。
ありがとうございました。
もうちょっとだけ色々考えてみます。
Copyright c 2001-2004 English Navi All Rights Reserved
↑こういうのが引っかかってくるようだと、英文ページから抜き取ることが出来ないですもんね…。
例としたサイトは辞書形式で、単語ごとに改行があったから何とかなったのか…。
0282281
04/02/25 02:28ID:???0283281
04/02/25 02:33ID:???前の [[:space:]]* は余計かも知れないけど。
$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt
0284270
04/02/25 02:48ID:???遅くにスミマセン…調べ調べて、
$ grep "^[a-z0-9./]\{6,10\}" y.txt
これで出来ました…。
本当に出来てるのか、検証していきたいと思います。
$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt
これでも出来ました!まずは…この意味を解読することから勉強して行きたいと思います…。
昨日cygwin入れてみて、初めてgrep使って…頭がパンパンです。・゚・(ノД`)・゚・。
オヤスミナサイ!
0286270
04/02/25 03:34ID:???$ egrep -iw "^[[:space:]]*[a-z]{6,10}[[:space:]]*$" y.txt
どちらを使っても、y.txtの中の改行をすべて空白に変えてみて、一面単語の海にすると取り出せないですね…。
もう諦めてマジ寝ます。
また明日悩みます。
0287281
04/02/25 04:30ID:???それこそ、man egrep して、冒頭を 100遍読んでみ。
ていうか、grep でそれやるなら、
逆に、空白をすべて改行に変えてみた方が取り出しやすいと思われ。
0288nobodyさん
04/02/25 14:02ID:12gYevYJ予約語が行にあったら文字で挟んで置き換えるという処理なんですが
$ReplaceStr = $left . $word . $right;
$line =~ s/(\W)$word(\W)/$1$ReplaceStr$2/g;
だと行頭と行末が正しく置換できないです。どうすればいいんでしょうか?
0289nobodyさん
04/02/25 14:32ID:???0290nobodyさん
04/02/25 17:55ID:12gYevYJありがとうございます!
こんな便利なキャラクタがあったんですね!
それぞれ予約語の配列にforeachかけてやってたんですが
速度的にはこっちの方が速くなるんでしょうか?
chomp(@ReserveWords);
$MachWords = join("|",@ReserveWords);
foreach $line(@inputlines){
$line =~ s/\b$MachWords\b/$left$&$right/g;
}
0291266
04/02/25 20:16ID:v7alvSdo>>269
レスどうもっす。
>Perlなら
>$hoge !~ /^mojiretu/g;
>で、文字列以外にヒットするはず
ん〜、申し訳ない、説明不足した。
正規表現で「mojiretu」が無い事にマッチしたいんですよ。
どうでしょう?
0292nobodyさん
04/02/25 20:19ID:???http://www.din.or.jp/~ohzaki/regex.htm#Without
0293nobodyさん
04/02/25 22:58ID:???0294nobodyさん
04/02/26 12:30ID:pqrzwzpGとした場合、
@が含まれる文が、エラーになるのは
あたりまえなのですが、
病院 という語句までも制限してしまいます。
shift-jisですけど、文字コードとかが関係しているのでしょうか?
0295nobodyさん
04/02/26 13:27ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0296294
04/02/26 13:29ID:???「ァ」や「院」は@と認識されてしまうみたいですね・・・
一度、他の文字に変換してから、
元に戻そうと思います・・・
0298nobodyさん
04/02/26 16:11ID:???print $1;
}
という処理をした時に、$search内に正規表現用文字($や^等)が入っていた時
例)
$search = "[abc]"等
に、それを正規表現としてとらえてしまいます。
調べてみたところ、どうやらそれが正しい動作という事でしたが、
この$searchを単なる文字列として見て、例のような文字列の検索を行った時に
「aかbかc」ではなく、「"[abc]"という文字列」として検索するにはどうすれば良いんでしょうか。
0299nobodyさん
04/02/26 16:31ID:???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/ へ。
0300nobodyさん
04/02/27 00:44ID:28vfJb2lperlなのですが、
テキストボックスに入れた数値を$in{'count'}に格納して、
それが数字じゃなければエラー出しして終わりにしたいのですが、
数値だろうと、そうでなかろうと、いかのunlessの中を通りません。
unless ( ($in{'count'} =~ m/^[1-9][0-9]*$/) || ($in{'count'} == 0) ){
print "Content-type: text/html\n\n";
print "数字を入れてください。もどってください。";
exit;
}
0301nobodyさん
04/02/27 01:04ID:???こういうことか?
if ("hoge" == 0) { print "ZERO\n" } else { print "NON-ZERO\n" };
0302300
04/02/27 01:33ID:???えっと、ごめんなさい、正確に言うと、
「正の整数」を入れてもらいたいので、そうでない場合は、エラーではじきたいのですが。。。
「dhfshfhjksad」みたいな適当な文字を入れてもエラーをすり抜けてしまうし、
「345」みたいちゃんとした「正の整数」を入れても、エラーをすり抜けてくれる。。。
0303nobodyさん
04/02/27 01:46ID:???数字は $in{'count'} =~ m/^[1-9][0-9]*$/ で真になるから unless
ブロックに入らない。(数字を含まない) 文字列を数値コンテキスト
で評価すると 0 になるので $in{'count'} == 0 で真になるから unless
ブロックに入らない。
以後、Perl の質問は http://pc2.2ch.net/test/read.cgi/php/1075545279/ へ。
0304nobodyさん
04/02/27 03:08ID:zgPOAYIB感謝!
(?:(?!foo).)*
これかぁ〜、なるほど実験しみます。
0306nobodyさん
04/02/27 21:31ID:???0307nobodyさん
04/02/28 22:17ID:???こういうタグをいったんサニタイズした文字列
<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」が入ってうまくいくと思うのはマチガイ?
0308nobodyさん
04/02/28 22:22ID:???実体参照されちまった。こうです。
&lt;P class="fuga"&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;/
0309nobodyさん
04/02/28 22:25ID:K5IxNsG1<P class="fuga">hoge</P>
m/<(P|H[1-6]|ADDRESS|PRE|BLOCKQUOTE|DIV|OL|UL|DL)(| class="\w{1,20}")>(.*)<\/P>/
0310nobodyさん
04/02/28 22:26ID:???http://www.kt.rim.or.jp/~kbk/regex/regex.html#BACKREF
0311nobodyさん
04/02/28 22:32ID:???く、なるほど。perlの特殊変数と正規表現を混同していたわけか・・・
ありがとうございました。恥ずかしい失敗ですが、一歩前進。
なんども失敗してスマン。
0312nobodyさん
04/02/29 14:20ID:tS63OhT8整数のみのチェックは正規表現でできました。
^[0-9]+$ 整数のみの正規表現
EUCの半角カナのみの正規表現は?
0313nobodyさん
04/02/29 14:29ID:???^(ア|イ|ウ|エ|オ)+$
0314nobodyさん
04/02/29 15:25ID:???EUC の半角カタカナは、SS2 (8E) + JIS X 0201 カタカナ (A1-DF) だから、
こんな感じでいけそうな気がします。
いかがでしょうか。
^(\x8E[\xA1-\xDF])*$
0315nobodyさん
04/02/29 17:41ID:???PHPスレで聞いてる
0316nobodyさん
04/03/01 00:32ID:uvhpNWvzの?以降の件名部分をPHPで削除したいんだけど、
$str= ereg_replace("/?.*/", "" , $str);
では無理だった・・。
これではお話になりませんか?
0317nobodyさん
04/03/01 00:56ID:???0318316
04/03/01 02:31ID:???要らないかもしれないけど、書いときます。
$mail = "a@a.a?subject=件名"
preg_match("/^[\w\-\.]+@[\w\-]+\.[\w\-\.]+/","$mail", $matches);
$mail = $matches[0];
正解かどうかわかりませぬが、これでやっていこうと思います。
0320nobodyさん
04/03/03 11:51ID:???1.英数字のピリオド区切り
2.英数字のみ
のいずれかの条件でマッチさせようと思い、
(リモホ) =~ m/^(\w+\.?)+\w+$/
などとやったのですが駄目なようで、これ以上思い浮かびません。
どうすれば良いのでしょう。
0321nobodyさん
04/03/03 15:08ID:???こうじゃね?
m/^(\w+\.)*\w+$/
もうちょっと仕様どおりちゃんとやるならこう?
m/^(?:[0-9a-z]+\.)*[0-9a-z]+$/i
0322nobodyさん
04/03/04 01:43ID:???有無を調べれば良かったんですね。
ありがとうございました。
0323nobodyさん
04/03/05 07:43ID:???if ( $charactor =~/[^あ_ん]/) {
print "あーんを以外含んでいます。\n";
}
というふうにしてみたのですが
上手くいきません
自分では見当がつかないのでアドバイスをください
0325nobodyさん
04/03/05 11:00ID:???># 全角ひらがな [ぁ-ん]
>$Zhiragana = '(?:\xA4[\xA1-\xF3])'; # EUC-JP
>$Zhiragana_sjis = '(?:\x82[\x9F-\xF1])'; # SJIS
なので、EUC-JPならこうかな。つかPerl分からん。
if (!$charactor =~/^(\xA4[\xA1-\xF3])*$/) {
print "ひらがな以外を含んでいます。\n";
}
0326nobodyさん
04/03/05 11:53ID:???コピペするときに間違えました。
>>325
ありがとうございます!
if ( $charactor =~/[^\x82\x9F-\xF1]/) {
print "あーん以外を含んでいます。\n";
}
これで出来るようになりました。
0327325
04/03/05 12:00ID:???ちょっと待て、それじゃ誤判定しない?
ひらがな以外にマッチではなく、「『文字列がひらがなのみ』にマッチしない」としないと。
if ($charactor !~ /^(?:\x82[\x9F-\xF1])*$/) {
print "ひらがな以外を含んでいます。\n";
}
0328nobodyさん
04/03/06 21:48ID:???ハイフンも使えるから
m/^([\w\-]+\.)*[\w\-]+$/
のような気が。
#ハイフンのエスケープ要るか要らないか忘れたけど
0329nobodyさん
04/03/07 22:19ID:???マッチする正規表現をお教え下さい。
ア[ッツ]?ト{マ[ーアァ]?ク}? とか アッ?ツ?ト{マ[ーアァ]?ク}?
初心者なので全然だめです・・。
0330nobodyさん
04/03/07 23:11ID:???@|@|(あ[っつ]?と).*|(ア[ッツ]?ト).*|(ア[ッツ]?ト).*
でいくことにします。
アットローンでもマッチしちゃうけどいいや・・・・・。
0331nobodyさん
04/03/07 23:11ID:???0332nobodyさん
04/03/08 03:41ID:???0333nobodyさん
04/03/08 05:41ID:???アットローンでもアトムでもマッチしちゃうよね?
^ア[ッツ]?トマ[ーアァ]?ク$ だと「アット」「アト」がマッチしない・・・
「アット」と「アットマーク」にマッチして「アットローン」にマッチしないなんてできないのかなo(~ρ~)o zzz・・・
0335nobodyさん
04/03/08 13:19ID:???その中で「//〜〜〜\n」や「/* */」などのいわゆるコメントの部分を
色分けして表示したいのですがコメント部分とマッチさせる正規表現がどうしてもわかりません。
「/* */」については/*を<FONT COLOR=RED>/*にし
*/を*/</FONT>にしたのですがこれだと
「""」に囲まれたコメントではない部分も色分けされてしまいます。当たり前ですが・・・。
0336nobodyさん
04/03/08 15:37ID:???こんなんでいいんじゃないか
<?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;
?>
0337nobodyさん
04/03/10 21:20ID:???$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 <= だと駄目です
なぜに?
0339337
04/03/10 22:49ID:QeEknFJhFTP\x1B\x24B\x40\x5CB3
perl 接続 <= これもOK
\x40\x5CB3
perl 接続FTP <= だと駄目でつ
\x40\x5CB3\x1B\x28BFTP
s/\G と逝ってみたいんですがどこで使うんでつか
アホですまそ
0340nobodyさん
04/03/11 22:13ID:???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 に文字列すべてが入る
みたいな感じでだめでした。
わかりにくい上に低レベルな質問で
申し訳ないですがよろしくお願いします。
0342340
04/03/11 23:05ID:???ありがとうございました。完璧です。
こういうときに Positive Lookbehind Assertion 使うんですね。
ぜんぜん思いつきませんでした orz
0343nobodyさん
04/03/22 16:58ID:JNc4vCtRJavaScriptでの分岐条件ですが、
「reply_toがないか、あるいはあっても数字以外の文字が含まれている場合はtrue」
という条件式です。
上記でどうもうまく行っているのですが解せません。
数字以外の文字って「\D」ですよね。何か勘違いしていますか?
perl/CGI+JavaScriptで製作中ですが正規表現はあまりやった事ないです。
あるいは上記条件式だとどう書くのが普通ですか?
0345nobodyさん
04/03/22 17:04ID:???0346nobodyさん
04/03/22 17:54ID:???> if (inNaN(reply_to)) だった
isNaN(reply_to)でした。
こんなんがあるんですね。
勉強になりました。
0347nobodyさん
04/03/22 18:05ID:???あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
たぶん >>343 のはうまくいっていないと思われ。
マッチしないときには -1 を返すので、
if ( !reply_to || reply_to.search(/\D/) >= 0 )
とかじゃないかな?
0349343
04/03/22 18:24ID:???> isNaN で良いの? isNaN("123foo") とかも false になるよ。
えーと、今回は数字以外の文字が含まれてたら false でオッケイです。
>
> あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
> たぶん >>343 のはうまくいっていないと思われ。
> マッチしないときには -1 を返すので、
> if ( !reply_to || reply_to.search(/\D/) >= 0 )
> とかじゃないかな?
なるほど、、、微妙に返り値が違うんですね。
単純にブール値を返すもんだと思ってました。
勉強になりました。
クライアントサイドJavaScriptってうまく組み込むと便利ですけど、
ブラウザ依存だったりバージョン互換性の問題とか、結構微妙ですね。
いえ、今回の件とは関係ないですけど。
ありがとうございました。
0350343
04/03/22 18:26ID:???> >>347
> falseになるわけねぇだろうが
ああ、そうですね。数字かどうかですからね。
trueでいいんです。
たぶんうっかりミスですね。御指摘どうも。
0352nobodyさん
04/03/29 21:33ID:???0353nobodyさん
04/04/08 15:03ID:AQ8qwK3rのようなダブルクォートで囲まれた文字列を取得したいのですが、
文字列に\"を含んでいる場合うまく取得できません。
"[^"]*"と書いているので当然と言えば当然なのですが・・・
どのようにしたら、\"を含む文字列をうまく取得できますでしょうか?
0354nobodyさん
04/04/08 15:38ID:???/"(.*)"/
こういうのもありかもしれないけど。
/"((?<=\\").*)"/
0355354
04/04/08 15:46ID:???0356nobodyさん
04/04/08 17:11ID:???0357nobodyさん
04/04/09 17:13ID:Nk138A/fhtmlファイル中で、aタグ中のリンク先の置換をやりたいのですが、
・mailto:やtel:が含まれる場合は除外
・リンク先(href="url")のurlが、cgiやphp、jspだったら除外
というのをやりたいのです。
で、それで引っ掛かった分(htmlやhtm)を、特定の文字列に置換したいのです。
で、
/<a href="(([^(tel:|mailto:)][-0-9a-z/@~]+[^(.php|.cgi)]") ([^>]+))>/i
なんてやってるんですが、思うようにならんです。
どこがおかしいのでしょう?
先達の皆さま、よろしくおながいします
0358未承諾広告※ ◆aiY4htt2.2
04/04/09 17:59ID:???もしかして、//i -> s///i かな?
s{<a href="((?<!tel:|mailto:).+?(?!\.php|\.cgi)".+?>)}{url=$1}i;
実証はしていませんm(_ _)m
0360nobodyさん
04/04/09 19:04ID:???s/<a href="((?!tel:|mailto:)[-_.!~*'()a-z0-9;\/:@&=+$,%#]+(?<!\.php|\.cgi))"[^>]*>/url=$1/i;
こんな感じ?
>>357
'?'を許さないことで、クエリストリング付きは
即時却下する所が面白いね。
0361nobodyさん
04/04/09 19:08ID:???一回のマッチで全部判定できなくもないが、分けた方が楽且つ柔軟。
言語が 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;
0362nobodyさん
04/04/09 21:00ID:B1AI3byV明日再挑戦します。
ありがとうございます
0363nobodyさん
04/04/10 13:43ID:rupp3c37360さん、361さん、ありがとう!うまくいきました。
でも、361さんのは、漏れには何をやってるのか識別不能です....鬱
0364nobodyさん
04/04/14 21:47ID:8xwTd1PB0365nobodyさん
04/04/14 21:47ID:8xwTd1PB0366
04/04/20 01:22ID:UZzv87o5<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;
としてしまうと、元々 " で括られている場合にもさらに " が付いてしまうため困っています。
" が無い場合のみ " で括るようにするにはどうすればよいでしょうか。
お知恵をお貸しくださいませ。
0367nobodyさん
04/04/20 06:46ID:???s{
(?<=href=)
(?:(")|(')|(\b))
(
(?(1)[^"]+)
(?(2)[^']+)
(?(3)[^\s>]+)
)
(?(1)")(?(2)')
}
{"$4"}gix;
0368nobodyさん
04/04/20 16:41ID:2Qvzqrcyあるhtmlファイルの
<!--ここから//-->
テキストテキストテキストテキストテキストテキスト
<!--ここまで//-->
という「<!--ここから//-->」の部分と「<!--ここまで//-->」の間にあるテキストを
他のphpファイルからereg_replaceで置換したいのですが可能でしょうか?
可能な場合、上記の範囲指定は正規表現でどう書いたらよいのでしょうか?
0369nobodyさん
04/04/20 17:17ID:???http://php.s3.to/man/ref.regex.html
http://www.kt.rim.or.jp/~kbk/regex/regex.html#POSIX
0372nobodyさん
04/04/21 05:52ID:???s/(<\w+\s+href\s*=\s*)(['"]?)([^\2\s>]*)\2(\s*>)/$1"$3"$4/gi;
# まんまですな。
>>371
どこらへんがDQNなの?
0377nobodyさん
04/04/21 19:55ID:???おいおい、もう夏の暑さが近づいているというのにまだ春厨か?
いい加減自演認定は恥ずかしいと思えよ。
俺は面白そうだから便乗しただけ
#って書いてもどうせ煽ってくる春厨だろうけど
0379nobodyさん
04/04/21 20:02ID:???俺は面白そうだから便乗しただけ
俺は面白そうだから便乗しただけ
ワラタ
0382372
04/04/21 21:03ID:???がっがり。
0383nobodyさん
04/04/21 22:05ID:???0385nobodyさん
04/04/21 23:45ID:???これをPHPで使うにはどう変更すればいいでしょうか?
preg_replace関数を使ってみたのですが、マッチしてくれませんでした。
0387nobodyさん
04/04/22 06:41ID:???$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);
こんなのでいけた。
うまくいきました。ありがとー
条件を " でくくっててマッチしないのを、 ' に変更したらできました。
0389nobodyさん
04/04/28 11:02ID:YDy2pcOHsub/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 $_;}
に書き換えるとローカルでもサーバー上でもマッチします。なぜでしょうか。
0390nobodyさん
04/04/28 13:08ID:???「ローカル」と「サーバー」のそれぞれの Perl のバージョンは?
スクリプトと sub/test.htm のそれぞれの文字コードは?
0391389
04/04/29 02:51ID:SDhjA2B7ローカルは5.8.3でサーバーは5.6.1です。
ファイルの文字コードはシフトJISです。
0392nobodyさん
04/04/29 02:56ID:AOm5G2zY0393nobodyさん
04/04/29 15:34ID:cR/VctPCのような文字列に対して、imgタグやbrタグだけ残して、他の<>"'&あたりを文字参照に置換
したいんですが、正規表現一撃でいけますか?
0394nobodyさん
04/04/29 15:38ID:???0395nobodyさん
04/04/29 15:46ID:???文字参照→文字実体参照
上の例だと
適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列<適当な文字列"適当な<br>文字列
となって欲しいのです
0396nobodyさん
04/04/29 16:02ID:???0398nobodyさん
04/04/29 18:44ID:???0399nobodyさん
04/04/29 19:01ID:???0400nobodyさん
04/04/29 19:06ID:???その程度のことgoogleで調べろよ
0403nobodyさん
04/04/29 20:44ID:???WindowsXP SP1
ActivePerl 5.8.0.806
正規表現でカタカナの「ゼ」を使うとエラーになってしまいます。
カタカナのゼを含む場合だけ「Unmatched [ in regex;」というエラーで止まってしまい、ほかの文字は大丈夫そうなのですが、対処法ありませんか?
if($temp =~ /ゼ/){
色々;
}
0404nobodyさん
04/04/29 20:51ID:???そんなバカなと思いつつ確認完了。
なぜだろう。
>>393
できるかも知れないけど、プログラム書いたほうが楽だと思う。
>>396
http://www.w3.org/TR/html401/charset.html#h-5.3.2
0405nobodyさん
04/04/29 20:59ID:???ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
if($temp =~ /\Qゼ\E/){
0406nobodyさん
04/04/29 21:11ID:???ありがとうございます。
とりあえず意図した動作をするようになりました。
文字コードのせいで [ に認識されていたんですね。
紹介していただいたURLもブックマークしました。
熟読しますね。
0407nobodyさん
04/04/29 23:02ID:???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で書いてみたけど、どこか穴があるかも。
0408nobodyさん
04/04/29 23:05ID:???$1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
0409nobodyさん
04/04/30 06:46ID:???> http://www.w3.org/TR/html401/charset.html#h-5.3.2
なるほど。では、タグ外で"とかまで変換しても害は無いですね。
0410393
04/05/03 22:32ID:???しかし内容を理解しようとしてみたが、いまだわかりません。
簡単なhtmlパーサを作っていて、<br>と<img>はインライン要素で、閉じタグもない
から、他の処理がすべて終わった後に置き換えればいいや、というロジックでした。
よく考えたら、文字列中に実体参照で<>が出てきたとしても、&が&に展開
されるので、いちど実体参照に展開してから、すべての処理が終わった後に、
s/<br>/<br>/i
s/<img src="([^"<>]*)">/<img src="$1">/i
これでいけました。
いろいろテストしていたので、反応が遅くてすまんです。
0411393
04/05/03 22:39ID:???それと、お世話になりましたので、ヘタレの作ったhtmlパーサでも見てやろうかという
方がいるならアプロダにでもソースさらします。
0412nobodyさん
04/05/03 23:52ID:???0413393
04/05/04 00:09ID:???HTML::Parseモジュールの使い方を理解するのが面倒くさかった
&
掲示板の投稿に特定のタグと属性のみ許可する、文法に従わないタグは
その旨マークしてテキストとして表示する、という限定的用途なので、自作
のほうが汎用モジュールより高速だと思った
&
Perlと正規表現の勉強のため
て、感じで。
0414nobodyさん
04/05/04 01:54ID:???実用には不向きなので。
0415nobodyさん
04/05/05 18:30ID:???名無しさん@ゴーゴーゴーゴー! :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
0416未承諾広告※ ◆TWARamEjuA
04/05/05 18:55ID:???0417nobodyさん
04/05/06 22:18ID:???/^0?[0-3]?[0-7]{1,2}$/ってどんな意味ですか?
0418nobodyさん
04/05/06 23:08ID:???0419nobodyさん
04/05/07 00:17ID:???0420nobodyさん
04/05/09 00:57ID:R8gJ7rV0にはどうしたらいいでしょうか。
$_ =~ s/表/表\/g;
みたいなことをしたいんですが上記の場合「表」のコードが(95 5C)なのでエラーに
なってしまいます。コードのまま検索かけてもうまくいきませんでしたし
$_ =~ s/95 5C/95 5C 5C/g;
どうすれば「表」という一文字を検索に引っ掛ける事ができるでしょうか?
0421420
04/05/09 01:29ID:???$_ =~ s/\x95/表\/g;
でも\x95だけでは他の文字にも影響が出てしまいますよね。それで
$_ =~ s/\x95\x5C/g;
としてみましたがこれではマッチしてくれませんでした。どうすればいいでしょうか。
0422nobodyさん
04/05/09 01:45ID:???出力だけでなく処理もSJISでやってるなら展開しないように工夫すれ
0423nobodyさん
04/05/09 02:02ID:???0424420
04/05/09 02:08ID:???はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。
ところで、みんなはクエリは受け取ったらeucに変換して処理をした後、出力時にsjis
に変換しているのですか?
プラットフォームがwinならsjisで、unixならeucに変換して扱うみたいな事を聞いたの
ですが、winでも処理時はeucで出力の時にsjisに変換すれば大丈夫なんでしょうか?
0425nobodyさん
04/05/09 02:16ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0426nobodyさん
04/05/09 02:18ID:???HTMLをEUCで書く
PerlCGIをEUCで書く
「表」とかで悩んだことは一度も無し。
ほんとみんな無駄な苦労してるなあと思ってる。
HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
(変換時にはちゃんとincode=sjisを付ける)
0427420
04/05/09 02:39ID:???も自動的にShift_JISで書いてました。何かエディタを使おうと思いますが、色付けもなく
特定文字が太字にもならない、メモ帳と違うのは漢字コード指定で再読み込みができる
っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。
>>426
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
〜最初にeucに変換してから処理する〜の意味が理解できなくて・・・
>>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
解説されてるのでしょうか?
とりあえずお腹が空いたので、お茶漬けでも食べます。
0428nobodyさん
04/05/09 03:08ID:???> はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
> 内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。
そこでなんで $_ =~ s/表/表\/g; みたいな処理が必要なの?
0429420
04/05/09 03:48ID:???中に表が入っているか検索して、入っていたら表の後ろに\をつけて問題を解決しようと
思ってましたが、sjisでやること自体が間違いみたいですね。
ところでこれはスレ違いな質問なんですが、エディタを使う事にしたのでファイルの関連付けをメモ帳の部分を
全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
どうしてでしょうか。
0430420
04/05/09 04:05ID:???>(変換時にはちゃんとincode=sjisを付ける)
perlをeucで書く場合(HTMLがShift_JIS指定されてる場合),
print "文字列";
を
$data="文字列";
jcode::convert(\$data,"sjis");
print $data;
としなくてはならないのですか?ってこれも凄いスレ違いですね。こうゆう事はどこのスレに行って
質問すればよいでしょうか。
0432nobodyさん
04/05/09 04:38ID:???> っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
> 太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。
「勝手に」なるんだったら使えないな。素人の言い訳みたいだな。
> ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
> エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
普通ブラウザ側の表示文字コードは自動判別になっている。
自動判別に失敗するのを防ぐためのContent-Typeだ。(IEはContent-Typeは見ないんだったっけ?
> >>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
> 解説されてるのでしょうか?
ちゃんと読んでから何か発言してください。
>>429
> 全て変えたのですが、HTMLページのソースを開くときに何故かメモ帳が起動してしまうのですが
> どうしてでしょうか。
窓の手入れろ
0433nobodyさん
04/05/09 04:40ID:???> >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
0434420
04/05/09 05:03ID:???色々ためになるアドバイスありがとうございました。
>>433
参考にします!ほんとに感謝です。
それでは失礼します。
0435nobodyさん
04/05/11 15:44ID:g6OxcqtT文字列 a=A b="B" c="C d=D" e に対して、
a=A
b="B"
c="C d=D"
e
が出てくるパターンを教えてくださいませ。
之では駄目みたいなんです → /(\w\=(\w|\"\w\")|(\w))/
0436nobodyさん
04/05/11 16:11ID:???0437436
04/05/11 16:15ID:???0438435
04/05/11 16:26ID:???0439nobodyさん
04/05/24 16:10ID: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です。
0440nobodyさん
04/05/25 01:23ID:???一行は無理だと思う。
0441未承諾広告※ ◆TWARamEjuA
04/05/25 11:33ID:???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;
眠たいのでごちゃくちゃ、、、スマソ
0442nobodyさん
04/05/25 13:24ID:???0443439
04/05/25 17:16ID:???このコードを眺めて精進します。本当にありがとうございました。
0445nobodyさん
04/05/25 20:15ID:???0446nobodyさん
04/05/30 02:31ID:d8FeFDnu文字列は 'YYYYMMDD-hhmmss', 'YYYYMMDD' の二種類がマッチして、
前者は YYYYMMDD と hhmmss を、
後者は YYYYMMDD と '' (空) を取得したいと思います。
/(\d{8})-(\d{6})/ では後者で取得できませんでした。
どなたかパターンを教えてくださいませ。
0447nobodyさん
04/05/30 02:35ID:???0448nobodyさん
04/05/30 02:47ID:???しかしながら、取得した配列が
前者が YYYYMMDD-hhmmss YYYYMMDD -hhmmss hhmmss
後者が YYYYMMDD YYYYMMDD '' ''
となってしまいました。
欲しいものは
YYYYMMDD-hhmmss から取得したのが YYYYMMDD-hhmmss YYYYMMDD hhmmss
YYYYMMDD から取得したのが YYYYMMDD YYYYMMDD ''
なのです
文を追加することで簡単に直せるのですが、パターンで解決できましたら、
よろしければ後学の為にも教えてくださいませ。
0449nobodyさん
04/05/30 02:50ID:???0452nobodyさん
04/06/04 17:11ID:5ERN6S7Jhttp://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]
どうすれば良いのでしょうか?
0453こうかな?
04/06/04 17:38ID:???0455nobodyさん
04/06/21 10:56ID: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>
とやっても上手くいきません。(↑笑わないでくださいね。これでも必死なんです・・・)
エディタは秀丸です。どうかよろしくお願いします。
0456nobodyさん
04/06/21 13:16ID:???きっとこんなんじゃ駄目なんだろうな。
0457455
04/06/21 13:20ID:???[0-9]+\f →<a name="\0">\0</a>
これで出来るようになりました。
今度からもっと調べてから書き込みますね。
スレ汚し失礼しました。
0459nobodyさん
04/06/23 14:38ID:StfIGGBa上記の文字列から'test2'の部分だけを取り出したいのですが、
'm /<tag>(.*?)<\/tag>/;' では$1に 'test1<tag>test2' まで入ってしまいます。
'm /<tag>.*?<tag>(.*?)<\/tag>/;' で望みどおりにはなるのですが
エレガントではないように思います。
もっと良い表現はないでしょうか?
0460nobodyさん
04/06/23 15:40ID:???0461460
04/06/23 15:57ID:???0463nobodyさん
04/06/23 18:16ID:???(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
0464nobodyさん
04/06/24 22:52ID:???http://cgi25.plala.or.jp/~c6h6/em_wiki/index.php?%C0%B5%B5%AC%C9%BD%B8%BD%B7%C7%BC%A8%C8%C4
0465nobodyさん
04/06/25 11:54ID:g4l68VjTと言う文字列があったとして、'B'の2個目の後ろの数字とか、
'A'の3個目の数字などの指定はどうしたら良いでしょうか?
Perlでお願いします。
{m回目にマッチ}を使えば良いかと思ったのですが、使いかたがわかりません。
0466nobodyさん
04/06/25 12:01ID:g4l68VjTm /.{3}(\d)/;
とかで'B'の2個目の後ろの数字は取り出せるのですが、
'A'や'B'はhtmlのタグの変わりですので、任意の文字列の
希望するヒット回数の後ろの文字列を取り出したいと思っています。
0468nobodyさん
04/06/25 12:20ID:???/.*B.*B(\d)/
とかやるしかないんじゃないの?
0469nobodyさん
04/06/25 12:25ID:g4l68VjThtmlの中の2個目のtableタグの中の文字列を取り出したり、
3個目の画像のURLを取り出したりしたいです。
>>468
>つか、{m}はm回数目にマッチじゃないからね。
ご教授ありがとうございます。
0471468
04/06/25 12:36ID:???/(?:.*?B){m}(\d)/
……でもこれってHTML解析とは違うような気がする。
0472nobodyさん
04/06/25 12:46ID:g4l68VjT2個目の<tabe></table>内の10個目の<td></td>の間の文字列を取り出したいのですが、
エレガントな表記方法をお願いします。
>>471
まだまだ初心者なので的確な表現ができなくて申し訳ありません。
自分で調べるとっかかりが欲しかったので、>>465のような質問にしました。
0474nobodyさん
04/06/25 13:15ID:???>>472
そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉。
0475nobodyさん
04/06/25 13:31ID:g4l68VjTぐたい-てき 0 【具体的】
一般的なものや観念的なものではなく、個々の事実によっているさま。
「―に例をあげる」
具体的に例をあげているだろうが。
具体的という意味がわからないならもう帰っていいよ
>>474
>そのくらい複雑なことするようなら HTML パースライブラリ使った方が吉
ご教授ありがとうございます。
HTML パースライブラリというのを知っただけでも大きな収穫を得ました。
0476nobodyさん
04/06/25 13:42ID:???一番必要なのは日本語の勉強だな。
0477nobodyさん
04/06/25 14:10ID:???>2個目の<tabe></table>内
<table><td><table/></td></table><table/>
どれが2個目のテーブルですか。
どこが具体的ですか。
脳内ですか。そうですか。
おめでたい頭してますね。カワイそうに。
0480nobodyさん
04/06/29 20:28ID:8D9V5eyppreg_match("/<a href=(.*)>(.*)<\/a>/i",$str,$str_reg);
これだと、<b></b>があるため、URLとタイトルがうまく抜き取れません。
http://www.abc.com/
<b>ABC</b>company
の2つを抜き出したいのですが、どうしたらいいのでしょうか?
<b>タグが入っていない場合は、うまくいくのですが…。
0483nobodyさん
04/07/03 16:46ID:3JpN2Yosや
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桁のユニークな英数字
を得たい。
よろしくお願いします。
0484nobodyさん
04/07/03 16:48ID:???SN\d{12}
0487nobodyさん
04/07/16 14:35ID:IH9/xCo3アラビア数字(第1条〜第999条)を漢数字(第一条〜第九百九十九条)に置き換える式を教えてください。
0488nobodyさん
04/07/16 15:37ID:ihM1iEsJ「http://hoge.com/***」の***が、先頭一致で(aaa/|bbb/)以外の場合に、
hoge.com/***をhoge.com/index.cgi?***に変換。
〔(aaa/|bbb/)の場合通常のリクエストと見なす〕
〔***は任意〕
Apacheのmod_rewriteで行い、記述は.htaccessで行う。
0489nobodyさん
04/07/16 16:01ID:???.htaccess質問コーナー Part2
http://pc5.2ch.net/test/read.cgi/hp/1084861566/
0490nobodyさん
04/07/16 16:13ID:???【Apache】mod_rewriteについて語るスレ
http://pc5.2ch.net/test/read.cgi/php/1023791370/
というのもありますが、どちらがいいのでしょうか?
0491nobodyさん
04/07/16 17:28ID:???パフォーマンスが悪いのは承知で、
$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のオプションで全角半角を無視ってのできないかなあ。
0493nobodyさん
04/07/17 01:01ID:l2+iEUo8雑多な文字列の入ったテキストファイルの中から、ホスト名を抽出するにはどう書けばいいのでしょう。
実際やりたいことは、テキストファイルからホスト名部分を抽出→ereg_replaceで空白に置換え。
つまりホスト名の削除です。
0495nobodyさん
04/07/17 04:58ID:aixfBR+9以下のような文字列にて"#"より後ろの文字列を
正規表現を使用したeregi_replace関数を用いて全て削除しようと考えています。
("#"も含みます)
$stirng = "あいうえおaiueo#かきくけこ"
以下のようにやっていますが、うまくいきません。
$b = eregi_replace("[#.*]","",$stirng);
どのようにすればよいのでしょうか?
0497nobodyさん
04/07/17 11:31ID:l2+iEUo8>>494
各行から以下のような形式のホスト名部分を削除
#####
YahooBB***********.bbtec.net
\\******.ppp.dion.ne.jp
\*****-*****\\****\-acca.tokyo.ocn.ne.jp
\\***\*\.speednet.ne.jp
\\\.\\\.\\\.\\.ap.highway.ne.jp
*=数字 \=アルファベット(大文字小文字混在)
#####
これ以外にも出来るだけ柔軟に対応させたいのです。
スクリプトの行数が多くなるのは覚悟の上です。
0499nobodyさん
04/07/17 14:48ID:TroGWL8bありがとうございます!
本当に助かりました。^^
0500nobodyさん
04/07/17 15:11ID:TroGWL8b配列にする場合、split関数の引数はどのように書けばよいでしょうか?
$b = " 02600 0 1111"
現在、$a=split(" *",$b);でやっておりますが、うまく出来ません。
よろしくお願い致します。
0501nobodyさん
04/07/17 15:15ID:TroGWL8b訂正です。
$a=split(" +",$b);でやっておりますが、うまく出来ません。
補足です。
上記の例の場合、配列$aに以下のように入れたいと思っています。
$a[0]=02600
$a[1]=0
$a[0]=1111
よろしくお願い致します。
0502nobodyさん
04/07/17 15:16ID:TroGWL8bすいません。また訂正です。
$a[0]=1111
↓↓↓↓↓
$a[2]=1111
0503nobodyさん
04/07/17 15:30ID:TroGWL8b出来ました。
スペースの全角と半角の区別をしてなかったのが原因でした。
失礼しました。
0504nobodyさん
04/07/18 10:56ID:???これでダブルクオートに囲まれた文字列に一致すると思うんですが、
ダブルクオートの中にエスケープされたダブルクオートがあると、そこまでで一致終了してしまいます。
当然ですが。
エスケープされた物を無視させるにはどうすればいいですか
0505nobodyさん
04/07/18 11:12ID:???0506nobodyさん
04/07/18 11:45ID:???"foo\"bar" と \ でエスケープするなら
/(?<!\\)"((?:\\"|[^"])*)"/ で $1 に foo\"bar が入る。
…少なくとも Perl 5.005 以降なら。
0508nobodyさん
04/07/18 21:19ID:???でもこれだと
"test\""
これに対応しない・・・
test
になっちゃった・・・・・
0509nobodyさん
04/07/18 22:03ID:???0510nobodyさん
04/07/18 22:14ID:???使用言語とテストコードを書いてくれんと何が悪いか分からんよ。
#!/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__
0511nobodyさん
04/07/18 22:32ID:???とりあえず、HTMlタグ内とタグ外、コメントとそれ以外に分けて配列化してるんです
言うならば・・・普通のテキストを
#CDATA, tag, tag, tag, comment, #CDATA, comment, tag, comment, tag.......
みたいな感じで。分かりづらかったらすみません
0512nobodyさん
04/07/18 22:33ID:K8gWFvF7undef @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);
}
0513nobodyさん
04/07/18 22:33ID:???読みづらくてすみません
0514nobodyさん
04/07/18 23:15ID:???眠いので落ちます・・・・
0515nobodyさん
04/07/18 23:25ID:???サンプル
ttp://koumuinsiken.hp.infoseek.co.jp/
初心者ながら頑張ったのは…
<!-- isweb auto-insert \*/ -->\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n
すんません_no
0516nobodyさん
04/07/18 23:39ID:???/<!-- isweb auto-insert \*\/ -->.*?<!-- inserted by isweb server\/\* -->/s
こんなんじゃないのか?
0517nobodyさん
04/07/18 23:52ID:???文法はこれに準拠してるみたいですが、上手くいきません…。
0518nobodyさん
04/07/18 23:55ID:???HTML の属性値では " を \ でエスケープしたりせんが。
http://search.cpan.org/dist/HTML-Parser/
http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
これ以上はスレ違いになりそうだから余所でやってくれ。
0520nobodyさん
04/07/19 00:02ID:???http://pc5.2ch.net/test/read.cgi/tech/1062152374/478-480n
が関係あるに 300 ペリカ。
0521nobodyさん
04/07/19 00:17ID:???Emeditorとかでマッチのテストしてみたんですが、
/<!-- isweb auto-insert \*\/ -->.*?<!-- inserted by isweb server\/\* -->/s
ではうんともすんとも言いませんでした。
なんか基本的な知識が欠けているような気がします。すんません。_no
0523nobodyさん
04/07/19 00:47ID:???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+-->
0524nobodyさん
04/07/19 07:43ID:???Emeditorに複数行にマッチする設定が無いのですが…
Pro版のは"."が改行にもマッチするように設定できるみたいですがこれですかね。_no
あといろいろ試してみたのですが、スペースは\sでも でもマッチするみたいです。
<!-- isweb auto-insert \*/ -->
>>523さんのもうんともすんとも言いませんでした。
おそらく複数行にマッチするようにチェック入れないといけないんでしょうけど。
マターリがんがります…。
0525nobodyさん
04/07/19 10:24ID:???>>523
コメントタグ中の/のエスケープが抜けている
0526nobodyさん
04/07/19 11:59ID:???EmEditor v4 Standard をインストールして確認したところ、\s が
改行にマッチしないし \n を含むパターンを量指定できないな。
一般的な正規表現エンジンと挙動が違うから、ここで質問しても
君の望む答は得られんだろう。この糞ソフトを使い続ける気なら
後は >>523 の専用スレに行ってくれ。
真っ当な正規表現エンジンを積んでいるソフトなら >>516 で OK 。
>>525
検索ダイアログに突っ込むのに / は関係無し。
0527nobodyさん
04/07/19 12:29ID:???宣伝してるのはお前か?
http://pc5.2ch.net/test/read.cgi/hp/1089046899/39
http://pc5.2ch.net/test/read.cgi/hp/1065089862/324
0528nobodyさん
04/07/19 12:43ID:???・PeggyPad
うんともすんとも
・PHPエディタ
普通の文字、または左括弧"("が必要です.
と出ました。しょぼーん。
秀まるお使ったほうがいいですかね?
>>527
http://www.google.co.jp/search?num=50&lr=lang_ja&ie=Shift_JIS&oe=Shift_JIS&q=infoseek
で一番上に来るサイトを選んだだけです。とりあえず否定しときますです。
0529nobodyさん
04/07/19 13:26ID:???ローカルのperlを利用するマクロならできたけど。
で、マッチしたとして何をしようってのよ?
保存したソースから削除とかなら複数行置換えできるフリーソフトのほうが簡単だぞ。
0530nobodyさん
04/07/19 21:20ID:???あっちのスレにも誤解されそうな人がいますが…
0531nobodyさん
04/07/19 23:57ID:???秀丸がダメなのはヘルプに説明があるよ。
(「検索系コマンド」の「\nを使った複数行検索の際の制限について」)
>>530
エディタのマクロかなんかでプロキシ作るのかい?
0532nobodyさん
04/07/22 12:26ID:???0533nobodyさん
04/07/22 14:35ID:???広告を非表示にしたいわけか
0534nobodyさん
04/07/24 14:34ID:wErUOaoh$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>
0535nobodyさん
04/07/24 14:51ID:???$strからgoogleの結果<br>と<br>を取り除いてから
<a href=$str>ttp://www.google.co.jp/search?hl=ja&ie=...</a> でいいだろ。
0536nobodyさん
04/07/24 15:12ID:wErUOaoh$str はいわゆる掲示板の書き込みのコメント部分です。
で、それを自動リンクしたいんですが、コメント中に長いURLを張るとテーブルが壊れます。
実際のリンクは超略しないで、表示部分だけ短く省略したいんです。
0537nobodyさん
04/07/24 16:35ID:???0538nobodyさん
04/07/24 17:11ID:wErUOaohヘボイらしいのですが、ここを参考にして何とかなりました。
お騒がせしました。
0539nobodyさん
04/07/24 23:27ID:b6ZQFx0g<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 です
0540nobodyさん
04/07/25 01:22ID:???0541nobodyさん
04/07/25 04:31ID:???0542nobodyさん
04/07/25 06:16ID:???http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
0543nobodyさん
04/07/26 14:57ID:nr00S6gf#の前の文字列を取得したい場合はどのような正規表現にすれば良いのでしょうか○| ̄|_
0546nobodyさん
04/07/28 01:04ID:???------------------------
<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部分は可変です。
0548nobodyさん
04/07/28 01:37ID:???546です。すみません、本当に助かりました。
ありがとうございます。
(とほほさんのHP見ながらやっていたんですが、それ以外にも対応していたり
するんですね。今後は気をつけます。)
0549nobodyさん
04/07/28 01:37ID:???0550nobodyさん
04/07/28 02:00ID:???0552nobodyさん
04/07/29 00:49ID:???546ではないけど質問です。
/<abc>([^&]+?)<\/abc>/
だと<abc>123</abc>にはマッチするけど、<abc><123></abc>マッチしませんでした。
こういう文字コードを使われてるものもマッチさせる方法はあるんですか?
0553nobodyさん
04/07/29 09:01ID:???0554552
04/07/29 10:14ID:???<abc>&lt;123&gt;</abc>
↑は/<abc>([^&]+?)<\/abc>/でマッチしないのですが、
マッチさせる方法はあるのですか?
0556nobodyさん
04/08/01 14:12ID:???$aには、変動する数字が代入されているとします。
【$aが、2000で割り切れる値であるとき、真を返す】
もしくは、
【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】
としたい場合には、どのようなソースになりますか?
ご教授お願いいたします。
0557nobodyさん
04/08/01 15:25ID:???$a%2000
じゃダメなのか?
0558nobodyさん
04/08/01 15:30ID:???? 'つるー'
: 'ふおるす';
でもやっぱり $a % 2000 だよなぁ。。。@こっちの方が遅かったりして。
0560nobodyさん
04/08/01 16:44ID:???特に速度が肝にならないのであれば、
「意味」がわかりやすいコードを採用するべきだと思う。
なのでふつーは $a % 2000 とするんじゃないかな。
0562nobodyさん
04/08/03 16:53ID:???log.apディレクトリ以外にアクセスした場合にのみ、転送させたいのですが
正規表現がよくわからずお手上げ状態です。
どなたかヒントだけでもいいので教えていただけないでしょうか
0563nobodyさん
04/08/03 16:58ID:9nB7Zn3+0565nobodyさん
04/08/03 17:08ID:9nB7Zn3+こうか?
0567nobodyさん
04/08/05 19:56ID:???Perlで&を&amp;
に変えた後
if($message =~ /http:\/\/([a−zA−Z0−9¥.¥/¥−+#_?〜&¥%=^¥@:¥;]+)/i){
$1 =〜 s/amp¥;//g;
}
で&amp;から&に直しました。。
しかし$1の行でエラーが出ます。
さて、どうしてですか?
0570nobodyさん
04/08/05 23:09ID:???と、釣られてみる
0571nobodyさん
04/08/06 00:32ID:???もし不快感を催したのであれば、心からお詫び申し上げます。
しかし、私がこれを記していない事は確かです。
語調、時間差での間違いからそれは明らかです。
それを理解の上でのご返答・ご指摘宜しく御願致します。
0572nobodyさん
04/08/06 12:07ID:4bPJPC+C0574nobodyさん
04/08/06 17:13ID:???0575nobodyさん
04/08/06 22:55ID:???0577nobodyさん
04/08/07 03:48ID:???確か global の略だったと思う。
パターンにマッチしたのは全部片付けちまいな、の意。
# >>576がなんで >>121 を指してるのかが気になる。
0578nobodyさん
04/08/09 18:35ID:???$value = qq|<a href="hogehoge.html">test</a>|;
$value =~ s/<.*?>//g;
print $value;
でHTMLタグを削除できるけど、これの仕組みがわからない。
*→0回以上一致する
?→0回または1回一致する
.→???????
エロイ人解説おながいします
0579578
04/08/09 18:44ID:???見てた解説サイトにだけちょうどなかったorz
でも*?とする意味はまだわからないでつ;
0580nobodyさん
04/08/09 18:45ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html
0581578
04/08/09 19:05ID:???>>580
どうして?を付けるとそうなるのかが・・・・
例えば
$test = "<aiu>test</aiu>";
$test =~ s/<.*?>//g;
としたときに.*だけですべてをひとつの文字列として捉えそうなのに(現に?がないとそうなりますが)
?を付けるだけで・・・うまくいえないorz
?がコンパイルされる瞬間はいつなんですか?
<.*の時点で可能な限りマッチしますよね・・・っていうかその時は>これはあってもなくても<.*だけで
最後まで一致するから、じゃあ>はいつコンパイルされるんだ???
もしも
s/<<.*>>//g;
としたら先に<<>>を優先してあまった文字に対して.*をやるのかな?駄目だ・・これじゃ
漏れの疑問をエロイ人に理解してもらうことすらできないorz
0582nobodyさん
04/08/09 20:25ID:???*? で一塊の量指定子。量指定子としての * と量指定子としての ? を
並べて書いてるわけじゃない。
$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 と > )
0583nobodyさん
04/08/09 21:34ID:???どのようにしたらいいんでしょうか?
例)
aaabbb ERROR aaabbbccc ABC dddeee
aaabbbcc ABC cdddeee
ERROR aaabbbcccddd ABC eee
というようなテキストがあるとして
errorを含まずABCを含む行だけ(この例では2行目)を
マッチさせたいんですが。
0584nobodyさん
04/08/09 21:44ID:???http://www.din.or.jp/~ohzaki/regex.htm
^(?=.*ABC)(?:(?!ERROR).)*$
0585nobodyさん
04/08/09 21:46ID:???@match_lines = grep((!/error/i and /\bABC\b/), split /\n/, $Strings);
0586nobodyさん
04/08/09 22:00ID:???しかし、教えてくださったやり方だと、自分の使っている
エディタ(Peggy)ではできないです。
これはPerlで使える方法なのでしょうか?
(Perl知りませんが。。。もしかしたらjavaの
OROとかでも使えるのだろうか?)
ちなみに秀丸エディタでは前方一致とか後方一致で
マッチさせることができるみたいですね。
そこまでいかない普通の?正規表現しか使えない環境でこれは
実現できないものでしょうか??
0587nobodyさん
04/08/09 22:05ID:???0588nobodyさん
04/08/09 22:22ID:???ちょっと見てみます。
でもすでにPeggyをシェアウェアとして長く使っており、
見やすい配色になれてしまったので、
今から乗り換えるつもりはないですが。。。
必要なときだけ使う形でいくしかないかな。
あ、でもこれ使用期限とかあるのかな。
0591
04/08/10 13:43ID:2tv/OiLj便乗させてください。
if ($FORM{'name'} !~ /^(\x82[\x9f-\xf1]|\x83[\x40-\x96]|[\x88-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/){ &error; }
↑
ここから漢字とひらがなも省いて「全角カタカナのみを許可」という形にするにはどうればよいでしょうか。
0592nobodyさん
04/08/10 20:24ID:???http://www.din.or.jp/~ohzaki/perl.htm#Character
0594nobodyさん
04/08/12 12:26ID:wFKNBEiY080-1234-5678
とか
03-1234-4321
とか
080-1234-5678
とか
08012345678
とか
0312344321
0595nobodyさん
04/08/12 13:04ID:???0597nobodyさん
04/08/12 14:23ID:???0599nobodyさん
04/08/12 20:02ID:???それじゃ
01-23-45
にも
0123-4567-8910
にもマッチしちゃうよ
ハイフンがない場合にはマッチしないし
0601nobodyさん
04/08/12 20:31ID:???>>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
0602nobodyさん
04/08/12 23:02ID:???0△△ -××× -□□□□
0△△△ -×× -□□□□
0△△△△ -× -□□□□
0△△△△△-□□□□
0から始まる9or10or11桁
ex>09012345678 (携帯は11桁?)
家電は9桁(例外)と10桁?
全角も含めると(?:\x82[\x4F-\x58])を入れてやる?
ムズイな
0606nobodyさん
04/08/12 23:30ID:???全角を半角に直すという処理をなぜ思いつかない
0607nobodyさん
04/08/13 01:10ID:???マッチした文字列をそのまま取り出す、
ということなら全角を半角に直しちゃまずいと思われ。
0610nobodyさん
04/08/13 09:57ID:???大丈夫かコイツ・・・
0611594
04/08/13 10:22ID:???0612nobodyさん
04/08/13 11:18ID:???0613nobodyさん
04/08/13 12:28ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H
半角数字だけになれば何とでもなんだろ。
0614nobodyさん
04/08/13 23:16ID:???0615nobodyさん
04/08/13 23:29ID:???この人内部エンコーディング分かってるのかな?
0616nobodyさん
04/08/14 00:05ID:???0618nobodyさん
04/08/14 02:10ID:???0621nobodyさん
04/08/14 11:16ID:???0622nobodyさん
04/08/14 11:25ID:4Tdhf0SR0624nobodyさん
04/08/14 11:42ID:???全角含めるならまず置換して
最初はゼロ、1から5桁の数字、ハイフン一かゼロ、1から4桁の数字、ハイフン一かゼロと四桁の数字が1かゼロ
でそのまま答えでてるんじゃないの?
0625nobodyさん
04/08/16 01:23ID:???もう終ってるからどうでもいいが、言葉でごちゃごちゃ言うより実際のコーディング例を書いたほうが
100倍わかりやすい。まあ今回は質問者がクソだから、コーディング例など書かないでほしいが。
0626nobodyさん
04/08/16 06:38ID:???0628nobodyさん
04/08/16 10:56ID:???という文字列があって1つ目の@を(1)、2つ目の@を(2)という風に
置換したいのですが、どのように記述すれば良いのか教えてもらえますと助かります。
0629628
04/08/16 11:10ID:???解決しました。お騒がせしてすみません。
0630nobodyさん
04/08/16 15:12ID:???まじかよ!?
正規表現でも実現しようぜ。
for (0..100){
unless ( $value =~ s/@/$_/ ) { last }
}
perlならこれで動くか?なんか怖いからテストしたくないなw
0631nobodyさん
04/08/16 15:16ID:???<ルール>
1.言語特有のモジュールを使わずに実現しる。
2.処理前に配列の中に全角数字、半角数字を準備するのは禁止
おまいらこんなはちゃめちゃなルールでできるか?上司が意味不明なこと言ってきたんだよorz
0632nobodyさん
04/08/16 15:34ID:???perl ならこんな感じか。
$i = 0;
$s =~ s/@/"(" . ++$i . ")"/eg;
print $s;
0633nobodyさん
04/08/16 15:55ID:???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
を参考にするといい。
0636633
04/08/16 19:56ID:???直前までPerlのスレ見てたんで思わずPerlで書いてもた・・・
0637nobodyさん
04/08/16 21:39ID:???10個書き並べればOKじゃないかという気もする
0638nobodyさん
04/08/16 21:48ID:???>>633
0xA3B0〜0xA3B9までが0〜9なんだよ。
第1バイトが0xA3なのを確認して第2バイトから0xB0を引けばよろし。
もしくは2バイトずつのまとまりから0xA3B0を引けばよろし。
0639nobodyさん
04/08/16 21:53ID:???0640nobodyさん
04/08/20 09:23ID:???XSS対策のHTMLエスケープを1行で済ませ。もちろん消すのじゃなくて、特殊文字に置換するんだぞ。
0641nobodyさん
04/08/20 10:03ID:???(式)
無駄な部分や、非効率な部分がありましたら添削いただけるとありがたいです」って書けばいいのにね。。。)
0643nobodyさん
04/08/20 17:34ID:???「XSS対策のHTMLエスケープを1行で書くやり方を教えてください」
って言えばいいのにね・・・)
0645nobodyさん
04/08/20 19:58ID:???0646nobodyさん
04/08/20 20:13ID:???0647nobodyさん
04/08/21 19:21ID:zyqI2KUi置換ツールで正規表現を使いたいんですけど、
<h2>8/21</h2>
を
<h2 id="A21">8/21</h2>
という風に、「日付に当たる部分」を「idとして挿入する」という正規表現の書き方をお教え願えませんでしょうか?
#正規表現=perlだと思って、ここにきたんですが、間違っていたら誘導お願いします。
0649nobodyさん
04/08/21 20:05ID:???御手数おかけしてすみません。
なんだか動作しませんでした。
ソースを確認したところ、
<h2>8/21</h2>
ではなくて、
<h2>8/21 タイトル</h2>
になっていたので、うまくいかなかったのかもしれません。
>>1から巡っていろいろ勉強してみます。
有難う御座いました。本当に感謝しています。
0655nobodyさん
04/08/23 19:59ID:???0656ピエール
04/08/23 22:11ID:aJIVYOH00657nobodyさん
04/08/24 03:13ID:???>アフォでもなんでもいいですよ。
なんでもよくない。間違いなくお前はアフォだ。リアルに言うと知恵遅れ。
自分がアフォだとも気づかずに必死に勉強とかやってるのってなんか空しいな。
まずは自分がアフォだと認識して、具体的にどの能力が劣るのかを知りなさい。
これからは質問前に自分の疑問と、どうしたいかっていうことをきちんとまとめてから
ここにきて書きはじめなさい。急がば回れってね。質問前に遠回りしてもしっかりまとめれば
誰かがちゃんと答えてくれるよ。
0659nobodyさん
04/08/24 18:23ID:5aeoylmiその際に受信ボックスから、携帯メール(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または空文字列にマッチします。
()で囲んだ正規表現は解釈の優先順位が高くなります。
0660nobodyさん
04/08/24 19:08ID:???漏れがメル友に(ry
0661nobodyさん
04/08/24 19:25ID:???Becky!のフィルタの仕様がわかんないけど、
^From:.*kanojo.kawaiiyo.kanojo → まず大事なメルを保護
^From:.*(どこも|あう|ぼだほん)\.ne\.jp → 残りのうち携帯メルを振り分け
(中略)
どれにも当てはまらないもの → ベタな inbox に落ちる
こんな仕組みじゃないのかな。
むしろ、こちらでどうぞ。
メールソフト Becky! Part9
http://pc5.2ch.net/test/read.cgi/software/1090377005/
0663nobodyさん
04/09/03 00:28ID:V2uWGL3lこれでテーブルタグの中にあるカンマだけ</td><td>に置き換えたいのです。
どんなもんでしょう。
0664nobodyさん
04/09/03 02:17ID:???Perl なら
s{(?<=<table>)(.+?)(?=</table>)}
{ (my $str = $1) =~ s|,|</td><td>|g; $str }eg;
0666663
04/09/03 08:46ID:???とりあえず解析後回しで突っ込んでみたら完璧でした。
もしかして<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;
0667nobodyさん
04/09/03 16:41ID:XAO5vI6Oファイルネームがfoo.cgiに関するリンクをすべて洗い出したいとき、
どのように書けばよいのでしょうか?
/<A 〜〜foo.cgi.*?>/ig
という感じになると思うのですが〜〜の部分がよくわかりません。
ちなみに、href=をつけていないのは、改行がはいっていたり、classなどよけいなタグが入っていることがあるためです。
0668667
04/09/03 16:56ID:???/<A .*HREF=.*foo.cgi.*?>/ig
でよろしいようですね。
検索結果がタグになっていたんで、Web表示だとうまく見えていませんでした。
0669nobodyさん
04/09/03 17:52ID:???よろしいかどうかは君が相手にしているデータ次第なわけで。
$_ = <<'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";
まぁ解決したようなのでこれ以上は突っ込まんでおく。
0670nobodyさん
04/09/05 17:08ID:VHVjccb7どのような方法ありますか?
aaaaaa aaaaa aaaaaaaaaaaaa aaaa aaaaa
|← ここです →|
0671nobodyさん
04/09/05 18:32ID:???空白を正規表現で何て書くか分かったら解決な。
0672nobodyさん
04/09/05 19:42ID:???スペースでexplodeしたほうがいいんじゃないの?
0675nobodyさん
04/09/07 09:23ID:Z5/Re9xzや
<a href="../test/read.php/bbs/0987654321/155" target="_blank">>>155</a>
xxxxxxxxxx.datから上記のようなアンカーリンクを>>10のようにしたい。
どなたかお願いします。
0676nobodyさん
04/09/07 09:24ID:Z5/Re9xzや
?a href="../test/read.php/bbs/0987654321/155" target="_blank">&gt;&gt;155</a>
xxxxxxxxxx.datから上記のようなアンカーリンクを>&gt;0のようにしたい。
どなたかお願いします。
0679nobodyさん
04/09/07 16:33ID:???スレ内アンカーのAタグを削除すればかなり効果があると睨んでいる。
専用ブラウザのためAタグが無くともポップアップするので困らないと思ったのだろう。
そしてアンカーを削除することに成功し、ポップアップしないことを確認し
今度は「それを元に戻す正規表現を教えて下さい」と質問しに来るのだ。
0680nobodyさん
04/09/07 17:22ID:???0682nobodyさん
04/09/07 17:49ID:???いいのか?
2chブラウザはアンカー自動でして無いと思うけど
dat直読みだろ。それでいいのか?
それなら簡単に消せるだろうが、なんに使うのか
0683nobodyさん
04/09/09 09:11ID:???「2ch」をアドレスに含まない「http」で始まるリンクにマッチさせることはできますか?
オートリンクで挿入されたリンクを対象にしています。
<a [^>]+(!?2ch)[^>]+>http
こんな感じかなあとやってみたのですが、出来ませんでした。
0684↑
04/09/09 09:13ID:???マッチする場所は問いません。
0686683
04/09/09 21:31ID:???$regexp = <STDIN>;
if($log =~ /$regexp/){
perlで上記のような感じになってるんで半分諦めていますが、
できるものなら高度な正規表現を使ってみたいと思った次第なのです。
Perl5.8.2で使える正規表現で何かいい表現はありますか?
0688683
04/09/10 10:46ID:???希望どおりにマッチしました。
[^>]を中に入れてしまえばよかったんですね。
あと ?! と !? 間違ってましたね。。。
ありがとうございました。
0689nobodyさん
04/09/13 00:58:55ID:???URLにマッチさせる際、正確に(https://とかにも)マッチするようにしたいのですが、
どうすれば一番簡潔に決められますか?
あと、メアドと電話番号のそれぞれをmailto:とteltoに置き換えたいのですが、どうすればよいか思い浮かびません。
英数@英数とかにすると電話番号@〇〇.ne.jpとかが判別できないので…
よろしくお願いしますm(_ _)m
0690nobodyさん
04/09/13 02:41:38ID:???URL: http://www.din.or.jp/~ohzaki/perl.htm#httpURL
メールアドレス: http://www.din.or.jp/~ohzaki/perl.htm#Mail
電話番号: >>594-602
0691???にマッチさせるには?
04/09/14 23:26:21ID:Kd7HVFLL$id =~ /ID:???/
とすると、エラーになりました。↓
Nested quantifiers in regex; marked by <-- HERE in m/ID:??? <-- HERE /
WindowsXPでActivePerlを使用しています。
0694691
04/09/14 23:56:41ID:Kd7HVFLLできました。ありがとうございました。
0695nobodyさん
04/09/19 15:59:53ID:???等幅のゴシックかなあ・・・。
0696nobodyさん
04/09/19 23:14:45ID:???http://pc5.2ch.net/test/read.cgi/tech/1032261438/
http://pc5.2ch.net/test/read.cgi/prog/1090997542/
0698nobodyさん
04/09/22 17:13:59ID:JesDYCu3あと、090xxxxxxxx@example.comみたいなメアドを電話番号と区別するにはどうすればよいでしょうか?
(電話番号はtel:メアドはmailto:にしたいのです)
よろしくお願いしますm(_ _)m
0699nobodyさん
04/09/22 17:46:51ID:???$'
> あと、090xxxxxxxx@example.comみたいなメアドを
> 電話番号と区別するにはどうすればよいでしょうか?
$`
0700nobodyさん
04/09/23 02:56:01ID:???0702nobodyさん
04/09/26 07:43:52ID:FGVvy0I6みたいなファイルネームの文字列から数字の部分だけを取り出して変数に代入したいんですが、どのようにすればいいんでしょうか?
0704nobodyさん
04/09/26 07:57:37ID:FGVvy0I60706nobodyさん
04/09/26 08:01:04ID:???> このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
> 質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
>>701も見てみろ
0707nobodyさん
04/09/26 08:04:00ID:???0708nobodyさん
04/09/26 08:04:27ID:FGVvy0I6>質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
て書いてありますね。
使用言語はperlです。
0709nobodyさん
04/09/26 08:15:50ID:???> このスレって丸投げもOKになった?
> 701 名前:nobodyさん 投稿日:2004/09/23(木) 04:38 ID:???
> >>700
> 最初から OK だよ。
> 但し、丸投げとバレた時点でアウト、というルール。
ちょっとは自分で努力しなさい。
やった結果がうまく出来なかった場合、漏れたちがアドバイスをしよう。
0710nobodyさん
04/09/26 08:26:31ID:FGVvy0I6ファイル名を一文字ずつ分解して配列変数に入れて、一つずつ0-9に該当するか見ていって、該当したらスカラー変数に入れてくっつけていく。
いかにも効率がわるいですが、どうすればいいですか?
0711nobodyさん
04/09/26 08:28:13ID:???0712nobodyさん
04/09/26 08:31:49ID:???0713nobodyさん
04/09/26 08:33:31ID:FGVvy0I6ということで書き込みしてるわけですが。
0714nobodyさん
04/09/26 08:36:37ID:???ってループしてる…
0716nobodyさん
04/09/26 08:51:07ID:???0717nobodyさん
04/09/26 08:51:53ID:FGVvy0I6さっきから、誰に向かって、書いてるつもりなの?
こんな質問スレで、自分にだけわかる言葉でレスつけても仕方ないと思うんだけど、
まさしく>>715はバカの壁ってやつですね。
0718nobodyさん
04/09/26 08:54:57ID:???さーて釣り宣言まだかな
0719nobodyさん
04/09/26 08:57:36ID:FGVvy0I6残念。
0720nobodyさん
04/09/26 08:58:39ID:???0722あぼーん
NGNG0723nobodyさん
04/09/28 15:15:15ID:???キーワード処理に便利なんですが。
0726nobodyさん
04/09/29 02:49:00ID:???0727nobodyさん
04/10/01 01:34:03ID:???アルファベット等がどこかに含まれたらマッチしない表現を考えています。
言語はPerlです。
1
10
-10
0.101
100.1
-1000.01
桁数固定なら深く考えることもないのですが、上みたいなマイナスが入ったり小数点が動いたりする可能性を考えたらわからなくなってしまいました。
0728nobodyさん
04/10/01 14:00:54ID:???^-?[0-9]+(\.?[0-9]+|[0-9]*)$
0729nobodyさん
04/10/01 14:05:48ID:???しかし汚ねーなあ。たぶんググればまともなの出てくるよ。
0730nobodyさん
04/10/01 14:12:08ID:???数字の読み方としてはそれもありだが、正規表現的にはコレで十分
/-?[0-9]+(\.?[0-9]+)?/
8進数マッチするけどいいんだよね
0731nobodyさん
04/10/01 14:13:33ID:???/-?[0-9]+(\.[0-9]+)?/
0732nobodyさん
04/10/01 14:19:08ID:FcpwUMKG0733nobodyさん
04/10/01 14:56:15ID:???.5 とかもあるだろ?
0734nobodyさん
04/10/01 15:02:38ID:???0736nobodyさん
04/10/01 15:08:12ID:???>>727が判断することだけど。
# Perlスレでは確か「n進数や指数はどうよ?」でブームが終わったような。
0737733
04/10/01 15:10:26ID:???/^-?\d*(?:\.?\d+)?$/
0738nobodyさん
04/10/01 15:11:04ID:???http://2chart.fc2web.com/2chart/igawa.html
0740733
04/10/01 15:12:51ID:???0741nobodyさん
04/10/01 15:14:01ID:???0742nobodyさん
04/10/01 17:19:34ID:???0743727
04/10/01 21:36:43ID:???いくつもありがとうございます。
>>733
.5のような表記は無しです。
試してみたところ>>729 >>742が目的にあった動作をするようなので使ってみます。
みんな良く調べて何が違うのが勉強してみます。
正規表現、便利だけど難しいですね
0744nobodyさん
04/10/02 16:22:06ID:???'\1<a href="keyword.php?q=\2">\2</a>\3', ' ' . $mes);
こうやって、URLの可能性がないアルファベットの連続をキーワードとしてリンクさせたいのですが、
これだとスペース置きにキーワードが並んだ場合、どちらかしか replace されません。
MSN Messenger など MSN と Messenger 両方にマッチさせたいのですが、
何か良い方法はありませんでしょうか。
0745nobodyさん
04/10/03 02:24:24ID:???'<a href="keyword.php?q=\1">\1</a>', ' ' . $mes)
とりあえず、これでいいと思う。
自分はURLを「http:」で始まる単語としたくて、
(?<!http:)([^\s]{2,})
でやってみたけど、
[^\s]が全部取っちゃうようでうまくいかなかったorz
0746nobodyさん
04/10/03 02:25:54ID:???×((?=[^[:graph:]])|$)) ○((?=[^[:graph:]])|$)
0747744
04/10/03 04:57:52ID:???回答ありがとうございます。
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:]を使うと漢字にマッチしたりして挙動が変になっていました。
うーん、まだまだ勉強が必要です。
0748nobodyさん
04/10/03 05:14:58ID:???0749nobodyさん
04/10/03 05:29:07ID:???例によって>>1の正規表現メモんとこ参照すると分かりやすい。
0750nobodyさん
04/10/03 22:20:30ID:???あるシステムの独自タグをあつかっています。
<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のサンプルをあさってますが、もし、何か良いモノ知っていましたら教えてください。
0751750
04/10/03 22:21:42ID:au5XkXk90752nobodyさん
04/10/04 01:59:41ID:???その独自タグの仕様をはっきりさせなければ誰もわからんよ。
「=」の隣にスペースが入っていたりダブルクォートでくくっていたり
いなかったりしてるし。
0753nobodyさん
04/10/04 02:00:16ID:???/(.+?)[\n\s]*=[\n\s]*("(\\"|[^"])+"|[^\s]+)(?:[\n\s]+|$)/; #$1=属性, $2=値
やっとできた・・・。
\"を含める方法とか、勉強になりました。
0754753
04/10/04 02:10:49ID:???そうだ、
>value = aaaa の場合
>value = "aaaa" の場合で異なる値にしたい(" がポイント)
これがどういう結果を望んでいるのか分からないままやってたw
とりあえず、ダブルクォートは残す仕様にしておいたけど。
0755750
04/10/04 07:43:16ID:3m/jnQ5F>>752にあるように、= の両隣は、スペースが入ったり、入らなかったりします。厳密にはJavaでいうところのホワイトスペースを許可してて、タブとか全角スペースなどもありです。ここは許可しないことを改善してもらうつもりです。
あとで結果報告しますね。ありがとう〜
0756nobodyさん
04/10/04 11:31:31ID:???みんなが使ってるフォーマット (XML ね) にしてもらうようにした方が良いと思う。
0757nobodyさん
04/10/04 15:15:50ID:???0758nobodyさん
04/10/11 11:12:51ID:ek9GJkPHEZwebの絵文字を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絵文字だけにマッチさせるようにするには、どうのように直したら良いでしょうか?
よろしくお願いします。
0759nobodyさん
04/10/12 01:28:24ID:???そこら辺は大丈夫?
0760759
04/10/12 01:34:03ID:???[顔文字]♪
のパターンが良くないのね。
今まで
♪[顔文字]
でやってたから気づかなかった。
言い訳だけど、具体的にどういうパターンがダメなのか書いてほしかったな。
0761759
04/10/12 03:17:53ID:???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はやったことないので、細かい間違いはご容赦・・・。
0762nobodyさん
04/10/12 14:09:22ID:oX6FVXHmperl のマッチングで文章中の全角数字を的確に取得したいのですが、
どうにもこうにも化けてしまいます。
$value = "もしかして762はバカ?";
if($value =~ /([0123456789]*)/){
$match = $1 ;
print "$match \n"; #←「・」となってちゃんと取得できてない
}
環境:
Perl5 (ActivePerl)
Win2k
文字コードはSJISで。
どうすればよいのでしょうか・・・
0763nobodyさん
04/10/12 14:22:00ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0764nobodyさん
04/10/12 14:39:46ID:???$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";
}
ありがとうございました。
0765759
04/10/12 14:52:38ID:???/((?:\x82[\x4F-\x58])+)/
0766nobodyさん
04/10/12 20:54:11ID:???0767758
04/10/12 22:55:44ID:c8Tbm8wXレスありがとうございます。
ちょっと質問がわかりにくくてすみません。
具体例を出すと、以下のような感じです。
$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固有の問題であるなら該当スレに移動します。
0768758
04/10/12 23:07:38ID:???>>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); に変えたら
'今日はカレーだ♪るんるん♪マ'(変化無し)という状況です・・・。
0769nobodyさん
04/10/13 19:34:15ID:???$text = '$a = "foo"bar"; $b = "hoge"huga"hage";';
これを'$a = "foo\"bar"; $b = "hoge\"huga\"hage";'にしたいです。
0770nobodyさん
04/10/13 19:50:38ID:???無理。というか無茶。
「ダブルコーテーションの内側」の文字列や $text 全体に、
何か一定の制限や特性があるならなんとかできなくもないかも知れないけど。
0771nobodyさん
04/10/13 20:05:36ID:???0772nobodyさん
04/10/13 20:10:59ID:???Perl なら
$text =~ s{\x20"(.*?)";}{ (my $str = $1) =~ s/"/\\"/g; qq|\x20"$str";| }eg;
0773nobodyさん
04/10/13 20:14:38ID:???$text =~ s{(?<=\x20")(.*?)(?=";)}{ (my $str = $1) =~ s/"/\\"/g; $str }eg;
0774nobodyさん
04/10/13 20:48:20ID:???サンクス。とりあえずそれでできましたが、
$text = '$a = "foo";bar";';
みたいなケースも考えるときついですね。
とりあえず、出直してきます。
0775nobodyさん
04/10/14 02:46:56ID:???1.sjis-winをutf8にする
2.utf8はsjisやeucのような途中マッチが起こらない
3.そのためにはソースもutf8で書いた方がよい
4.utf8でezweb文字列の正規表現を書く
うまくできたらソース晒してね
0777nobodyさん
04/10/14 07:09:58ID:???"\xF6\xCF" -> "\xEE\x93\xB6"
0778776
04/10/14 14:00:36ID:???調べてみたら、
- EZweb の絵文字は Shift_JIS のユーザ定義領域を使っていて、
- Shift_JIS のユーザ定義領域は Unicode との対応が定義されている
なので、ちゃんと相互変換もできるし問題ないということなのかな。
漏れが無知だったようだ。すまん。
0779nobodyさん
04/10/16 19:49:17ID:???0782nobodyさん
04/10/16 20:07:41ID:??????
0783782
04/10/16 20:14:15ID:???間違ってたらスマソ。
叩かないで(´・ω・`)
0785nobodyさん
04/10/16 20:18:33ID:???0786nobodyさん
04/10/16 20:25:55ID:???0788782
04/10/16 20:28:35ID:???こうかな?
0790782
04/10/16 20:32:35ID:???0794782
04/10/16 20:39:32ID:???0がひとつ多かったみたい
(・∀・)
0795nobodyさん
04/10/16 20:41:25ID:???0796782
04/10/16 20:42:46ID:???これで最後・・・修行してきまつ
0797nobodyさん
04/10/16 20:55:24ID:???0798nobodyさん
04/10/16 21:01:13ID:???0799nobodyさん
04/10/16 21:02:00ID:???素直に/[5-9][0-9][0-9]/でいいんちゃうの?
0800nobodyさん
04/10/16 21:03:45ID:???0801nobodyさん
04/10/16 21:04:15ID:???馬鹿がキタ━━━━━━(゚∀゚)━━━━━━ !!
お前な、上のやつよーく見ろ。
0802nobodyさん
04/10/16 21:05:12ID:???このスレ馬鹿しかいないってことでFA?
0805nobodyさん
04/10/16 23:28:12ID:???だから?
0806779
04/10/17 00:19:04ID:???0808nobodyさん
04/10/18 04:08:53ID:aBkVRsoLはどういう意味ですか?
0809nobodyさん
04/10/18 04:13:49ID:???0810nobodyさん
04/10/18 11:03:43ID:???って、MLとマルチポストするなよ。
0811nobodyさん
04/10/18 11:29:23ID:???0812nobodyさん
04/10/18 12:01:37ID:???'\' 俺が悪いのか?
-
v'\'v そうさ。
o
0813nobodyさん
04/10/18 12:42:55ID:???ていうか、記号をわざわざ全角で書いてるひとが多いけど、なんでなんでしょ?
'&' や '"' と同じような罠にはまるのを避けてるのかな?
0814nobodyさん
04/10/18 13:11:12ID:???SafariだとASCII or Unicode以外でポストするとき、迷惑にも
? -> \, ? -> 〜 に変換しやがるのです。
0815nobodyさん
04/10/18 13:13:22ID:???バックスラッシュ・チルダが全角バックスラッシュ・全角ウェーブダッシュにされるんです。
0816nobodyさん
04/10/18 13:43:13ID:???よくプログラミングネタや UNIX のトラブルシュートネタで、
コードやエラーメッセージをそのまま貼れ、って言うことがあるけど、
そういうのがあるとすると厄介ですなあ。
0817nobodyさん
04/10/22 17:38:02ID:xzmN9eHo言語はperlです。
-----------
sub aaa{
1
2
}
\n
sub bbb{
3
}
\n
\n
------------
この場合
-----------
aaa{
1
2
}
\n
と
bbb{
3
}
\n
\n
と
出力したいのですが。
よろしくお願いします。
0818nobodyさん
04/10/22 18:28:19ID:???つまらん
0819817
04/10/23 01:25:36ID:fB1MfhBi$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;
これでどう?
0821nobodyさん
04/10/23 13:52:56ID:fB1MfhBi$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
}
しか表示できません。
@result= $data=~ /\s+sub
を以下に変えないといけないようだ。
@result= $data=~ /(?:^|\s|=)sub
0823nobodyさん
04/10/29 01:30:56ID:???0825nobodyさん
04/10/29 02:35:07ID:???0826nobodyさん
04/10/29 03:55:33ID:???s/([^\^{}])\n/$1/g; # unixの改行
s/([^\^{}])\r\n/$1/g; # windowsの改行
s/([^\^{}])\r/$1/g; # Macの改行
0827nobodyさん
04/10/29 06:16:46ID:???0828826
04/10/29 12:08:28ID:???s/(^|[^{}])\n/$1/g;
だた。
0830nobodyさん
04/10/29 13:51:59ID:???829でできました。
0831nobodyさん
04/10/29 15:00:41ID:???また、829では先頭の改行を削除できない。
直前のパターンを指定する場合、普通は
(?<=PATTERN) や (?<!PATTERN) を使う。
この場合なら、s/(?<![{}])\n//g; とする。
>>829
次に回答するときはちょっとでも試行の跡を見せれ。
0833nobodyさん
04/10/29 16:20:34ID:???# 「直前が { もしくは } の改行のみ残る」なら、これは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.
0834nobodyさん
04/10/29 16:25:51ID:???$_ = <<EOH;
abc
123
EOH
の時、1行目のが「先頭の改行(^\n)」で、
abcの後ろと次の空行の改行が「続く改行(\n\n+)」。
これを>>828に通すと
abc
123
となり、>>831に通すと
abc123
となる。
{ と } の後ろ以外の改行は消すんだったよな?
恥の上塗りご苦労。
0835nobodyさん
04/10/29 16:32:05ID:???833-834を踏まえた上で、828が正解である根拠を述べよ。
831が正解。
頭良くなってから偉そうなこと言えよな。
0836nobodyさん
04/10/29 16:34:53ID:???ばか?変数に入れたものなんか誰も処理しないよ。
変数に書いてる間にエディタで取った方が速いよ。
普通のファイルでやって皆。
--------
foo
{
bar
}
baz
-----------
0838825
04/10/29 16:40:55ID:???0839nobodyさん
04/10/29 16:43:14ID:???いちいちヒアドキュメントなんか書いてる間に
(あるいはスクリプトに挿入してEOHなんてやってる
間に)エディタの置換でやったほうが速いよ。
>>831が間違いだと言ってないからな。
ただ、否定の?は遅いからな(プッ
0840nobodyさん
04/10/29 16:46:04ID:???0841nobodyさん
04/10/29 17:58:19ID:jREmvBrxどう書けばいいのでしょうか?
abc dfg hij a
を(先頭と最後に3つ空白がある)
abc dfg hij a
みたいにしたいのです。
教えてください。
0842nobodyさん
04/10/29 18:24:10ID:???str = " abc dfg hij a ".replace(/^\s+|\s+$/g, "");
分かりやすく、前後のスペースは全角にしたので注意。
.replaceを適用した文字列や変数自身は置換されないので、
結果を受け取る必要あり。
0843nobodyさん
04/11/02 02:39:16ID:???という文字列があって/*〜*/の部分をereg_replaceで空文字列に置き換えようとしたとき
ereg_replace("(/\*.*\*/)","","/*str1*/str2/*str3*/");
てやると、先頭の/*と末尾の*/がマッチして全部消えるんだけど
test2は残して、test1とtest3だけ消す方法ってある?
0844nobodyさん
04/11/02 04:38:17ID:???( ゚Д゚)
0845nobodyさん
04/11/02 06:03:36ID:???0846nobodyさん
04/11/02 12:08:40ID:???0847843
04/11/02 15:34:08ID:TAdMjWDI>ereg_replace("(/\*.*\*/)","","/*str1*/str2/*str3*/");
>てやると、先頭の/*と末尾の*/がマッチして全部消えるんだけど
>str2は残して、str1とstr3だけ消す方法ってある?
でした。
>>846サソ
(/\*([^*]|\*+[^/*])*\*+/)で、できました〜
ありがとうございました。
0848あぼーん
NGNG0849nobodyさん
04/11/04 12:11:00ID:???エラーが出てしまい困っています。
削除前には他の文字コードの場合には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;
どなたかご教授ください。
0850nobodyさん
04/11/04 12:23:58ID:???にしないと展開されないんじゃない?
0851nobodyさん
04/11/04 14:35:28ID:???0853nobodyさん
04/11/04 17:48:33ID:???クォートに関係なく「\\」と書かないとダメ。
0854nobodyさん
04/11/05 06:33:14ID:???文字クラスに正規表現は使えないのでは。
マッチングパターンを全部逆(EUCコード以外にマッチ)にすれば良いし、
面倒なら、マッチしたEUCコードを取り出すようにすれば良いと思う。
my $pattern = '([\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区
...
my $str2;
$str =~ s/$pattern/$str2 .= $1/geo;
print $str2;
0855849
04/11/05 10:36:41ID:???まだテストしてないので試してみます。
本当にありがとうございます。
0856nobodyさん
04/11/06 16:21:10ID:oGen/DNTトリップみたいなことです。
splitではできたんですが、replaceではできませんでした。
replaceでやる方法はありますでしょうか?
よろしくお願いします。
0859nobodyさん
04/11/14 12:57:00ID:???やっているうちに挙動が変なところがあるのに気づきました。
エラー部分のみを挙げます。
$a="北関";
$b="夢";
if($a =~ /$b/){
print 'OK!';
}else{
print 'NG!';
}
これをEUCで記述すると「OK!」と表示、つまり「北関」の中に「夢」がヒットしてしまいます。
Shift_JISでは「NG!」、ヒットしません。
EUCでも正しく動作するように出来ないでしょうか?
おそらく、「北」「関」のJISコード(それぞれ4B4C、3458)が「夢」のJISコード(4C34)にかぶることが原因だと思いますが、
これをうまく回避する方法を検索することが出来ませんでした。
ご教授いただければ幸いです。
0860nobodyさん
04/11/14 19:14:58ID:???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!');
0862nobodyさん
04/11/18 15:33:53ID:z5HMJmKGhoge=aaa&piyo=bbb
のような文字列の「aaa」だけを抜き出すには
"/hoge=(.+?)/"
↑ここになにを入れればいいのでしょうか?
0864862
04/11/18 18:40:51ID:???レスありがとうございます。
でも、それだと上の行のaaaが抜き出せないです。
ちなみに、最後に改行コードはついていません。
$a = 'hoge=aaa';
$b = 'hoge=aaa&piyo=bbb';
といった感じのデータです。
0867nobodyさん
04/11/19 20:49:42ID:???(制御文字はマッチしない)
半角英数のみなら良く見るのですが。
0869nobodyさん
04/11/19 21:03:56ID:???0870nobodyさん
04/11/19 21:04:54ID:???0871nobodyさん
04/11/19 21:05:09ID:???0872nobodyさん
04/11/20 08:08:33ID:2uxiNSVv正規表現でマッチさせる事とか出来ませんでしょうか?
↓こんな感じの部分を色分けしたいんですが。
print <<< PRINT_HTML
<div class="box">
<b>ぬるぽ</b>
</div>
PRINT_HTML;
0873nobodyさん
04/11/21 08:46:27ID:baqdUP4H0874nobodyさん
04/11/21 17:13:13ID:bKPK+kaXヒアドキュメントが醜いからPerlは結構嫌われているわけで
PHPは変数内でも改行できるという点から
PHPでヒアドキュメントは使わない方がいいと思うけど。
0876nobodyさん
04/11/21 23:14:38ID:???自分はサクラエディタとやらは使わないしPerlしかやらないが、
良ければこれを参考にしてくれ。
/<<<s*([a-zA-Z0-9_]+)\n.*?n\1;/
主な条件は、後方参照ができること(\1が使える)と、
複数行のマッチができること(.に\nを含ませる)。
できれば .*? を (.*?) として、$2で抜き出せれば理想的なんだが。
0877nobodyさん
04/11/22 00:27:02ID:???874ではないが874に同意だな
ヒアドキュメントははっきり言って見にくい
確かにPHPで使ってるとなぜ使うのか疑問になる
これは人それぞれの慣れと書き方だと思うけどね
0878nobodyさん
04/11/22 00:32:29ID:???0879nobodyさん
04/11/22 04:03:50ID:???$str =~ s/ //g;
ってやっても文字化けするケースと
そのまま正常なケースがあるんだがなんでだろ?
Perlメモを見て
$Zspace = '(?:\xA1\xA1)';
$str =~ s/$Zspace//g;
でやっても無理だった
0880nobodyさん
04/11/22 05:48:42ID:???たまたま、前の文字の最後が \xA1 で後の文字の最初が \xA1 に
マッチするようなケースにあたるとまずくなるよね。
0882872
04/11/22 06:45:50ID:C8SlIvxcそ、そうなんですか!?
自分的には、変数を直接使用でき、「"」や「'」をエスケープする必要が無く、
HTMLソースをそのままコピペ出来るので、なかなか使いやすいと思っていたのですが…
ちなみにこんな感じで書いてるんですが、邪道なんでしょうか…
http://cyberbooth.fc2web.com/admin.html
>>876
ご教示をありがとうございます!
そのコードを参考に色々と自分で試してみます。
まだPHPは5日程前に始めたばかりでして、
どうもまだこの「正規表現」に苦戦していましたので、非常に助かりました。
0883nobodyさん
04/11/22 07:24:57ID:???変数直接書けるけど
{}で囲ったりしないと後ろの文字が変数名の続きと勘違いしてしまうケースあるし
何よりほとんどのテキストエディタで対応してない
使ったあとの自動インデントが狂うエディタ多数
ヒアドキュメントは確かに便利であるし機能としてあるから邪道ではないと思うが
ttp://www.kauda.jp/~suguru/comp/php/strings.html
とか書いてるけどPHPではいらんっぽい
ただPerl出身者はおそらくヒアドキュメント大好き人ばっかだと思う
組んでるときはいいけど作った後に見ると見にくいって感じかな
>>877の通り、最後は好き嫌いのレベルなんだけどね
0884nobodyさん
04/11/22 20:51:42ID:???Perl なら Template Kit, PHP なら Smarty ばっか使ってるぞ
スレ違いだな、すまん
0885nobodyさん
04/11/22 21:24:40ID:???ヒアドキュメントってほんとに必要かなあ、って思ってしまう。
0886nobodyさん
04/11/22 21:26:24ID:???0888nobodyさん
04/11/25 14:13:58ID:???仕事だと見た目なおすたびにソースいじるの嫌だからテンプレ
にしちゃうな...って、正規表現関係ないね。
0889872
04/11/25 16:30:50ID:???なるほど、ロジック部分と、ビュー部分を分離して管理する
「Smarty」なるツールがあるんですね。
これはかなり便利そうです。
お陰で一つ勉強になりました!
0890nobodyさん
04/11/25 18:50:17ID:???0891nobodyさん
04/11/26 11:53:40ID:???EUCでの空白問題で同じように私も壁にぶつかりました
解決法は特に載ってないみたいなんですが
どうしようもないんですか?
0892nobodyさん
04/11/26 12:31:17ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
0893nobodyさん
04/11/27 11:11:00ID:???↑のような文字列から最後の"script.cgi"を抜いた文字列(/aaa/bbb/ccc/)に
マッチする正規表現ってどうなるでしょうか?
0894893
04/11/27 11:25:14ID:???/の数(パスの深さ)は任意で、最後のスラッシュまでを取り出したい訳です。
0895nobodyさん
04/11/27 11:35:32ID:???$string2 = $1;
print $string;
0896nobodyさん
04/11/27 11:35:51ID:???0898nobodyさん
04/11/27 17:33:21ID:???0901nobodyさん
04/11/27 17:47:14ID:???0902nobodyさん
04/11/27 17:47:30ID:???例えば、>>895に対して
m!(.*/)! の方がスマートでいいじゃない?
とか。。。 勝負を挑んでいく感じ?
0903nobodyさん
04/11/27 17:53:19ID:???全然できましぇん全部やってください〜なら初心者スレにでも逝けって感じ
>>1よみゃディレクトリ取得くらい素人でも出来る
>>902がスマーティかどうかは置いとくにしても
0904nobodyさん
04/11/27 17:55:29ID:???0906nobodyさん
04/12/01 22:05:03ID:MrbpLm4t"あ,い,う " ,え,お という文字列のダブルクォーテーションでくくられた部分の半角カンマ(,)を全角カンマ(,)に変換するのはどうしたらいいでしょうか?
変換前:"あ,い,う " ,え,お
変換後:"あ,い,う " ,え,お
0907nobodyさん
04/12/01 22:13:31ID:MrbpLm4t上記からダブルクォーテーションの削除も同時に行いたいです。
変換前:" あ,い,う " ,え,お
変換後:あ,い,う,え,お
0909nobodyさん
04/12/01 22:22:39ID:MrbpLm4t正規表現文字列置換を使います。
ですので、Perl5でお願いします。
0910nobodyさん
04/12/02 03:16:36ID:???こりゃどうだ。
$dat="\"あ,い,う \" ,え,お";
while($dat=~ /"(.+?)"/){
$ushiro = $';
($mae = $1) =~ s/,/,/g;
$dat = $mae . $ushiro;
}
print $dat, "\n";
0911nobodyさん
04/12/02 10:04:13ID:???0913nobodyさん
04/12/02 12:22:09ID:c/xEYFBxという正規表現はどう書いたらいいのでしょうか?
$a =~ /^[0-9a-zA-Z]{5,}/
とするとaaaaaはもちろんマッチするのですが、abcdeもマッチしてしまいます。
aaaaaもbbbbbもcccccもマッチする、しかしabcdeはマッチしない、とやりたいのです。
ご教授おねがいします
0914906
04/12/02 12:29:03ID:???ありがとうございます!
でも、今回のものではループは使用できませんでした。すいません。
strData = "あ,い,う" ,え,お
strWk = bobj.Replace("s/"".+,.+""/,/kg",strData)
という形でやってみたのですが、[「,」,え,お]となってしまいました。
ループを使わないと無理なんですね。すいませんでした。
0918nobodyさん
04/12/06 21:15:27ID:???顔文字みたいな正規表現無いかな?
0919nobodyさん
04/12/06 23:32:21ID:???おぱーい
0920nobodyさん
04/12/07 01:20:47ID:???0921nobodyさん
04/12/07 03:16:21ID:???/J+_+`/
/[^_]人[_^]/
/(?=_=)/
/(V)o\o(V)/ ←バルタン星人
(o|o) ←ウルトラマン
!|!○| ̄|_!|!
正規表現の考え方で育った人間ってどうなるんだろうと
ハァハァしながら作ってみた。
0922nobodyさん
04/12/07 22:38:18ID:???0923のりのみや
04/12/10 07:24:26ID:xBvxelrRテキストファイル内の行をランダムで10行ほどgrepするにはどうすれ良いのじゃ?
まろにはとんとわからんでのう…
どなたか教えてくれぬか?
この通りじゃ
0924nobodyさん
04/12/10 08:07:02ID:???うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
0926nobodyさん
04/12/14 05:12:31ID:???$value =~ s/[$WwWw]+//g;
はうーうまくいかないっす。
0927nobodyさん
04/12/16 18:01:44ID:Ovl4zL1K文字列にはマッチしないっていう正規表現はどうかけばよいですか?
0928nobodyさん
04/12/16 18:42:21ID:???Perl なら /^(?:(?!def).)*?abc(?:(?!def).)*\z/
もっと簡単にかけそうな気もするけど。
0931nobodyさん
04/12/17 11:52:31ID:???0932nobodyさん
04/12/19 12:51:50ID:???$aa="123456";として
$aaの行末から3、4つ目の数字(この場合34)を変数に格納したいのですが、
正規表現でできますか?
0934nobodyさん
04/12/19 15:59:53ID:???<?php
$aa = '123456';
preg_match('/(\d\d)\d\d$/', $aa, $match);
echo $match[1];
?>
0935nobodyさん
04/12/20 08:38:14ID:???0937nobodyさん
04/12/20 18:59:11ID:???0938nobodyさん
04/12/21 05:59:53ID:???0940nobodyさん
04/12/22 06:53:40ID:???0941nobodyさん
04/12/22 09:46:08ID:???日本海の冬の幸をたんまり仕入れろ。
築地で仕入れろ。力一杯仕入れろ。
強く、優しく、そして時にはエロく。
そうやってダンディーに仕入れた冬の幸を、
極上の練炭で焼く。やさしく焼く。じっくり焼く。
焼き上がり直前は、一気に火を煽って瞬間の仕上がりに全てを賭ける。
そして、食べる。焼き上がりを食べる。ハフハフしながら食べる。
味わう。素材の持ち味をすべて引き出して食べる。
感じる。素材の持つ力強さとうま味を精一杯感じる。
そして、思いを馳せろ。
自分が食べたものは、かけがえのない命だと。
たとえ単に美味な日本海の冬の幸だろうと、つがいだったものもいれば子供もいたかもしれない。
その命を自分は食してしまったのだと。
そして考えろ。それは命が命をつなぎ止める、地球上の壮大な生態系の一部であることを。
最後に、想え。感謝を。命への感謝を。生きていることへの感謝を。
0943nobodyさん
04/12/22 11:07:26ID:???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でもマッチしてしまいます。
よろしくお願いします。
0944nobodyさん
04/12/22 14:00:17ID:???1. 末尾のスペースなら str.replace(/([ ]*)$/, "") じゃない?
2. 先頭から末尾まで全て数字、ということで /^[0-9]+$/ かな?
0946nobodyさん
04/12/28 20:23:05ID:N6XrfelJ置き換えたいんですが、\[.*\]じゃダメなんですよね。
どうすればいいのでしょうか。ちなみに秀丸を使ってます。
0947nobodyさん
04/12/28 20:28:35ID:gvnNaLCU置き換えたい文字を直接指定すればいいだけだろ。
0948nobodyさん
05/01/08 18:38:47ID:1HeEdFHi$str =~ s/<a\s.*?>(.*?)<\/a>/$1/ig;
とやると、aタグの一部が消えずに残ってしまったりして困ってます。
あと、.*?は遅いと書いてあるのですが、良い案があれば教えてください
0949初心者
05/01/08 18:52:51ID:TEnfV1Izのですが、うまくいかないので、どなたか教えて頂けますでしょうか。
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です」と
表示させたいのですが、どうすれば良いのでしょうか。教えて頂けると
非常に助かります。宜しくお願い致します。
0950949
05/01/08 19:12:39ID:TEnfV1Izすれば出来るんですね。お騒がせしました。。。
0951nobodyさん
05/01/08 19:29:22ID:???実は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;
ぐらいかな。
一部が残るのは分からない。
0952nobodyさん
05/01/08 19:49:31ID:/O5s2fuehttp://rinristarin.value-net.net/22/fir/ リリカちゃんが
エッチしたら更新する日記。最近ずっとこの子に萌えっす。
俺ともお願いぃぃ・・・
0954nobodyさん
05/01/08 21:06:07ID:???0955nobodyさん
05/01/09 10:04:16ID:???@data = split(/:/, $str);
だと、余分な区切りまで・・・
0956nobodyさん
05/01/09 10:17:30ID:???0957nobodyさん
05/01/09 10:32:46ID:???@data = $str =~ m/^([^:]*):(.*)/;
0959nobodyさん
05/01/11 22:33:00ID:nnjmq/8Zhttp://*.hoge.jp/
ってどうやって書くんでしょう?書籍とかと数時間格闘しましたが
ぱっさり理解できないのです
0961nobodyさん
05/01/11 22:42:43ID:???0962nobodyさん
05/01/12 00:48:18ID:mmvJMOP+文字列 = "例えば(その1)や(その2)など";
で( )の中身をとりたいんすけど素直に"/\((.+)\)/"とすると
"その1)や(その2"がマッチしてしまいます。
"/\(([^\(]+)\)/"とすると"その1"しかマッチしてくれません。
whileを使ってもうまくいきません。どのようにしたらいいでしょうか。
phpでpreg_matchしています。
0963nobodyさん
05/01/12 00:56:34ID:???そしてpreg_match_allの間違いじゃないのか
0964nobodyさん
05/01/12 00:58:27ID:???0965962
05/01/12 01:10:13ID:???それでいけました。
使ってるリファレンス本にpreg_match_allがのってなかったので気付きませんでした。
きちんとマニュアル読むようにします。
0966959
05/01/12 13:29:58ID: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]
こっちは正しく動作しました。
0967nobodyさん
05/01/12 14:01:55ID:???*は直前の文字が0以上繰り返される、という意味なので、上の式がマッチするのは
http://.hoge . . .
http:////.hoge . . .
http:///////////////////////////////////////////////.hoge . . .
など。
どんな文字でもマッチさせるには、「.」の0もしくは1以上の繰り返し、と書けばいいんだが、
あらゆるパスにマッチする正規表現はかけてるのに、あらゆるサブドメインにマッチする
正規表現が書けないとはこれいかに。
0968nobodyさん
05/01/12 14:04:36ID:???正規表現で「 * 」は「直前の文字や正規表現を 0回以上繰り返す」という意味なので、
上の例の「 /* 」の箇所で「 / を 0回以上繰り返す」という意味になっちゃってる。
おそらくそこでやりたいのは「アルファベットを 1回以上繰り返す」だと思うので、
「 !^http://[a-z]+\.hogehoge\.jp/.*$ 」とすればいいんじゃないかな。
「 + 」は 1回以上繰り返す意味。
0969nobodyさん
05/01/12 15:11:10ID:1iafFrJp<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>を外すっていうのをやりたいです。
どうしたらいいですか?
0971959
05/01/12 15:19:29ID:???ありがとうございます。
教えていただいたhttp://[a-z]+\.hogehoge\.jp/.*$
で上手く行きました。
本当に助かりました。感謝感激です
0972nobodyさん
05/01/12 17:23:47ID:???アンカータグ全部要らない、ってことなら、
何も考えずにとにかく <a ...> と </a> を取り除いちゃえばええのでは。
0973nobodyさん
05/01/13 20:32:10ID:rZkv4VMuのような文字列の
{__hoge__}とカッコ等が付いたものと、hoge と文字のみの2つを取得したく
以下のようにしてみました。
preg_match_all("/\{__(.+)__\}/","$str","$match");
一行に {__(.+)__} 形式の文字が一つしかない場合は、上手くいくのですが
二つ以上あるばあい、{__hoge__}{__piyo__} と最大のマッチをしてしまいます。
最小のマッチをさせるには、どうすればいいのでしょうか?
0976nobodyさん
05/01/15 14:08:23ID:DsGxQZIFあるとされるディレクトリ(例でいう./)を調べて、そのファイルがあるかどうかをチェック
したいのですが、引数のファイル名最後のスラッシュ以後を消す方法が分かりません。
どういった正規表現を用いれば良いのでしょうか?
0978nobodyさん
05/01/17 03:16:40ID:???ファイルテスト演算子とは知りませんでした(死
ところで、その引数から、拡張子とディレクトリ構造?(./、../、/)を消して
ファイルの名前だけを知りたいのですが、(./ディレクトリ名/**.txtでいう**)
そういう時は以下みたいに3段かませばいいですか?
$name = "./test/test.txt";
$name =~ s/\A\.|\A\.\.//g;
$name =~ s/\A\/|\A\/\S*\/|\S*\///g;
$name =~ s/\.\S*$//g;
うまく取得できない例外は起きそうでしょうか?
0979nobodyさん
05/01/17 03:36:56ID:???ファイル名を取り出したいなら
$name = "./test/test.txt";
$name =~ /.+\/(.+)/;
print $1;
test.txt
ファイル名のみに置き換えたいなら
$name =~ s/.+\/(.+)/$1/;
$name = "./test/test.txt";
print $name;
test.txt
0980nobodyさん
05/01/17 04:07:56ID:???0984980
05/01/17 11:53:51ID:???立てますた。
正規表現道場@2ch Part4
http://pc5.2ch.net/test/read.cgi/php/1105930285/
0985nobodyさん
05/01/17 15:42:34ID:???ネタごとに補足、でいいのかな
0986nobodyさん
05/01/18 06:55:18ID:???正規表現じゃない方が楽なら、
そっちを教えてあげるのが
優しいお兄さんとしての役割。
正しい誘導をしてあげていると思います。
0988nobodyさん
05/01/19 08:19:55ID:???え
さ
を
0989nobodyさん
05/01/20 02:09:00ID:???&1105930285;
0990nobodyさん
05/01/20 12:41:11ID:???0991nobodyさん
05/01/20 12:56:21ID:???0992nobodyさん
05/01/20 12:57:20ID:???0993nobodyさん
05/01/20 13:05:58ID:???バカって言ったんだよ、バーカ。
0994nobodyさん
05/01/20 13:16:13ID:???0995nobodyさん
05/01/20 13:17:39ID:???0997nobodyさん
05/01/20 13:31:15ID:FNQvtzHY0998nobodyさん
05/01/20 13:51:09ID:???0999nobodyさん
05/01/20 13:55:38ID:???1000nobodyさん
05/01/20 13:55:54ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。