正規表現道場@2ch Part4
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
05/01/17 11:51:25ID:SH1ygN1Pこのスレは有用そうな正規表現を紹介したり、
どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
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/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0002nobodyさん
05/01/17 13:15:29ID:???0003nobodyさん
05/01/17 21:55:47ID:???0004nobodyさん
05/01/17 22:04:02ID:???屁
0005nobodyさん
05/01/17 22:30:18ID:???$msg = "組織運営図";
if ( $msg =~ /(.*)運営(.*)/ ){
print "ok. $1$3\n";
} else {
print "NG\n";
}
上のコードで okに行って欲しいんですが、
マッチしてくれません…。
何か根本的な勘違いしてますでしょうか。
0006nobodyさん
05/01/17 22:49:27ID:???文字コードは Shift_JIS だよね?あと $1$3 じゃなくて $1$2 だよね?
Perl 5.8 を使ってるなら、最初で use encoding 'Shift_JIS'; としてみる。
それ以前のバージョンの Perl ならとりあえず /(.*)\Q運営\E(.*)/ としてみる。
0007nobodyさん
05/01/17 23:11:27ID:???00085
05/01/18 09:38:37ID:???use encoding 'Shift_JIS';
これでいけました。
こんな単純なことだったとは…
これで昨日一日つぶしちゃった…orz
激しく感謝ですw
0009nobodyさん
05/01/18 16:31:30ID:???ヘルプには
・メタ文字 \Gは使用できません。
・'/'はエスケープする必要はありません。
修飾子は以下の3つをサポートしています。
k 文字を日本語(シフトJIS)として扱いします。
m 文字列を複数行として扱います。
i 大文字と小文字を区別しないで検索します。
と、あります。
--------この下が一行目-------
スレッド名
Thu, 29 Jan 2004 17:27:16 GMT
1002
0
http://hoge.com/bbsname
3
0
0
1075476984
0
-----ここまで--------
の2chブラウザのidxファイルを置き換えて
3行目の一文字目("1002"の"1")が1で、
3行目が4桁である時に
7行目を"3"にしたいのですが
speeeeedの検索文字列と置き換え文字列の欄には何を入れれば良いのでしょうか?
よろしくお願いします。
0010nobodyさん
05/01/18 17:37:11ID:TA2apQcG「・・・で・・・である時に」なんていう条件分岐の機能は持ってないだろ。
0011nobodyさん
05/01/18 19:28:22ID:???修飾子 m をセットして、検索文字列、置換文字列をそれぞれこんな感じかな。
\A(.*\n.*\n)(1\d\d\d\r\n)(.*\n.*\n.*\n)(.*\n)
$1$2$3\r\n
0012nobodyさん
05/01/19 03:18:24ID:hI5VxZ7oどんな風に記述すればよいでしょうか?
001412
05/01/19 03:40:05ID:hI5VxZ7o変数がある文字を含んでいたら、という判断をさせたいのです
0015nobodyさん
05/01/19 03:41:19ID:???0016nobodyさん
05/01/19 04:29:16ID:???if (/ある文字列/)
0021nobodyさん
05/01/19 16:04:47ID:???正規表現を独自拡張してない実装ってどれのこと?
0023nobodyさん
05/01/19 16:48:15ID:???条件付パターンマッチと言っても、変遷で表現できるので、正規表現で解が求まる
ペールはたまたま、読みやすさかなんかのために、独自の表記方法を導入してるが、
処理としては普通。実装とは関係ない。abcはabならcにマッチする、というのと変わらん
0025nobodyさん
05/01/19 17:23:49ID:???どいたしまして。
Speeeeed は初めて知ったので自信無かったけどうまくいったみたいでよかった。
なんだか話題が変な方向に行ってるみたいだけど、
>>12=14 が実装言語に何を使っているか限定せずに質問を始めたのがまずい気がする。
質問するひとは、はじめに何使ってるかをちゃんと示しておくべきだと思う。
0026nobodyさん
05/01/19 17:30:52ID:???0027nobodyさん
05/01/19 18:42:24ID:???0028nobodyさん
05/01/20 02:59:30ID:???0029nobodyさん
05/01/20 20:17:30ID:???下記だとどうやら全角英数にもマッチしてしまうみたいです。
preg_match('/[\xB0\xA1-\xF4\xA4]/', $str)
どのようにしたら漢字だけにマッチするようになるでしょうか?
0030nobodyさん
05/01/21 11:13:19ID:ALcAsVlrを
1005hw9fCDDLlBeZ0
にしたい(ようは、%以降の文字列を削りたい。%は1回しかでてこない)
にはどうすればいいでしょか?
なお、php4です。
$srt_o = preg_replace("/^(.*)(\%.*)(.*)$/i", "$1$3", $srt_o);
でもうまくいかず・・・
003130
05/01/21 11:22:49ID:ALcAsVlr変換されずでしたわ・・・
$srt_o = preg_replace("/^(.*)(\%.*)$/i", "$1", $srt_o);
003230
05/01/21 11:25:14ID:???、最後に出てきる%の文字列以降を削除する方法を教えてくださいませ
0033nobodyさん
05/01/21 11:25:24ID:???$str = '1005hw9fCDDLlBeZ0%253D';
$str = explode('%',$str,1);
var_dump($str);
で。正規表現(゚�听)イラネなときは出来るだけ使わない。
0034nobodyさん
05/01/21 11:27:07ID:???とりあえずpreg_replace('/%.*/', '', $str_o);
0035nobodyさん
05/01/21 11:29:12ID:???preg_replace('/%[^%]*$/', '', $str);
%はエスケープ不要よ。
003633
05/01/21 11:30:24ID:???訂正
$str = '1005hw9fCDDLlBeZ0%253D';
$str = explode('%',$str,2);
var_dump($str);
0037nobodyさん
05/01/22 16:28:46ID:Z5CU+gTj2
00:02:19,916 --> 00:02:21,084
I can't move!
3
00:02:24,879 --> 00:02:27,215
Help me! I can't move!
4
00:02:27,882 --> 00:02:28,591
Oh my god!
このような文字列のtxtファイルを英語の部分のみ下のように取り出したいのですが
I can't move!
Help me! I can't move!
Oh my god!
いいソフトはありますかと聞いたところ正規表現ならできると聞き、このスレに来ました。
上の条件を満たすにはどのようにすればいいのでしょうか?
0038nobodyさん
05/01/22 16:48:23ID:???「ソフトありますか」からここに来るのがいまいちよくわからんな。
正規表現の書き方が知りたいのか?
できるけど正規表現が使えるソフトかなんらかのスクリプトなどが
ないと意味ないぞ。
0039nobodyさん
05/01/22 17:04:14ID:Z5CU+gTj正規表現が使えるソフトは自分でみつけました。
あとはそこに%$?みたいな記号を入れるのですが、それがわからないのです。
0040nobodyさん
05/01/22 17:06:17ID:???grepでいいでしょ。
明らかに板違いだね。
ココから来たのかよ。
気軽に「こんなソフトありませんか?」 6
http://pc5.2ch.net/test/read.cgi/software/1104587671/695
とりあえず、放置推奨 >all
0043nobodyさん
05/01/25 07:32:45ID:???$strが漢字一文字の時マッチ。
preg_match("/^[\xb0-\xff][\xa0-\xff]$/", $str)
意図が今ひとつ分からないから、こんなもんで。
0044nobodyさん
05/01/26 10:23:23ID:???逆に囲まれているというのは出来るのですが囲まれていない方が分からないです。。。
0045nobodyさん
05/01/26 10:27:00ID:???0046nobodyさん
05/01/26 13:29:10ID:???囲まれているのができるのならば、
(1) 囲まれている<と>を適当にぶつからない文字or文字列に変換する。
制御文字とかがオススメ。
(2) 残った全ての<と>は囲まれていないのでお前の好きなように変換する
(3) (1)で変換したものを元の<と>に戻す
とすればいいはずだな。
0047nobodyさん
05/01/26 13:30:28ID:???Perl でいい?ちょっと苦しい感じもするけどこんなのとかどうでしょう?
$str =~ s/(?:(「.*?」)|(\<))/$1||"<"/ge;
$str =~ s/(?:(「.*?」)|(\>))/$1||">"/ge;
004847
05/01/26 13:33:15ID:???置換後のダブルクォーテーションの中は「&lt;」「&gt;」です。
$str =~ s/(?:(「.*?」)|(\<))/$1||"&lt;"/ge;
$str =~ s/(?:(「.*?」)|(\>))/$1||"&gt;"/ge;
0051nobodyさん
05/01/27 01:51:00ID:???変換する正規表現を書いてみました。
$sql =~ s/(\'|\\|\%)/\\$1/g;
正常に動作しているみたいなのですが、異常系のパターン
文字列等ございましたらご指摘いただきたい次第です。
宜しくお願いします。
0052nobodyさん
05/01/27 14:08:43ID:???それで特に問題ないように思うけど、
そもそもな話で、SQL のエスケープの仕様ってそれで良いの?っていうのと、
DB のライブラリにはエスケープする関数が用意されてることが多いので
そっちを調べた方が良い気がする。
0053nobodyさん
05/01/28 02:31:31ID:???ご返答有難うございます。
おそらくこの3つをエスケープすれば良いかと思うのですが、
他にもあるのでしょうかね、、
スレ違いっぽいので他のところで聞いてみます。
0054nobodyさん
05/01/28 12:52:16ID:???%a = $a =~ /([a-z])(\d)/g;
とすると
$a{a} == 1;
のようになりますが、括弧が4つの時に$2と$4だけを毎回ハッシュに渡すには
どうすればいいんですか?
%a = $a =~/(([a-z])\d)([a-z](\d))/g;
$2と$4だけを毎回%aに渡したいのです。
0055nobodyさん
05/01/28 13:08:00ID:???(?: ) で後方参照されなくなるので、こうするとか。
%a = $a =~/(?:([a-z])\d)(?:[a-z](\d))/g;
005754
05/01/28 13:50:40ID:???$html_1 = qq|<input type="hidden" name="test1" value="a">|;
$html_2 = qq|<input type="hidden" value="a" name="test1">|;
%hiddenというのの中にnameの値をキーにvalueの値を値にしたハッシュを作成したいです。
わからないのは
my %hidden = $html_1 =~ m{<input type="hidden"\s*(?:name="(.*?)")?\s*(?:value="(.*?)")?.*?>};
$html_1に対してはこれでいいですが$html_2に対してはこれではキーがありません;
nameとvalueの順番がなんでもいいようにするにはどうすればいいですか?
0058nobodyさん
05/01/28 18:09:31ID:???一発でマッチする方法はあるかなあ?俺はこんなのしか思いつかなかった。
my $params = ($html =~ m{<input\s+type="hidden"([^>]+)>})[0];
my %hidden = $params =~ m{(?:\s+(\w+)="([^"]+)")}g;
0059nobodyさん
05/01/28 22:09:22ID:???素直に 2 回マッチさせるのが無難じゃないかなぁ,こんな感じで。
my %hidden = map {/\bname="(.*?)"/, /\bvalue="(.*?)"/} $html_2, ;
0060nobodyさん
05/01/30 11:46:21ID:???my %hidden = $html_2 =~ /<input type="hidden".*?(?=.*?\bname="(.*?)").*?\bvalue="(.*?)".*?>/;
0061nobodyさん
05/01/30 16:30:48ID:???それいいなw
%hidden =
$html =~
/<input(?=.*?\btype="hidden")(?=.*?\bname="(.*?)")(?=.*?\bvalue="(.*?)").*?>/g;
こうすると type=hidden が後ろになっても取れるのかー。戴きます。
0062nobodyさん
05/01/30 19:07:48ID:60wlVefXtest.txtというファイルに
|aaaaaaaaaa|ddddddddddddd|ggggggggggggg|
|ffffffffff|hhhhhhhhhhhhh|jjjjjjjjjjjjj|
|mmmmmmmmmm|uuuuuuuuuuuuu|lllllllllllll|
というのが書かれているとします。
このファイルをUNIX上でcat test.txt | perl test.cgi
というコマンドを打ちます。
test.cgiの処理として
'<>'で標準入力からtest.txtの内容を読み込んで、
'|'を区切り文字としてテーブルタグに変換させる
正規表現を書ける人いませんか?
<table>
<tr><td>aaaaaaaaaa<td></td>ddddddddddddd<td></td>ggggggggggggg</td></tr>
<tr><td>ffffffffff<td></td>hhhhhhhhhhhhh<td></td>jjjjjjjjjjjjj<td></td>
<tr><td>mmmmmmmmmm<td></td>uuuuuuuuuuuuu<td></td>lllllllllllll<td></td>
</table>
というふうに変換したいのですが、うまく正規表現が書けません
0063nobodyさん
05/01/30 19:10:42ID:60wlVefX<table>
<tr><td>aaaaaaaaaa<td></td>ddddddddddddd<td></td>ggggggggggggg</td></tr>
<tr><td>ffffffffff<td></td>hhhhhhhhhhhhh<td></td>jjjjjjjjjjjjj</td></tr>
<tr><td>mmmmmmmmmm<td></td>uuuuuuuuuuuuu<td></td>lllllllllllll</td></tr>
</table>
↑のように変換したいのですが
0064nobodyさん
05/01/30 19:14:46ID:???ま、いくらでもいます。
0065nobodyさん
05/01/30 19:17:56ID:60wlVefXどのような正規表現で処理したら良いのか教えてください。
0066nobodyさん
05/01/30 20:23:18ID:???行頭の|を<tr><td>に置き換え。s/^\|/<tr><td>/;
行末の|を</td></tr>に置き換え。s/\|$/<\/td><\/tr>/;
その他の|を</td><td>に置き換え。s/\|/<\/td><td>/g;
<table></table>は適当に付ける。
0067nobodyさん
05/01/30 21:16:39ID:???\Q〜〜\E
はどういう意味ですか?
0069nobodyさん
05/01/30 21:44:03ID:???0071nobodyさん
05/01/31 01:31:35ID:???0072nobodyさん
05/01/31 07:14:59ID:???0074nobodyさん
05/01/31 13:13:56ID:???0075nobodyさん
05/02/02 10:56:57ID:hb9v8KSn若気の至りで、アクセス解析を読み込むためのJSファイルをHTML文書の頭に付けてたのですが、
思い直して</body>直前に入れなおしたいと思ったのですが、
speeeeed!(k,m,iオプション有)で、置換する際に、
<body><script type="text/javascript" src="foo.js"></script>
本文
</body>
・bodyとscriptの間に改行はない
・bodyにidが振られている場合もある
で、
<body(.*?)>(<script.*?script>)(.*?)</body>
↓
<body$1>$3$2</body>
とやってみたのですが、うまくいきませんでした。
ためしに、
<script.*?script>だけでマッチングを試してみたのですが、
<script type="text/javascript" src="foo.js"></script>にマッチしませんでした。
どう書き直したらよいのでしょうか?
全く根本的に間違ってるような予感がしますが、お教え下さいますよう宜しくお願いいたします。
0076nobodyさん
05/02/02 12:18:04ID:???<body(.*)>(<script.*script>\r\n)((.*\r\n)*)</body>
<body$1>\r\n$3$2</body>
0077nobodyさん
05/02/02 15:04:00ID:???でも"¥"などの実体参照化されてる部分の"&"は変換しません。
で自分なりに考えたのですが↓
$text="<p>キュウリ&ナス=¥200</p>";
$text=~s/&[^(yen;|euro;|amp;|copy)]/&/g;
print "$text¥n";
を実行すると、結果が
<p>キュウリ&ス=¥200</p>
となり、うまくいきません。
2行目の正規表現がおかしいと思うのですが、どう変えたらいいのでしょうか?
よろしくお願いします。
0078nobodyさん
05/02/02 15:10:51ID:???007977
05/02/02 15:12:58ID:???perlで文中の"&"を"&amp;"に変換したいと思ってます。
でも"&yen;"などの実体参照化されてる部分の"&"は変換しません。
で自分なりに考えたのですが↓
$text="<p>キュウリ&ナス=&yen;200</p>";
$text=~s/&[^(yen;|euro;|amp;|copy)]/&amp;/g;
print "$text¥n";
を実行すると、結果が
<p>キュウリ&amp;ス=&yen;200</p>
となり、うまくいきません。
2行目の正規表現がおかしいと思うのですが、どう変えたらいいのでしょうか?
よろしくお願いします。
0080nobodyさん
05/02/02 15:33:41ID:???これでどう?
$text =~ s/(?:(&(?:yen|euro|amp|copy);)|&)/$1?$1:"&"/ge;
0081nobodyさん
05/02/02 15:37:52ID:???0083nobodyさん
05/02/02 15:41:22ID:???0085nobodyさん
05/02/02 15:50:43ID:???0086nobodyさん
05/02/02 19:20:05ID:???ダメだとか言う前に自分のコード見せてみなm9(^Д^)プギャー
0087nobodyさん
05/02/02 19:25:17ID:???0089nobodyさん
05/02/02 23:52:44ID:???HTML4 で使える文字実体参照
http://www.ne.jp/asahi/minazuki/bakera/html/reference/charref
0090nobodyさん
05/02/02 23:56:25ID:???0091nobodyさん
05/02/03 04:21:06ID:???0094nobodyさん
05/02/03 06:43:00ID:???0096nobodyさん
05/02/03 09:12:37ID:???0097nobodyさん
05/02/03 13:43:04ID:???yen => 1,
euro => 1,
amp => 1,
copy => 1,
# 気が済むまで並べる
);
$text =~ s/(?:(&(\w+);)|&)/$1&&$entref{$2}?$1:"&"/ge;
0098nobodyさん
05/02/03 20:21:27ID:???0099nobodyさん
05/02/03 20:27:30ID:???0101nobodyさん
05/02/03 22:25:28ID:???0102nobodyさん
05/02/03 22:50:41ID:???古い車輪だと機械的に最小の性器表現を生成したりするんだが、まず読めないし遅い。
0103nobodyさん
05/02/03 23:37:30ID:???010497
05/02/04 00:47:42ID:???0106nobodyさん
05/02/05 10:31:05ID:???0109nobodyさん
05/02/05 14:18:00ID:???三項演算子使いまくりなのはuse warnings対策。
中身はほぼ>>97さんと同じ。
my %sp = map{$_ => 1} qw(
quot amp lt gt
nbsp iexcl cent pound
curren yen brvbar sect uml copy ordf laquo
...
lceil rceil lfloor rfloor lang rang loz
spades clubs hearts diams
);
$text =~ s/&(?:(\w{2,8});)?/$1 ? ($sp{$1} ? "&$1;" : "&$1;") : "&"/ge;
0110nobodyさん
05/02/05 14:28:42ID:???Wikiでプラグインをコールするような用途に向いていている。
&置換だけなら、よくある(?![\w\d]+;|#x?[A-Fa-f0-9]{1,6};)みたいので十分では。適当だけど。
全部羅列するならDTD依存で生成するから、コンパイラが吐いた長い正規表現でも、スクリプト生成の
でかいハッシュでも、保守性は変わらないかな。【代】
0111nobodyさん
05/02/05 16:39:25ID:???完全にstrictなHTMLが必要なのかも知れ無いし。
ハッシュ作るのマンドクセなら、他のモジュールから借用する手もある。
内部の変数に依存しているから、使い捨てのスクリプト程度にしか使えないけどね。
use HTML::Entities;
...
$text =~ s/&(?:(\w{2,8});)?/$1 ? ($HTML::Entities::entity2char{$1} ? "&$1;" : "&$1;") : "&"/ge;
0113109=111
05/02/05 17:00:43ID:???たまたま忘れただけさ orz
$text =~ s/&(?:(\w{2,8});)?/$1 ? ($HTML::Entities::entity2char{$1} ? "&$1;" : "&$1;") : "&"/ge;
0114nobodyさん
05/02/07 17:45:23ID:???0115名無しさん@Vim%Chalice
05/02/07 18:32:59ID:cdJVzA6kとにかく変数を検索するための正規表現を作りましたが
全然だメッス。↓が限界
\b[A-z_][A-z0-9_]*[\s]*?[^\(]
0116名無しさん@Vim%Chalice
05/02/07 19:01:26ID:cdJVzA6k変数はつらいが、関数もしくはメソッドならこれだぜ!!
(?=.)(?!(if|while|for|switch))\<[A-z_][A-z0-9_]*?[\s]*?(?=\()
0117nobodyさん
05/02/08 00:19:26ID:aXE3qbDZ"【PHP】くだらねぇ質問はここに書き込みやがれpart3" から誘導されてきました。
HTMLソース内に記述されている画像ファイル名を抽出しようと四苦八苦しています。
画像ファイル名は相対パスで指定されており、「../../」の部分も一緒に抽出させたいのです。
検索条件をお教えいただけないでしょうか。
$html = HTMLソース;
eregi("xxxxxxxx", $html, $var);
-- このような結果が返ってくる --
$var[0] == "../../aaa.jpg";
$var[1] == "image/bbb.gif";
・
・
・
お力添えをお願い致します。
0118nobodyさん
05/02/08 00:43:32ID:???preg_match_all('!<img .*src.*"(.+?)"!', $html, $var)
こういうやつとか?
0120117
05/02/08 09:49:40ID:9oMQzPoDありがとうございます!
マニュアルを見てみると、preg_match_all関数のほうが良さそうですね。
さりげなく教えていただき、大変感謝です。
あとは119で指摘されているクォーテーションマークの問題を
色々試して解決してみます。
あ〜正規表現を勉強しないと…(汗)
0121nobodyさん
05/02/08 10:09:22ID:???>>119の問題を回避するとしたらこんな感じでよろしいのでしょうか?
preg_match_all('!<img .*src=('|\")(.+?)('|\") .*>!', $html, $var)
0122121
05/02/08 10:10:46ID:???preg_match_all("!<img .*src=('|\")(.+?)('|\") .*>!", $html, $var)
です…
0123nobodyさん
05/02/08 12:43:15ID:???0124nobodyさん
05/02/09 10:01:21ID:???< >の中ににある ” ”または ’ ’の中にある > は無視したいんですが、
どうしたらよいでしょうか・・・。
0125124
05/02/09 10:03:20ID:clTgmqY1抽出しております。。
宜しくお願いします。
0126nobodyさん
05/02/09 13:09:04ID:???こんなのとか。
'/<\w+(?:\s+(?:"[^\"]+"|\'[^\']+\'|[^"\'\>]+)+)?>/'
0127nobodyさん
05/02/09 15:19:31ID:???ありがとうございます。
貼り付けてみたんですが、Parse errorになっちゃいました
何がまずいんでしょうか・・・
0130nobodyさん
05/02/09 19:56:51ID:???'/<\/?\w+(?:\s+(?:(?:\w+\s*=\s*(["\']?).*\1)|noshade|selected|checked|multiple|noresize))*>/'
こんなとこで。
見落としありそうだけど。
0132130
05/02/09 20:47:31ID:???なるほど
'/<\/?\w+(?:\s+(?:(?:\w+\s*=\s*(["\']?).*?\1)|noshade|selected|checked|multiple|noresize))*>/'
とりあえず対応してみる。
0133nobodyさん
05/02/10 16:49:24ID:???0134nobodyさん
05/02/10 16:51:05ID:???0135nobodyさん
05/02/10 17:02:07ID:???ttp://jp.php.net/manual/ja/function.strip-tags.php
0136nobodyさん
05/02/10 17:38:07ID:???0137136
05/02/10 17:43:29ID:???'/<(?:[^"\'>]*?|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*")*>/'
>>132
<a href=">" />も
0138nobodyさん
05/02/10 17:56:42ID:???0139130
05/02/10 21:00:18ID:???ども、対応してみる。
'/<\/?\w+(?:\s+(?:(?:\w+\s*=\s*(["\']?).*\1)|noshade|selected|checked|multiple|noresize))*\s*\/?>/'
これはいかがですか。
<![INCLUDE CDATA [ >>> ]]>
<script><!-- if (a>c) --></script>
0140nobodyさん
05/02/10 21:44:38ID:???これでダメみたい。
<a href=hoge>hoge</a>
hoge が消えちゃう。
'#</?\w+(?:\s+(?:\w+\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^"\'>\s]*)|\w+))*\s*/?'.'>#i';
0141nobodyさん
05/02/10 22:10:06ID:???正規表現で調べたいんだけど、うまく動作してくれない。
メールアドレスの正規表現って、
^[a-z0-9][\\w\\.]*@[^\\.][\\w\\.]+[^\\.]$
でいいよね?
0142nobodyさん
05/02/10 22:20:47ID:???とりあえずパッと見て気がついた点は、
[...] の中の '.' はエスケープしなくて良いのと、
ドメインにはハイフンもありうるけど \w にはハイフンは含まれない。
0143130
05/02/10 23:09:13ID:???エンバグしてました orz
'/<\/?\w+(?:\s+(?:(?:\w+\s*=\s*(["\']?).*?\1)|noshade|selected|checked|multiple|noresize))*\s*\/?>/'
# ああ、もういいや。
0144nobodyさん
05/02/10 23:13:25ID:???クォートなしの属性値はHTML4.01までならOKだから考慮する必要があるけど
実体参照になってない&<>"なんかは論外。
0145nobodyさん
05/02/11 00:21:17ID:???<!CDATA[ <tag attr=""> ]]>
0146nobodyさん
05/02/12 00:04:09ID:???0147130
05/02/12 08:02:28ID:???$sgml = '<!(?:\[\s*(?:[\w\.]+|\%[^;]+;)\s*\[.*?\]\]|[\w\.]+(?:\s+(?:\'[^\']*\'|"[^"]*"|\[[^\]]\]*|[^"\'>\s]*))*)>';
$remark = '<!(?:\s*--(?:\'[^\']*\'|"[^"]*"|[^"\']*?)*--\s*)?>';
"/$remark|$sgml|$html/is"
グダグダついでに。
SGMLをマッチする方向に変更。
ショートタグの大部分、エンプティタグ、NET、一つのタグ内の複数の注釈は非対応。
0148130
05/02/12 08:10:57ID:???$html = '<\/?[\w\.]+(?:\s+(?:\w+\s*=\s*(?:\'[^\']*\'|"[^"]*"|[^>"\'\s]*)|\w*))*\/?>';
でおながいします。
0149nobodyさん
05/02/12 23:55:30ID:???数字が10個以上連続していない行をマッチさせたいんですが、
どのような正規表現を書けばいいでしょうか?
0150nobodyさん
05/02/12 23:57:49ID:???0152nobodyさん
05/02/13 00:45:32ID:???直前に数字十個以上がない全ての文字の連続という正規表現を書けばいい
PCRE系ならMオプションをつけて行マッチさせろ
0153149
05/02/13 00:51:12ID:???数字10個のものを除外するのでは、
意図していることと違っちゃうのでちょっとだめです。
0154nobodyさん
05/02/13 01:05:37ID:???のほうが書きやすいか。
0155nobodyさん
05/02/13 02:09:24ID:???pcreなのかposixなのかも知らんし、どのくらい噛み砕けば理解できるのかも分からんし、
よく分からない、の「よく」がどの程度かも知らんし、データが複数行なのか単一行なのかも知らんし、
Gマッチなのか一個でいいのかも知らんし、正規表現書けるかどうかさえ知らんのだYO。
>>154
言葉からだといくつかパターンが考えられるけど、数字が続かない文字だと、
数字のみからなるデータで常に文末にマッチすることないか?
>>152のように否定言明を使って (?!\d{10,}). みたいにするしかないと思う。
後方言明だと可変長の正規表現を扱えないし、、、。
0156155
05/02/13 02:19:44ID:???ともかく普通に否定言明にドットつなげばいけるよ。
0157nobodyさん
05/02/13 17:13:27ID:iVFDDmsLある文字列が、全角カタカナで50字以内かいなかは
どうやっってかけばいいのでしょうか?
0158154
05/02/13 18:52:34ID:???あーそうかも。とりあえずパフォーマンスの悪い別解。激しくナンセンスだがw
/^(?(?!\d{10,}).*)$/
>>157
全角カナ換算で50文字以下なら、エンコード指定してmb_strcountか、strlenの結果を一文字の
バイト数で割って算出。
振り仮名などで対象がすべてカナであることも保障したい場合は、使用している文字コードの
全角カナのブロックをすべて文字クラス[]に放り込んで{,50}$を指定すれば、正規表現的にはOK。
0159nobodyさん
05/02/13 18:57:00ID:???○mb_strlen
ね
0160nobodyさん
05/02/13 19:14:12ID:???0161nobodyさん
05/02/13 20:11:56ID:???やりたいことはUTF8で書かれた日本語の文章から、
> −-―・「」!'(),….『』´’~☆‐/?“”、!+。
> []:→〈〉&()←×‥♂〜#`℃@"‘*¨「」φ|【】; %
> =〔〕《》◇∞〓♯●\^◎°○★�U♭?〃?�\▲≪≫
などの記号類を全て取り除きたいのです。
EmEditorの正規表現では\Wでこれが実現できるのですが、
perlで\Wとすると・・・。
宜しくお願いします。
0162nobodyさん
05/02/14 17:22:57ID:SqkH/Xuzタグはとりあえず見ずに、srcとhrefの後ろの=から"か'をキャッチして対応する
"or'までを取得したいのですが。。。
言語はPHPです。
0163nobodyさん
05/02/14 21:10:11ID:???perl5.8.1以降ならtr///が使える。
スクリプトもUTF-8で書かれていると仮定。
(\r\nは、マッチ文字列に改行が含まれていて、
改行コードが削除されてしまうための対策。不要なら削る。)
use encoding qw(utf8);
tr{\r\n
−-―・「」!'(),….『』´’~☆‐/?“”、!+。
[]:→〈〉&()←×‥♂〜#`℃@"‘*¨「」φ|【】; %
=〔〕《》◇∞〓♯●\^◎°○★�U♭?〃?�\▲≪≫
}{\r\n}d;
0164nobodyさん
05/02/14 21:38:42ID:KmG+pbP2シンプルにあらわす方法はないですか?
0168nobodyさん
05/02/16 16:27:58ID:SLDSz7ZK1と3の2つだけをマッチさせたいのですが、
/^[1|3]/
とすると、1、3はもちろんマッチするのですが、
11も12も13も・・・マッチしてしまいます。
この場合、どう書いたらいいのですか?
0169nobodyさん
05/02/16 16:29:48ID:???0170nobodyさん
05/02/16 18:09:46ID:???すみません、ソース晒します。phpです。
for($i = 1; $i <= 100; $i++) {
if(preg_match("/^[1|10|25|45|60]$/", $i)) {
echo $i."<br>";
}
}
この場合1、10、25、45、60がマッチして出力されるように
したいのですが、実際出力されるのは1、2、3、4、5、6と
なってしまいます。これを思い通りにマッチさせるのは
どうしたらいいのでしょうか?
0171nobodyさん
05/02/16 18:43:47ID:???0172nobodyさん
05/02/16 22:23:02ID:???<dt><a name=9>9</a> :<font color=green><b>名称未設定</b></font> :04/11/16 21:50:08 ID:VtVZWEIG<dd> てすと<br><br>
<dt><a name=8>8</a> :<a href=mailto:sage><b>名称未設定</b></a> :04/11/16 17:48:11 ID:nBSRrYU6<dd> てすと<br><br>
↓
dat
名称未設定<><>4/11/16 21:50:08 ID:VtVZWEIG<>てすと<>
名称未設定<>sage<>1/16 17:48:11 ID:nBSRrYU6<>てすと<>
のようにしたいのですが、
m#<DT><A.*?>([0-9]+).+?<B>(?:<A HREF="mailto:(.+?)">)?(.*?)(?:</A>)?</B>.{11}(.*?)<DD>(.*)<BR><BR>#mi
この正規表現だと、どうしてもsage等のメール欄もマッチしてしまい、
名称未設定<>sage<>のようにdatに残りません。
(?:<A HREF="mailto:(.+?)">)?の部分は、A HREFが出現した時にだけマッチする
のだと思うのですが、その後の(.*?)が<font color=green>にマッチしている
部分なのでしょうか。
0173nobodyさん
05/02/16 22:43:33ID:???m#<DT><A.*?>([0-9]+).+?(?:<A HREF=mailto:(.+?)>)?<B>(.*?)</B>(?:</A>|</FONT>) :(.*?)<DD>(.*)<BR><BR>#mi
0174nobodyさん
05/02/17 02:06:18ID:???HTMLのコメントタグを引っ掛けるにはどうしたらよいでしょうか?
単に引っ掛けるだけならできたのですが、例えば
<html><body>
<div id=" test<!--test ">a</div>-->
</body>
<html>
こんなのを引っ掛けないようにしたいんです。
0175nobodyさん
05/02/17 02:44:37ID:???http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
0176nobodyさん
05/02/17 04:15:35ID:???0177174
05/02/17 11:15:34ID:???回答ありがとうございます。そこの正規表現である
tag_regex = '<!(?:--(?:(?!--).)*--(?:(?!--)[^>])*)*(?:>|$(?!\n)|--.*$)';
を利用したのですが、
"<!--------------------------->foo"
となっていると文字列全部を取得してしまいます。(fooの前まで引っ掛けて欲しい)
これがコメントとして間違ってることは理解しています。
しかし、こういう具合に間違ってるWebページは結構多いので、
これもコメントとして認識したいのですが
どうにかならんものでしょうか?
0178nobodyさん
05/02/17 11:34:14ID:???一回で全てしようとするから駄目なんだよ
0179nobodyさん
05/02/17 13:37:18ID:???これらに対応するのはキツイんじゃないかな
何回かに分けたとしても間違えてとったやつを弾くことは難しいわけで
0180nobodyさん
05/02/18 04:21:47ID:???0181nobodyさん
05/02/18 05:40:21ID:???0182nobodyさん
05/02/18 06:04:51ID:???Perlなら、>>147-148を利用して、
my $match = $str =~ m/($remark)|$sgml|$html/isg;
0184nobodyさん
05/02/18 12:08:09ID:4JcRNkuB0185nobodyさん
05/02/18 12:09:11ID:???0187nobodyさん
05/02/19 16:48:15ID:???0189nobodyさん
05/02/21 20:38:23ID:???RedirectMatch permanent (.*)\x20(.*) $1-$2
RedirectMatch permanent (.*)%20(.*) $1-$2
RedirectMatch permanent (.*)'%20'(.*) $1-$2
RedirectMatch permanent (.*)\x20(.*) $1_$2
RedirectMatch permanent "(.*) (.*)" $1-$2
全部だめ orz
0191nobodyさん
05/02/21 21:55:19ID:???いけました・・・
ありがとうございました
多分ブラウザのキャッシュか、.htacessに書く時点で間違えていたか、
どっちかだったと思います
0192nobodyさん
05/02/22 17:24:46ID:???1〜685の数字にマッチするように
6[0-8][0-5]|[1-5]\d\d|[1-9]\d|[1-9]
としてみたのですが、スマートというか
模範となるような書き方があったら教えてください
0193nobodyさん
05/02/22 18:33:44ID:???その正規表現が間違ってるのはともかくとして、
全部正規表現でやろうとせず、
文字列としての評価は [1-9]\d* くらいで検査しておいて、
あとは数値的に評価した方が良いと思われ。
0194nobodyさん
05/02/23 05:20:38ID:Vw9LlCLCID番号などは、半角数字というのもあって、簡単に取得できたのですが、
名前取得で手こずっています。
<td>名無しさん(17)<br><a href=show_friend.pl?id=774>
^^^^^^^^^^
を取得したいと思っています。
上記にマッチする正規表現例を教えていただけないでしょうか?
\<td\>(.*)さん\([0-9]+\)
これでは取得できていません。
0195nobodyさん
05/02/23 05:35:47ID:???rubyの文法を間違えていました。
ごめんなさいごめんなさい。。。
ちなみに上記の正規表現でOKでした。
0196nobodyさん
05/02/25 22:30:13ID:qCTUQzjg0197196
05/02/25 23:02:07ID:qCTUQzjgereg_replace( "/[^a-zA-Z0-9\s]/", "", $t )
何か勘違いしているでしょうか?
0198nobodyさん
05/02/26 01:29:40ID:EGev6g900199nobodyさん
05/02/26 01:31:43ID:EGev6g900201nobodyさん
05/02/26 06:37:59ID:???$t = ereg_replace("[^a-zA-Z0-9\s]", "", $t);
こういうこと?
それから、日本語扱うならmb関数にする。
0202nobodyさん
05/02/26 17:50:17ID:LErwwWXI大文字、小文字を区別無くマッチさせたいのですが、どうやればいいんでしょうか?
言語はPerlです。
$foo="[email protected]";
$bar="[email protected]";
このようなものが入っている場合、マッチさせたいのです。
0204nobodyさん
05/03/02 04:35:55ID:???"あいうえお「かきくけこ「さしすせそ「たちつてと」なにぬねの」はひふへほ」まみむめも」やゆよ「らりるれろ「「わをん"
↓こんな感じに
"あいうえお<em>かきくけこ<em>さしすせそ<em>たちつてと</em>なにぬねの</em>はひふへほ</em>まみむめも」やゆよ「らりるれろ「「わをん"
変換したいんですけど、どうすればいいんでしょう?
イメージ的には
/「[^「]*?」/
こういうことをしたいんだけど、[ ] の中はアスキーだけだし。
use encoding とかはナシな方向でひとつ。
0205204
05/03/02 04:49:22ID:???-------------------------
my ($s, $t) = (quotemeta '「', quotemeta '」');
$_ = "あいう〜";
s/($s)/\a$1/og;
while (s/ \a $s ([^\a]*?) $t /<em>$1<\/em>/ogx) { 1; }
-------------------------
とか 「 \a 」 で印つけてるけど、他にもいい方法あるかと思って。
0206nobodyさん
05/03/02 11:34:17ID:???私がやるとすればPerlメモ(ttp://www.din.or.jp/~ohzaki/perl.htm)にある
例を利用してあらかじめ
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
$char = qr{(?:$ascii|$twoBytes|$threeBytes)};
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
を用意しておいて、
1 while s{$eucpre(?:「((?:(?!「)$char)*?)」)$eucpost}{<em>$1</em>}o;
てな感じかな。キモは
[^」]を実現するのに、否定先読み+ASCIIまたはEUC1文字にマッチするパターンを使用
全体が1バイトずれてマッチしないように$eucpre,$eucpostを前後につけた
というあたりです。
0207nobodyさん
05/03/02 13:53:48ID:???タグの外にあるカタカナと『ー』の前後に半角スペースを入れたいのですが
(文字コードはEUC)
$t = preg_replace("/(?:^|(?<=>))([^<]*)((?:\xA5[\xA0-\xFF]|\xA1\xBC)+)/i","$1 $2",$t);
のようにすると、
例えば『七時のニュースです』という文字列の場合『ス』の前後にしか空白が入ってくれません。
どうにかして解決できないでしょうか……
0210nobodyさん
05/03/02 22:15:55ID:???指定部分だけを抜き出したいと思っています。
HTMLには<!-- BEGIN -->〜〜〜〜<!-- END -->というような
コメントが入っており、その中身だけを抽出したいと思っております。
まずfile関数で配列にすべてのHTMLを格納しimplideで結合します。
テスト用に以下のものを試しました。
$pattern = "/<!-- BEGIN -->(.*?)<!-- END -->/";
$ary_data[] = "<!-- BEGIN -->\n";
$ary_data[] = "あいうえお\n";
$ary_data[] = "<!-- END -->\n";
$str_data = implode("", $ary_data);
preg_match($pattern, $str_data, $matches);
echo $matches[0];
改行コードが入っているとうまく抽出してくれません。
.*?の部分を[.\s]*?に変えてみたのですが変化がありませんでした。
どのように変更を加えればよいのでしょうか?
0211207
05/03/02 22:24:58ID:???0212nobodyさん
05/03/03 10:12:04ID:???$pattern = "/<!-- BEGIN -->(.*?)<!-- END -->/s";
パターン修飾子 s をつけることで . が改行にもマッチするようになります。
0214nobodyさん
05/03/03 14:08:03ID:zkHMOcKeその文字列を別の文字列に置換するということをphpでやりたいのですが
$data = "aiu----hello----ncka";
$pattern = "/----(.*?)----/";
preg_match($pattern, $data, $out);
$data = preg_replace($pattern, "----goodbye----", $data, 1);
こうすると$out[1]にはhelloが入り、もとのデータ$dataの
----hello----が----goodbye----に置換されるというようにしているのですが、
同じ部分を検索しているのにもかかわらず
preg_matchとpreg_replaceを使っているので、もう少しいっぺんに同じ動作を
させることはできるでしょうか?
0215nobodyさん
05/03/04 20:58:51ID:gtJy+aSQ^(?:d+(?:.d*)?|.d+)$
と考えたけど、うまくいきません。
エロイ人、添削キボン
0217nobodyさん
05/03/05 05:18:05ID:???0218nobodyさん
05/03/05 08:15:13ID:8nW34nzC170
175.5
60
60.5
がOKで、
.6
15.15.52
なんてのがボツ
もちろん、数字と.以外がはいるとボツ
>>217
エラーになりますた
0219nobodyさん
05/03/05 08:36:43ID:???正規表現のスレでいうのもあれなんだが
数字として比較したほうがわかりやすいと思う
if ($height < 130 || $height > 200) print "Error";
0220nobodyさん
05/03/05 12:19:51ID:hbhM7+40$pattern = "/^[0-9]+?\.[0-9]+$|^[0-9]+$/s";
if (preg_match($pattern, $string)) {
echo "正常です";
} else {
echo "違います";
}
0221nobodyさん
05/03/05 12:22:32ID:???$pattern = "/^[\d]+?\.[\d]+$|^[\d]+$/";
if (preg_match($pattern, $string)) {
echo "正常です";
} else {
echo "違います";
}
0222nobodyさん
05/03/05 12:26:53ID:OYa1FD+rhttp://pochi-pochi.com/pages/index.php?refid=hopedkco
0223nobodyさん
05/03/05 13:35:01ID:???$string = "12.3.45";
$pattern = "/^\d+?\.\d+$|^\d+$/";
if (preg_match($pattern, $string)) {
echo "正常です";
} else {
echo "違います";
}
?>
0224nobodyさん
05/03/05 19:27:01ID:???0225nobodyさん
05/03/05 20:43:45ID:???0226偽崎 博基
05/03/05 21:42:08ID:???0228nobodyさん
05/03/07 05:11:36ID:DaphPIkIhttp://www.abc.ne.jp/abc/abc.htmゴッゴル
コメント
http://www.nurupo.ne.jp/null/def.htm
ホゲホゲ
ホゲホゲ
ゲゲボ
http://www.g00.ne.jp/gero/ghijkl.htmまんくるぽ
ぬるぽ
http://www.mahoo.ne.jp/abc/mnopqrstu.htm
----------------------------------------------------
↑の文章がテキストに記述されてるとして、
「正規表現で置換を行いURL以外を削除する」
若しくは
「URLだけを抜き出す」
にはどうすればいいですか?
K2Editor と bregexp.dll を使用しています。
0232nobodyさん
05/03/10 10:04:14ID:Oal+cA17います?
他にどこできいていいものやらわからないので・・・。
Tepaエディターの正規表現でヒットする文字列がヒットしないんですけど、
具体的には
...:..:...ID:........$
という検索文字列を文字なしで置き換え、2chのスレッド内発言の時間とIDを削除しようとしています。
今日初めて正規表現のことを知って、美しくない検索かもしれませんが・・・。
と書きつつも231さんのIDがID:???であることを知った。
初めて見ました。
よろしくお願いします。
補足
BREGEXP.DLLを導入して、Speeeeedから正規表現が扱える状態になっています。
0234nobodyさん
05/03/10 10:25:23ID:Oal+cA17おっしゃりたいのでしょうか?
勉強してからこいとおっしゃりたい?
0236nobodyさん
05/03/10 14:06:21ID:???Speeeeed のホームページのサポート掲示板を「行末」とかで検索してみたら、
改行の扱いがどうもいまいちみたいね。
...:..:...ID:........\r\n
ってなかんじでどうでしょ。
0237nobodyさん
05/03/10 23:52:18ID:???ありがとうございます。
それでいけました。
>>235
正規表現が使える他のエディタではうまくいくので、
Speeeed固有の問題だと考えたけれど、>>1のリンク先には
その回答がなかったので・・・。
スレよごしすいませんでした。
0238nobodyさん
05/03/13 23:43:38ID:d9JNVB9S---
$txt = "mae http://hoge.jp mannaka http://abc.jp ushiro";
preg_match("/(http:\/\/[\w;\/\?:\@&=\+\$,\-\.!^\*'\(\)%#]+)/", $txt, $matches);
foreach ($matches as $tmp) {
echo $tmp."\n";
}
---
とすると、
---
http://hoge.jp
http://hoge.jp
---
となってしまいます。
http://hoge.jpとhttp://abc.jpを抜き出すためにはどうしたらよいのでしょうか?
0239nobodyさん
05/03/14 00:19:26ID:???http://jp.php.net/manual/ja/function.preg-match-all.php
0241nobodyさん
05/03/18 12:51:02ID:nYSabF1Kメールを処理するCGIをPerlで作っているのですが、ヘッダ部の
Subject:xxxxxx
を抜き出す方法がわかりません。
メールをヘッダ部とbody部に分け
if ($m_header =~/Subject:\s*(.*)/i){
$m_subject = $1;
}
だと、件名が長いときは切り落とされてしまいます。
Subject: =?ISO-2022-JP?B?GyRCPzclMyE8JUohPDMrO08hIzBsSmJAaCRyGyhC?= ←ここではなく
=?ISO-2022-JP?B?GyRCO0UzXSQxJGs0azZIJCskaSEiN1AxRCROGyhC?=
=?ISO-2022-JP?B?GyRCS1w8QSRyJEQkKyRgGyhCIChCeSBORUMgMjAwNS8yLzIxKQ==?= ←ここまでマッチさせたい
ttp://www110.kir.jp/study/jissen/script2130.html
の「タイトルの抽出」部分にある/MIME/文字列の$`だと、相手のメーラーに
よってはIn-Reply-ToやReferencesやMessage-Idなども件名に入ってしまい
うまくありません・・・。
0242nobodyさん
05/03/18 14:01:29ID:uLSanIIA0243nobodyさん
05/03/18 14:40:54ID:???$m_header =~/^Subject: *(.+\x0D?\x0A(?: .+\x0D?\x0A)*)/im;
普通はモジュール使うけど。
use Mail::Header;
my $head = Mail::Header->new(\*STDIN);
print $head->get('Subject');
0244241
05/03/18 18:00:07ID:R05cZtNs>>243
ありがとうございましたっ!!
242でも243でもできました。感謝です。
>>243
Mailで始まるモジュール、1つも入ってないのです・・・
・・・
0247nobodyさん
05/03/19 01:20:39ID:???そこまでしなきゃわかんないアマちゃんなのかよ!!!
$m_header = "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\n =?ISO-2022-JP?B?GyRCJFsbKEI=?=\n";
$m_header = "Content-Type: text/plain\n Subject: foo\n bar\n";
0248nobodyさん
05/03/19 01:50:04ID:???0249nobodyさん
05/03/19 03:53:17ID:RErqV7fDすべての文字列の中から上の中の*********だけを取り出すことはできますか?
*は任意の文字列で、文字数も自由です。
0252nobodyさん
05/03/19 14:37:12ID:frwLr80o0253nobodyさん
05/03/19 16:05:41ID:???0254nobodyさん
05/03/19 18:00:42ID:???0255nobodyさん
05/03/19 18:15:41ID:???0256nobodyさん
05/03/19 19:58:20ID:???0257nobodyさん
05/03/19 22:11:06ID:???0258nobodyさん
2005/03/21(月) 12:03:14ID:???いろんな形の <br><br/><BR /> などなどを
<br /> に統一したい。どうしたらいいですか!?
<[Bb][Rr]*(\\)>
0259T女の竹田
2005/03/21(月) 12:19:14ID:???でどう?
<br clear="left">とかも入れるなら
s{<br[^>]*>}"<br />"sgi
かな。
0260T女の竹田
2005/03/21(月) 12:21:11ID:???s{<br( ?/)?>}'<br />'sgi
のほうがいいかな
0261nobodyさん
2005/03/21(月) 13:54:11ID:???↑ これは一体何をしたかったのだろう・・・。
んじゃ
s!<br(?>[^<>]*)>!<br />!igs;
ところで、 i g s m x e o とかのオプションって、書く順番とか決めてる?
どの順番がわかりやすいんだろうなー。
0263T女の竹田
2005/03/21(月) 14:39:41ID:???順番はsgieの順だな、他は使ったことがほとんどない
0264nobodyさん
2005/03/26(土) 01:18:00ID:vkj2cQCrhtmlのaタグに囲まれた文字、それとa閉じタグ以降の文字、を抽出したいのですが
例:<a href="http://hogehoge.com">aiueo</a>&nbsp;|
抽出後:aiueo&nbsp;|
のような感じです。
で、正規表現として「s/<a.*?>(.*?)</a>(.*?)/i」と書いたのですが、
aタグに囲まれたのは$1に入りましたが、a閉じタグ以降の文字が$2に入ってないんです。
どう書いたらよいのでしょうか?
0265nobodyさん
2005/03/26(土) 01:36:05ID:???それ、
s{<a.*?>(.*?)<}{a>(.*?)}i
になってるよ。sはいらない。
m!<a.*?>(.*?)</a>(.*?)!i
とでもしたら?
0266nobodyさん
2005/03/26(土) 09:11:49ID:???> で、正規表現として「s/<a.*?>(.*?)</a>(.*?)/i」と書いたのですが、
/をエスケープして「s/<a.*?>(.*?)<\/a>(.*?)//i」と書いてください。
0268nobodyさん
2005/03/26(土) 16:07:09ID:???0269nobodyさん
2005/03/26(土) 16:14:16ID:???0271268
2005/03/26(土) 16:16:30ID:???掲示板にAAの大量投稿荒らしが発生してしまって、
正規表現である程度は弾けないか、、と思いまして・・・
0272未承諾広告※ ◆TWARamEjuA
2005/03/26(土) 19:04:15ID:???このあたりはRock54でも難しかったりしますけれども(苦笑)
0273nobodyさん
2005/03/26(土) 19:18:46ID:???0275nobodyさん
2005/03/26(土) 20:19:03ID:???0276nobodyさん
2005/03/29(火) 10:39:16ID:???0277nobodyさん
2005/03/29(火) 18:07:37ID:???0278nobodyさん
2005/03/30(水) 01:42:50ID:???ご教授下さい。言語はPHPです。
下記参照
$strのヒアドキュメントから2パターンマッチしてます。
なぜ、"<!-- ▲パターンマッチのサンプル-->"これが
マッチしないのかがわからないのです。
====== source =============
$str = <<<_EOT_
<!-- ▼パターンマッチのサンプル -->
<p>パターンマッチ</p>
<!-- ▲パターンマッチのサンプル-->
_EOT_;
preg_match("/^<!--([^<>]+)-->/", $str, $match);
print_r($match);
====== source =============
====== 結果 =============
Array
(
[0] => <!-- ▼パターンマッチのサンプル -->
[1] => ▼パターンマッチのサンプル
)
============================
0279nobodyさん
2005/03/30(水) 04:18:21ID:???▼ で一回パターンマッチした時点でおしまい。
パターンマッチを複数回繰り返したいなら preg_match_all とかを使う。
0281nobodyさん
2005/03/30(水) 11:29:42ID:???環境はVBScriptで、VBScript.Regexpを使用しています。
元の文字列は
A 1
B 2
3
C 4
D 5
又は
B 1
D 2
3
C 4
A 5
この様な形です、そのときにBの列の値(上の例だと2\n 3、下の例だと1)を取得したいのですが、うまく取れません。
現在の正規表現は
B *((.*\n)*) *(A|C|D)
この形です、現在とれる値は上の例ですと(2\n 3\nC 4)下の例ですと(1\nD 2\n 3\nC 4)
この様になっています、どのようにすればよいでしょうか?
0282nobodyさん
2005/03/30(水) 12:29:28ID:???自分でsourceを弄くっているうちにmオプション取って書き込んでしまいました。
mオプション(単一行化)をつけ"
<!-- ターンマッチのサンプル-->"になぜマッチしないのかがわかりません。
<!-- から始まってるのに・・・
0284nobodyさん
2005/03/30(水) 16:28:08ID:FkBnaI5T20020301というような年月日名のファイルをプログラムで検索させる時
20020330以降というような判断条件を正規表現で表現できるでしょうか。
(もし20020350というファイルがあった場合条件合致としない)
プログラムですれば出来るのですが、条件は自由に編集できるようテキスト
で保存したいと考えています。
ちなみに私の正規表現知識は”\.^$[]*+?|()”くらいしかないです。
正規表現で出来るかが知りたいので使わないというのは無しでお願いします。
0285nobodyさん
2005/03/30(水) 16:46:46ID:???”だけ”だとできないんじゃね?
0286nobodyさん
2005/03/30(水) 16:56:58ID:???20020350 みたいな validation check までするとなると、
正規表現だけでやるのは無理と思った方が賢明と思われ。
0289nobodyさん
2005/03/30(水) 19:30:05ID:???0290nobodyさん
2005/03/30(水) 21:54:20ID:???0291nobodyさん
2005/03/30(水) 23:14:41ID:oXQqC/Dj「任意の範囲におさまる数」を検出することは出来るでしょうか?
たとえば、123〜4567の間の整数ならヒットする、という風にしたいのです。
0292nobodyさん
2005/03/30(水) 23:26:41ID:???0293nobodyさん
2005/03/30(水) 23:43:55ID:???$number =~ s/^(\d+)$/$ok = ($1 >= 123 and $1 <= 4567) ? 1 : 0/e;
printf qq|%s\n|, $ok ? 'OK': 'NG';
0294nobodyさん
2005/03/31(木) 00:01:39ID:???@result = grep { 123 <= $_ and $_ <= 4567 } $str =~ m/(\d+)/g;
$, = ', '; print @result;
0296nobodyさん
2005/03/31(木) 00:05:59ID:???0298nobodyさん
2005/03/31(木) 12:15:37ID:???1: を white space
2:<br> を 改行
3:あと strip_tags()
したいです。教えて下さい。
0299nobodyさん
2005/03/31(木) 12:28:22ID:???$txt = mb_ereg_replace(" ", "white space", $txt);
$txt = mb_ereg_replace("<br>", "改行", $txt);
$txt = mb_ereg_replace("あと", "strip_tags()", $txt);
0303nobodyさん
2005/03/31(木) 12:51:28ID:???$orig = mb_ereg_replace("<[Bb][Rr][^>]*>", "\n", $dest);
$orig = mb_ereg_replace("&[Nn][Bb][Ss][Pp];", "", $dest);
$orig = mb_ereg_replace("<[^>]*>", "", $dest);
0305nobodyさん
2005/04/04(月) 22:21:36ID:???『連続する文字列"_正規表現道場_"を除く、全角文字を含むすべての文字列』はどのように表現すればいいですか?
0306nobodyさん
2005/04/05(火) 21:17:54ID:???質問1
正規表現を使って、エディタの検索置換を利用してこれを一発で直すのは不可能でしょうか?
質問2
perlとか使えば可能でしょうか?
0307nobodyさん
2005/04/05(火) 23:19:41ID:???別に読めないわけでもないしほっとく。
0308nobodyさん
2005/04/07(木) 23:03:21ID:???0309nobodyさん
2005/04/08(金) 00:12:00ID:???そんな質問で答えられるかよ!
ソース(元の文書)のサンプルくらいないとどうにもならんよ。
「一二三五十六三郎一郎」 どれが名前かわかるか?
答え→全て名前w
0310nobodyさん
2005/04/08(金) 09:57:45ID:???0311nobodyさん
2005/04/08(金) 10:38:14ID:???0313nobodyさん
2005/04/09(土) 17:39:30ID:???電話番号だけは抜きたいと思っています。
基本的にアメリカ人が多いので、XXX.XXX.XXXX な文字並びだけど、
日本みたいに ー (ハイフン)で区切る、みたいな約束事ないし、すごい困ってます。
どうしたらいいでしょう?なにかヒントを下さい。
0314313
2005/04/09(土) 17:40:26ID:???0315nobodyさん
2005/04/10(日) 11:42:30ID:???/[\d\.\-]{4,15}/
0316nobodyさん
2005/04/13(水) 01:12:27ID:5d8FOn3zHTMLにおいて下のようなものがあるとします。
<html><head>...略...
<div>
<!--A-->
<p>Aです</p>
<!--/A-->
<!--B-->
<p>Bです</p>
<!--/B-->
</div>
...略...</html>
これの\n、\r、\tを取り除いた後、
preg_match_all("/<!--([A-Z]*?)-->.*?<!--\/\\1-->/", $pattern, $file);
で、マッチさせると、
<!--A-->がひとつだけのときには成功するのですが、
<!--B-->が加わるとブラウザのページが開かなくなります。
原因をご存知の方はお教えください。
0317nobodyさん
2005/04/15(金) 12:12:06ID:???calendarクラスで最初にコールされているメソッドがget???の物を調べたく、
perlの正規表現で、
(\w+)\s*=\s*Calendar\.getInstance.*?(!?\1)\.get
を指定しましたがうまくいきません。
下の個所ではヒットしないことを望んでいますが、1〜3行目でヒットします。
1 Calendar cal = Calendar.getInstance();
2 cal.setLenient(false);
3 cal.getTime();
.*?(!?\1)\.get は calendarインスタンスが最初に呼ばれている個所で、メソッドがgetで始まるを期待しています。
0318質問
2005/04/15(金) 19:01:05ID:jvrJ4EBi<郡部:吉見>
<市部:秩父>
<市部:川越>
↓上のデータを
<市部:さいたま市>
<郡部:吉見>
<市部:秩父市>
<市部:川越市>
のように先頭から「<市部:●●>」とマッチングするものを、
「<市部:●●市>」に置き換えるにはどうしたらよいでしょうか
(ただし、「●●」は流動的なものとする)
$data =~ s/<[市部:]*>/<市部:$_市>/;
上のようにやったところ、$_に何も値が入りません。
0319nobodyさん
2005/04/15(金) 19:05:08ID:???0320nobodyさん
2005/04/15(金) 19:13:10ID:???0321質問
2005/04/15(金) 19:18:57ID:jvrJ4EBiありがとうございました!
0322muro p5172-ipad05okidate.aomori.ocn.ne.jp/
2005/04/15(金) 20:01:28ID:???ぇ し の ァ ハ
け と ぉ ァ
うはっwww夢がひろがりんぐwwwwww
0323nobodyさん
2005/04/15(金) 20:49:10ID:???0324nobodyさん
2005/04/16(土) 00:12:52ID:???0325nobodyさん
2005/04/20(水) 16:00:48ID:ns2jNcNy<A HREF='http://www.hogehoge.ne.jp/~nakama/'>
<A HREF=http://www.hoge.ne.jp/~nakama/>
<A HREF=http://www.hoge.ne.jp/~nakama/ TARGET=_blank>
上からURLだけを抜き出したいのですがいまいちわかりません。
何となく正規表現はわかっているのですが。
解決になるような事でもなんでもいいので教えてください。よろしくお願いします。
0326nobodyさん
2005/04/20(水) 17:11:27ID:???なんとなく抜き出せるだろうから
なんとなく聞く必要がないんじゃないかと思う
0327nobodyさん
2005/04/20(水) 18:20:03ID:???0328nobodyさん
2005/04/20(水) 18:30:19ID:???0329nobodyさん
2005/04/20(水) 18:46:23ID:???0330nobodyさん
2005/04/20(水) 20:05:32ID:y0ltMBju<select name="a">
<option value="A" selected>■</option>
<option value="B">★</option>
<option value="C">▲</option>
</select>
<select name="b">
<option value="A">■</option>
<option value="B">★</option>
<option value="C" selected>▲</option>
</select>
’;
となっている場合、
『selected』が付いているoptionにマッチさせ、
そのvalue値【A】を$hoge1へ代入するしたいのですが、
正規表現はどのようになるのでしょうか?
$hoge =~ /value="?([^"]+)"? selected/g
$hoge1 = $1;
$hoge2 = $2;
↑これでは、ダメでした。
御教授 お願い致しますm( __ __ )m
0331nobodyさん
2005/04/20(水) 21:26:49ID:???その正規表現でもAとCを取り出せるんだけどね。
0332nobodyさん
2005/04/21(木) 00:11:41ID:???@array = $str =~ /<option\s+(?:\S+\s+)*?(?:value\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)).*?selected|selected\s+(?:\S+\s+)*?value\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)))\s*(?:\S+\s+)*?>/g;
$hoge1 = join"",splice @array,0,6;
$hoge2 = join"",splice @array,0,6;
0333nobodyさん
2005/04/21(木) 00:17:28ID:???@array = $str =~ /<option value="([^"]+)" selected>/g;
$hoge1 = shift @array;
$hoge2 = shift @array;
0334nobodyさん
2005/04/21(木) 00:53:08ID:???@array = $html =~ /<a\s+.*?href\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)).*?>/gi;
push @url, join"", splice @array,0,3 while @array;
0335nobodyさん
2005/04/21(木) 09:53:22ID:L6TjsDSV以下のように自分で決めたブロック要素的なコメントタグを挟んでいます。
---------------------------
<!--mytag-->
aaa
<!--mytag-->
bbb
<!--/mytag-->
ccc
<!--/mytag-->
ddd
<!--mytag-->
eee
<!--/mytag-->
----------------------------
この中で、内側にそれ以上自分で決めた同一コメントタグが
入っていない部分、つまり、
<!--mytag-->
bbb
<!--/mytag-->
と、
<!--mytag-->
eee
<!--/mytag-->
の部分のみ取り出したいのですが、どのような式を書けば良いでしょうか。
0336335
2005/04/21(木) 11:55:55ID:L6TjsDSV$s = "<¥!¥-¥-mytag¥-¥->";
$e = "<¥!¥-¥-¥/mytag¥-¥->";
$rgexp = "/$s(?:(?!($s|$e)).)+$e/s";
で判別できました。
0337nobodyさん
2005/04/21(木) 13:58:44ID:???掲示板に書き込まれた本文の行末に改行タグがある場合、
それを除去するという処理を加えたいと思っています。
$textが"test<BR><BR><BR><BR><BR><BR><BR><BR><BR>"などのように、
文末に<BR>がある限り、それを取り除く処理にしたいと思います。
この場合ですと、"test"という文字列だけにしたいと思っています。
$textが"test<BR><BR><BR><BR>test2<BR><BR><BR><BR><BR>"であれば、
"test<BR><BR><BR><BR>test2"にしたいと思っています。
while ($text =~ /<BR>$/) {
$text =~ s/<BR>$//g;
}
この記述で動かないのですが、どこが原因なのでしょうか。
0340330
2005/04/22(金) 00:10:20ID:???アドバイスありがとうございます。
>>333様
御教授ありがとうございます。
早速試してみましたが、うまく代入されませんでした。。。
$_ = $hoge;
my @hoge = /value="(.+)" selected/g;
$hoge1 = $hoge[0];
・
・
・
・
これで、自己解決いたしました。
0341nobodyさん
2005/04/24(日) 04:15:14ID:???>>333がダメってのは、「$str」 を 「$hoge」 にしてないだけだと思うがw
自分的には↓で済む気がする。
my ($hoge1, $hoge2) = $hoge =~ /<option\s*?value="([^">]*?)"\s*?selected>/g;
あと $hoge は、ヒアドキュメントにしる。
0342nobodyさん
2005/04/26(火) 15:49:33ID:???「先頭から最後まで<br>と\s以外の文字が1つもない」
・・・
0344nobodyさん
2005/04/26(火) 22:35:00ID:???iオプション付けてね
0345nobodyさん
2005/05/06(金) 00:14:31ID:???0346nobodyさん
2005/05/10(火) 20:33:44ID:???マッチさせたいんですけど、うまく動いてくれません。
どうすればいいでしょうか。
$txt = "トマトきゅうりピーマンなすすいか";
if(mb_eregi("[きゅうりすいか],$txt)){echo "合致";}
0347nobodyさん
2005/05/10(火) 20:45:59ID:P1c+fxiDうぇwwwwwwwwwwwwwwwおkwwwwww
wwwwwwwwwwwwっうぇ
wwwwwおkwww
wwwwwwwwwwwwwwwwwwwwwwwww
0349nobodyさん
2005/05/10(火) 21:56:28ID:???こうですか?
0350nobodyさん
2005/05/10(火) 22:04:57ID:???0351nobodyさん
2005/05/10(火) 22:14:43ID:???師匠これでもだめです。
ヒントください
0352nobodyさん
2005/05/10(火) 22:14:42ID:???http://www.din.or.jp/%7Eohzaki/regex.htm#And
0353nobodyさん
2005/05/10(火) 22:33:57ID:???mb_eregi("(?=.*きゅうり)(?=.*すいか)",$txt)
これでできました。
0354nobodyさん
2005/05/11(水) 14:06:16ID:8aMwQX6hについてなのでここでお願いしますm(_ _)m
CSV形式のファイルをwordに取り込んだときに、CSV特有の文字列にはダブルクォート、その中のダブルクォートにも
ダブルクォートの部分がそのまま残ってしまって困ってるので、wordの置換機能で削除しようと思ってます。
単純にダブルクォートだけなら
検索:"(*)"
置換:\1
で、できますがこれだと
"19""1238","a9a0","0198"
などでしくじってしまいます。
どういう式にすればいいでしょうか?
Perlの知識はありますので、回答はwordでの式でなくてもPerlでの式でも大丈夫です。
宜しくお願いしますm(_ _)m
0355354
2005/05/11(水) 14:14:27ID:8aMwQX6hわかりませんでした・・・・orz
置換演算子でヒットしなかったのはなんでだろ・・・・
0356nobodyさん
2005/05/11(水) 18:18:19ID:???ワードってPerl形式の正規表現使えたっけ?
それにPerlの知識があるなら、CSVをPerlでいじってからワードに取り込めばいいだけじゃ?
ついでにいえば、Excelで取り込めば、適切なデータになるじゃん。
それをワードに貼り付けるなり埋め込むなりすればいいんじゃ?
なんというか、道具があるのに変に知識だけ持ってるから
逆に面倒にしてるだけだし・・・
0357354
2005/05/11(水) 20:09:41ID:8aMwQX6hwordの置換はperlとはちょっと違いますけど、考え方は同じようなものなので。
データはワードで使いたいんです。
Excelで取り込むと適切なデータになりますが、それをwordにコピペするとちょっと違う
ことになってしまうんです。
wordで普通に「挿入」→「表」で作る表とは違う、オブジェクトとしての表になってしまって
後からいじったりできないんです。
Perlでいじってからというのは確かに、Text::CSV_XS使ってやればできますが、
毎度一旦Perlを通すのもあれですし、仕事場ですので毎度同じPCを使えるわけでは
ないのです。wordなんかの基本ソフトはどのPCにでも入ってますが。
できればwordだけでやりたいので、wordの置換で、と思ったのですが。
CSVのクォート削除正規表現って簡単そうで、結構難しいんですかね?
私が未熟だからだけかと思ったら、このスレの方でもパッはでてこないんですね。
でも、もしもわかるかたいましたらお願いします。1日1回は見に来ますので。
0358nobodyさん
2005/05/11(水) 20:25:22ID:???>wordで普通に「挿入」→「表」で作る表とは違う、オブジェクトとしての表になってしまって
>後からいじったりできないんです。
悪いことは言わない、MS WORDの入門書なり勉強やり直した方が良いよ。
Perl弄ってるとか置換作業とか変な知識とか作業要らない。
お前さんが言ってる事は、普通に出来る。
聞いてると、ただWORDを使いこなせない工場とかのおじちゃんおばちゃんレベル。
0359nobodyさん
2005/05/11(水) 21:16:53ID:???ハイライト表示を実現したいと思っています。
HTML ソース内のある単語を置換するときに
タグ内にその単語が含まれる場合は無視する
という表現はどのように書けばよいでしょうか。
言語は Perl です。
0360nobodyさん
2005/05/11(水) 21:25:19ID:a0NETEmds/"((?:[^"]|"")*)"/$1/g
s/""/"/g
の2回にわけるのが楽だと思われる。
0361nobodyさん
2005/05/11(水) 21:28:57ID:???でもって、そのセルの部分をドラッグドラッグして全部選択して、Ctrl+Cでコピーして
ワードでCtrl+Vで貼り付けしたら、普通にワードで表作った形式になったんだけど・・・
やっぱり、MS Officeの知識が無いって事でFA?
0362359
2005/05/11(水) 21:32:07ID:???$output =~ s#(?<=>)([^<]+)?\b($regexp)\b#$1<B style="color:black;background-color:\#ffff66">$2</b>#gis;
でできました。
0363nobodyさん
2005/05/11(水) 21:39:20ID:a0NETEmd正規表現だけでなんとかしようと考えないほうがいいと思うよ。
オレならこんな感じにするかねぇ。
$s = <<HTML;
<html>
<a href="foo.html">foo</a>
</html>
HTML
$s = ">$s<";
$s =~ s/>([^<]*)</$_ = $1; s|foo|baa|g; ">$_<"/ge;
$s = substr($s, 1, -1);
print $s;
0364354
2005/05/12(木) 17:56:56ID:mNlaSBNN普通にできるというのは、エクセルからのコピペや、ワードでの置換作業なしに
既存のword文書にCSVをworr形式の表化して取り込めるということでしょうか?
ヘルプでは見つけられませんでしたが、もしかしたら私のword2000ではできないのかな。
何年版のwordでしょうか?
>>361
あれ、できましたね;
XLSの取り込みと勘違いしたのかもしれません。
0365354
2005/05/12(木) 17:58:39ID:mNlaSBNNありがとうございます!
一旦外枠だけはずしてやるんですね^^
さすがですm(_ _)m
0366nobodyさん
2005/05/12(木) 18:04:52ID:???俺もやってみた。
拡張子CSVはExcelと関連付けられているので、CSVファイルをダブルクリックして開く。
CSVは正常な形に各セルに表示されているのを確認。
先に、Excelで開いたCSVのデータを格子状に罫線を引き、
ドラッグして貼り付けたい範囲を選択してCtrl+Cでクリップボードにコピー。
その後、Wordを新規に開き、そこへ、Ctrl+Vで貼り付けてみた。
普通にWordで表を作った見たいな形式に張り付いた。
使用したのはMS Office2000。
0367820
2005/05/13(金) 16:57:34ID:JEsyMCCs「httpで始まって--で終わる文字列」を正規表現で表現すると
http*-- でいいだろうと思って検索かけたところひっかかりません。
しょうがないので、 http.-- に表現を変えてみたのですが、これもヒットせず。
どなたか、こうやって書けばいいんだよと教えていただけると助かります。
0368nobodyさん
2005/05/13(金) 17:39:23ID:???だろうなぁ。
0369367
2005/05/13(金) 17:54:22ID:JEsyMCCs回答ありがとうございます。うまくいきました。
0370nobodyさん
2005/05/14(土) 16:27:37ID:???$string = 'あ表示テスト';
↑↓この部分が絵文字です
$s1 = mb_ereg_replace('([--])',
bin2hex("\\0"), $string);
こうすると$s1が あ表示テスト5c305c305c305c305c305c305c30 になってしまいます
ttp://www.nttdocomo.co.jp/p_s/imode/make/emoji/index.html ここのSJIS16進数にしたいのですが、どこがおかしいですか?
0371nobodyさん
2005/05/14(土) 16:55:30ID:???正規表現を使わず$stringに絵文字に入れを$string全体をbin2hexするとうまくできました
0372nobodyさん
2005/05/15(日) 16:05:51ID:???どうすればよいでしょうか?PHPです。
0374nobodyさん
2005/05/17(火) 13:35:15ID:9ytTXCmSつまりaaaaaaとか55555555とか ZZZZZとか。入力値に対してチェックを
かけたいのでどの文字かは入力されるまで分かりません。
PHPでかくと ereg('^([a-zA-Z0-9]*)$', $str)
みたいなスカっとおさまる書き方はないのでしょうか?
配列に文字を入れてループで回してチェックするしかないのでしょうか?
0375nobodyさん
2005/05/17(火) 14:44:14ID:???PCRE が使えるなら preg_match('/^([a-zA-Z0-9])\1+$/', $str) でしょうか。
どうも ereg() ではパターン内での後方参照が使えないっぽいんですが、
そういうものなのでしょうかね?
man 7 re_format 見る限りは POSIX 1003.2 の拡張正規表現でも使えそうなんですが。
0376nobodyさん
2005/05/17(火) 15:18:00ID:9ytTXCmSためしてみたところうまく機能しました!
有り難うございます!
やっぱereg()では後方参照つかえないんですかねぇ
0377370
2005/05/17(火) 15:25:00ID:???$test = 'あん'; //機種依存のsjis文字入り(同じ文字はありません)
$test =~ s/\G((?:[\x80-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)([\xF8\xF9][\x40-\x7E\x80-\xFC
])/$1/eog;
これはPerlスクリプトなんですが、これをPHPに移行したいと思います。
eogを除いてpreg_replaceすると>>370のように何故か5c30になってしまいます。
$test1 = mb_ereg_replace("([\xF8\xF9][\x40-\x7E\x80-\xFC])","\\1" , $test);
これはWarning mbregex compile err: mismatch multibyte code length in char-class range in となってしまいます
どこがおかしいのですか??
0378nobodyさん
2005/05/17(火) 15:44:02ID:???多分、ダブルクオートの中でバックスラッシュを使っているので、
正規表現エンジンに渡る前にバックスラッシュが展開されているのではないかと。
"\\xF8" みたいにするか '\xF8' みたいにシングルクオートにすると良いかと。
0379nobodyさん
2005/05/17(火) 19:27:46ID:???ありがとうございます
シングルクオートに変更したところ、そのエラーは出なくなりましたが、次は
mbregex compile err: too short multibyte code string in
と出るようになってしまいました
何が短いのですか?
0380nobodyさん
2005/05/18(水) 10:51:05ID:???正規表現スレなのでスレ違いなのですが自分なら
<?php
$emoji = pack("n*", 0xF89F, 0xF8A0, 0xF8A1);
$test = "絵文字test1".$emoji."test2";
$count = mb_strlen($test, "sjis");
for ($i = 0; $i < $count; $i++) {
$char = mb_substr($test, $i, 1, "sjis");
$char_hex[1] = 0;
if (strlen($char) == 2) $char_hex = unpack("n", $char);
if ($char_hex[1] > 0xF89E and $char_hex[1] < 0xF9FD) echo " <b>".bin2hex($char)."</b> ";
else echo $char;
}
?>
こうする。
0381nobodyさん
2005/05/18(水) 13:05:20ID:JNoGnyuI0382nobodyさん
2005/05/18(水) 17:17:50ID:???> http://www.din.or.jp/~ohzaki/perl.htm
> > HTMLタグの正規表現
> > $comment_tag_regex =
> > '<!(?:--[^-]*-(?:[^-]+-)*?-(?:[^>-]*(?:-[^>-]+)*?)??)*(?:>|$(?!\n)|--.*$)';
ってあるんだけど、これ通すと
my $str = '<!--- abcde --->'; とか
my $str = '<!-- \n var i=0; i--; document.write(i); \n // -->'; とか
全然うまくとれないんだけど、どう改造すればいい?
(?:[^>-]*(?:-[^>-]+)*?)??
↓
(?:[^>-]*(?:-[^>-]*)*)??
こうすると ↑↑ のはとってくれるけど、今度は
my $str = '<!-- comment -- cdata --> comment -->';
これが最後までとってくれなくなって困る orz
0383382
2005/05/18(水) 17:30:24ID:???× my $str = '<!-- comment -- cdata --> comment -->';
○ my $str = '<!-- comment -- cdata -- > quote_comment -->';
こんなで。
0384382
2005/05/18(水) 17:57:38ID:???それだったら /<!--.*?-->/ で事足りるのかw
スレ汚しスマヌ
0385nobodyさん
2005/06/02(木) 19:31:18ID:???Perlで試したところ
(?=.*AAA)(?!.*BBB)
でいける感じなのですが、
開発に使用しているのはUNIXのC言語です。
(?=や(?! を使わないで、これと同じことを記述できませんでしょうか。
0386nobodyさん
2005/06/02(木) 20:12:51ID:???0387nobodyさん
2005/06/02(木) 20:38:20ID:???「UNIXのC言語」といってもいろんな正規表現ライブラリがあるわけですが・・・
# ちょうどプログラム板の正規表現スレでそんな話題が。
POSIX regex (re_format(7)) だと簡単には書けそうにないので
>>386 みたく二回正規表現マッチさせるか、
(?= や (?! をサポートした正規表現ライブラリを使うのが良いのでは?
0388nobodyさん
2005/06/03(金) 17:12:04ID:kgnGijhBK2Editorというエディターを使用して、ある文章の中にある
「$英数字」という部分を検索したいのですが、
どのように正規表現を記述していいのか分かりません。
$英数字の前後には半角スペースが入っており、それに続いてまた記述があるので、
半角スペース前後まで検索したいと思っています。
例えば、
test $kensaku test
という個所があるとすると、$kensakuのみ検索対象にしたいのです。
K2Editorのヘルプを見る限り、$を使用するためのエスケープが\eと書いていました。
とすると、\e$[a-zA-Z_]+
と思ったのですがうまくいきませんでした。
ご教授下さい。
0391nobodyさん
2005/06/03(金) 18:59:45ID:???0394nobodyさん
2005/06/05(日) 13:57:15ID:OswuRoJX・使えるのは半角英数字アンダーバーのみ
・最初の文字は英字のみ
宜しくお願いします
0395nobodyさん
2005/06/05(日) 17:29:54ID:???ってのはだめ?
0396nobodyさん
NGNG文字数制限はない? 1文字以上ならOKの例で書いた
0397nobodyさん
2005/06/07(火) 20:45:12ID:???>>396
両方無理でした
普通にアンダーバー最初に書いても通っちゃいました
もしかして
if($FORM{'id'} =~ /^[a-zA-Z]\w+/);
じゃなくて
unless($FORM{'id'} =~ /^[a-zA-Z]\w+/);
みたいにしないとダメ?
0399nobodyさん
2005/06/09(木) 19:55:53ID:???0400nobodyさん
2005/06/09(木) 20:52:22ID:???0401nobodyさん
2005/06/09(木) 20:53:51ID:???0402nobodyさん
2005/06/09(木) 21:31:28ID:???すいません、もうしません…
0403nobodyさん
2005/06/10(金) 09:18:36ID:???0404nobodyさん
2005/06/10(金) 21:49:19ID:???0405nobodyさん
2005/06/11(土) 18:52:57ID:yQRzdV10スクリプトを使っていますが
$url =~ m!(http:)?(//)?([^:/]*)?(:([0-9]+)?)?(/.*)?!;
if ($3) {$host = $3;}
if ($5) {$port = $5;}
if ($6) {$path = $6;}
$path =~ s/#(.)*$//;
http://User:Password@…というBasic認証のURLでユーザー名とパスワードを
抽出するためにはどう改造したらよいですか?
0407405
2005/06/11(土) 21:12:07ID:yQRzdV10昔、どこかのサイトに掲載されてたのをコピペで使ってます。
改造でなく、書き直しして頂いても、ありがたいです。
0408nobodyさん
2005/06/11(土) 21:20:56ID:???0409nobodyさん
2005/06/12(日) 06:55:46ID:???0410nobodyさん
2005/06/13(月) 09:18:09ID:???0412nobodyさん
2005/06/18(土) 01:50:56ID:ioO/WA9Kperlで書かれたソースをphpに移行しようと試みています。
以下のperlのソースをphpで書くとどのようになりますでしょうか。
$data =~ s/"/"/g;
一応、
preg_replace("s/"/"/g", $data);
かなと思ったのですが、マニュアルを読んでみると、
phpの正規表現には修飾子「g」は無い、とあります。
他の関数を使う、関数をいくつか組み合わせるなど、
違う表現の仕方が必要になってくるのでしょうか。
お力添え宜しくお願いします。
0413nobodyさん
2005/06/18(土) 04:07:16ID:???preg_replaceはグローバルマッチだお!
preg_replace('/"/','"e;',$data);
0414nobodyさん
2005/06/18(土) 04:11:00ID:???$data = preg_replace('/"/','"',$data);
0415nobodyさん
2005/06/18(土) 08:51:00ID:7Fs175F40416nobodyさん
2005/06/18(土) 08:57:03ID:ioO/WA9K<$data = preg_replace('/"/','"',$data);
ご返答ありがとうございます。
グローバルマッチでしたか、申し訳ありません、勉強不足でした。
マニュアルを確認してみたところ、確かにそのような記述がありますね。
「limitが 省略されるか -1 の場合、マッチするものは全て置換されます。
」
>mixed preg_replace ( mixed pattern, mixed replacement,
>mixed subject [, int limit])
>subjectに関して patternを用いて検索を行い、 replacementに置換します。
>limitを指定した場合、limit 回のマッチまで置換が行なわれます。
>limitが 省略されるか -1 の場合、マッチするものは全て置換されます。
ありがとうございました!
0418nobodyさん
2005/06/20(月) 17:29:30ID:???6・19人権擁護法案に反対する国民集会の音声ファイル(各20-40MB)
http://www.powup.jp/jinken/20050619/1_hiranuma_furukawa.mp3
http://www.powup.jp/jinken/20050619/2_hirata.mp3
http://www.powup.jp/jinken/20050619/3_otsukotsu.mp3
http://www.powup.jp/jinken/20050619/4_chihougiinn.mp3
3番目は特におもしろい
0419nobodyさん
2005/06/22(水) 15:46:50ID:e2RB9R1Aエラーを表示させるために[:punct:]を使ったところ
「与」などの一部の文字が想定外のマッチをしてしまうのですが
どうやって回避すれば良いのでしょうか…
こんな感じで書いています。
if (preg_match("/[[:punct:]]/", $_GET['word'])) {
echo "記号が含まれています。";
exit;
}
0422419
2005/06/22(水) 16:32:12ID:e2RB9R1A既に運用を始めてしまっているので、文字コードを変えるのは厳しいですね…
>>421
間借りレンタルサーバーなのでmbregexのインストールは無理っぽいです…
回答ありがとうございます。
もう少し模索してみます。
0423nobodyさん
2005/06/22(水) 17:06:39ID:???そっか。じゃあこんなんでどうだろ?
$sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[\xA1-\xDF])';
if (preg_match("/^${sjis}*[[:punct:]]/", $str)) { ... }
0427nobodyさん
2005/06/22(水) 19:47:10ID:???インスコできないという話では?
>>425
Shift_JIS の「与」には "^" が混じっているのでそれがそもそもの問題。
Shift_JIS の文字の一部として "^" が出現した場合には [:punct:] にマッチさせず、
単独に出現した場合のみ [:punct:] にマッチするようにすると良い。
$sjis は ASCII 以外の Shift_JIS にマッチする正規表現で、
先に「与」を $sjis に食べさせて (マッチさせて) おけば、
単独に出現した "^" は [:punct:] に正しくマッチする。
・・・俺、説明下手だな orz
0428nobodyさん
2005/06/22(水) 21:21:48ID:???0430nobodyさん
2005/06/24(金) 15:01:19ID:???「あいうえおabcde^!?」 とか
0431nobodyさん
2005/06/24(金) 15:08:37ID:???設問が「文字列に半角記号が含まれている場合、エラーを表示させるために」
だったので敢えて入れなかったんですが、
そういう動作を意図しているんなら入れるべきでしょうね。
0432nobodyさん
2005/06/24(金) 19:13:15ID:???0433nobodyさん
2005/06/25(土) 18:30:15ID:???こういうカッコがネストされた文字列があるとき、
対応したカッコ (abc 〜 s) までを取り出したいんだけど、何かいい方法はある?
ちなみに、Perl で カッコのネストの深さは 任意 、ってことで。
対応したカッコにあらかじめ番号振っておくくらいしか思い浮かばない・・・orz
0434nobodyさん
2005/06/25(土) 19:22:29ID:???http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
0435nobodyさん
2005/06/25(土) 19:48:07ID:???レスありがとう
でも、それ、 2重までなのか、結果が、
(def)
(mno (p) q )
(uv(wxy)z)
って出ちゃうんだよね・・・。 orz
0437nobodyさん
2005/06/25(土) 20:05:08ID:???ああ、そうか、
$openclose = qr/\([^()]*(?:(??{$openclose})[^()]*)*\)/;
の $openclose をグローバルにしたらうまくいったよ!
ってグローバルじゃなきゃだめなのか・・・。
$_ でやったら perl 死ぬなあ。 ふむ。
とりあえずありがトンー。
0438nobodyさん
2005/06/25(土) 22:28:47ID:???#!/usr/local/bin/perl -w
use strict;
my $str = '(abc (def) ghi ( jkl (mno (p) q ) r) s) t (uv(wxy)z)';
my $openclose;
$openclose = qr/\([^()]*(?:(??{$openclose})[^()]*)*\)/;
while ($str =~ /($openclose)/g) {
print $1, "\n";
}
__END__
0439nobodyさん
2005/06/25(土) 23:17:06ID:???0440nobodyさん
2005/06/26(日) 01:22:38ID:XF0TC+BI([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))\.([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))
で合ってますか??
0442nobodyさん
2005/06/26(日) 02:08:19ID:XF0TC+BI>>441
こういうことですか?
よくわからないです、、
0443nobodyさん
2005/06/26(日) 02:13:05ID:???0444440
2005/06/26(日) 02:58:14ID:???とりあえず、初歩の初歩だけは読んで理解したつもりなんですが、、
これでは全部抜けませんか?
0445nobodyさん
2005/06/26(日) 03:55:40ID:???grep と言っても色々あるわけでな…。
http://www.kt.rim.or.jp/~kbk/regex/regex.html
ERE なら
grep -E '((1[0-9]?[0-9]?|2(5[0-5]?|[0-4]?[0-9]?)|[3-9][0-9]?|0)\.){3}(1[0-9]?[0-9]?|2(5[0-5]?|[0-4]?[0-9]?)|[3-9][0-9]?|0)' ip_address.list
但しこれは "516.171.8.192" という文字列があった場合、"16.171.8.192"
にマッチする。GNU grep なら \b が使えるので、前後に \b をつければ
これを回避できる。
0446nobodyさん
2005/06/26(日) 05:36:06ID:???\n\n\s\s\s\s\n\n\n\n\n\n\nという行があるとして、
検索した時に両方ともマッチする表現ってないかな?
0447nobodyさん
2005/06/26(日) 06:00:33ID:???0448446
2005/06/26(日) 06:22:39ID:???<td rowspan=3 align=center>\n\n\s\s\s\s\n\n\n\n\n\n\n\n\n<a href=(.+?)>
と
<td rowspan=3 align=center>\n\n\s\s\s\s\n\n\n\n\n\n\n<a href=(.+?)>
なんだがPHPでRSSを出力してる最中に同じページで条件が違って参ってるんだ。
0450nobodyさん
2005/06/26(日) 09:54:32ID:???0451nobodyさん
2005/06/26(日) 11:06:09ID:???0452nobodyさん
2005/06/26(日) 16:40:57ID:???htmlタグ内のurlにもマッチしてしまうので、困ってます。
環境は PHP 4.3系 です。
コードは
$str = preg_replace('/(?:href=["\']){0}((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '<a href="\1">\1</a>', $str);
や
$str = preg_replace('/(?:^href=["\'])((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '<a href="\1">\1</a>', $str);
$str = preg_replace('/([^"]|^)((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '\1<a href="\2">\2</a>', $str);
$str = preg_replace('/([^=^"]|^)((?:https?|ftp):\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/\?:\@&=+\$,%#]+)/', '\1<a href="\2">\2</a>', $str);
と、色々試して見てますが、
やはりどれもタグ内のURLにもマッチしてしまいます。
良く使われるパターンだろうけども、検索結果や他の人のコードを見ても上記のようなコードしか得られません。
どなたか分かる方いますか?
0453nobodyさん
2005/06/26(日) 17:14:29ID:Mzx+46/z0454nobodyさん
2005/06/26(日) 18:55:27ID:Di+cudPS┃┌╋──╋┐┃
└╋┘ └╋┘
┃ ・ ・ ┃ ┌━━┐
●━╋┐ ┌╂━━━━╂┐ ┃
└━┷┴━━╂┘ └╋━
0455nobodyさん
2005/06/26(日) 19:03:15ID:???0456nobodyさん
2005/06/26(日) 19:41:04ID:???タグのついてないタイミングがあればそこでオートリンクすればいい。
もしくは誤認識をしない区間を一度切り出すとか。
<a href="http略"><b>http略</b></a>
452が考えてる方法だと↑こっちに反応してしまうよ。
0457nobodyさん
2005/06/27(月) 02:30:35ID:???http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside
Perl の例だが、やり方が理解できれば PHP でも書けるだろう。
0458nobodyさん
2005/06/28(火) 18:33:30ID:7mbB9ytscygwinのperl5.8です。
fuga
hogehoge
のような複数行にわたる文字列にマッチさせたいのですが
if (m!
fuga\r\n
hogehoge\r\n
!mx)
ではマッチしません。どう記述すればよいのでしょうか?
0459nobodyさん
2005/06/28(火) 18:46:58ID:???まずその文字列の改行コードがスクリプト上で実際にどんなバイト列と
なっているか調べた方がいいかもな。Cygwin は Default Text File Type の
設定も絡んでくるから、素直に ActivePerl 使った方が悩まずに済む。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#using_character_classes
0460nobodyさん
2005/06/28(火) 19:48:30ID:7mbB9yts単一行の hogehoge\n にはマッチせず、 hogehoge\r\n にマッチしますので
改行コードに問題はなさそうです。
正規表現の問題ではなく環境依存の問題ということでしょうか。
もう少し調べてみます。
0461nobodyさん
2005/06/28(火) 20:06:42ID:???0462nobodyさん
2005/06/28(火) 20:16:47ID:nrjgh71k0463458
2005/06/28(火) 20:30:28ID:7mbB9ytsm/hogehoge\s+/s
これにはマッチするのですが、
m/fuga\s+hogehoge\s+/s
これにはマッチしません。。。
0464nobodyさん
2005/06/28(火) 20:33:41ID:???基本的な質問で恐縮なのだが、
$_ には確かに "fuga\r\nhogehoge\r\n" という文字列は入っている?
0465458
2005/06/28(火) 20:52:33ID:7mbB9ytswhile ( <> ){
if(m/fuga\s+hogehoge\s+/s){print "OK\n";}
}
こんなので標準入力から読み込ませているのですが、それを確認する方法がわかりません。
複数行読まれていないとしたら、どうしたらよいのでしょうか。
もうスレ違いな領域に入っているようですが。。。
0466nobodyさん
NGNG0467458
2005/06/28(火) 21:05:12ID:???undef $/;
でうまくいきました。
お蔭様で、昨日から悩んでいたのが解決できました。
本当にありがとうございます。お騒がせして申し訳ありません。
0468nobodyさん
2005/06/28(火) 22:46:19ID:???0469nobodyさん
2005/06/29(水) 16:25:17ID:???0470nobodyさん
2005/06/30(木) 22:01:58ID:uEEJE9h23文字以内の行(を改行のみに置換)
ってどう書いたらいいでしょうか?
0471nobodyさん
2005/06/30(木) 22:15:26ID:FhJSSQPy文字と言っても色々ありますが・・・
0472nobodyさん
2005/06/30(木) 22:44:30ID:???s/^.{0,3}$//;
0473nobodyさん
2005/07/01(金) 01:34:23ID:2L+Akkii取得するにはどうすればよいでしょうか?
-----
<table>
<tr><th>番号</th><th>氏名</th></tr>
<tr><td>01</a></td><td>山田太郎</td></tr>
<tr><td>02</a></td><td>山田次郎</td></tr>
</table>
0474nobodyさん
2005/07/01(金) 02:21:26ID:???$_ =~ m!^<tr><td>([^<]*)</a></td><td>([^<]*)</td></tr>!;
0475nobodyさん
2005/07/01(金) 02:59:52ID:???0476nobodyさん
2005/07/01(金) 12:53:26ID:???0477nobodyさん
2005/07/02(土) 09:11:37ID:???いまのところ、文字列fooを含まない行は
^(((([^f]*)*(f+[^o][^f]*)*)*)*(f+o[^o][^f]*)*)*$
でヒットすることがわかりました。
この先がどうしてもわからないのです。
お知恵をお貸し下さい。
0478nobodyさん
2005/07/02(土) 12:29:04ID:BTmtp6GJ0479nobodyさん
2005/07/02(土) 16:29:59ID:???言語は?
http://www.din.or.jp/~ohzaki/regex.htm#And
print "$_ => ", /^(?=.*foo)(?:(?!bar).)*\z/ ? 'o' : 'x', "\n" for qw(
abarcdefoog abcdefooghi abarcdefghi abcdefghijk
gfooedcbara ihgfooedcba ihgfedcbara
);
0481nobodyさん
2005/07/02(土) 17:17:32ID:???ありがとうございました。
試してみましたが、うまくいかないようです。
ちなみにperlではありません。
ここにあるコンポーネントを使っています。
http://homepage1.nifty.com/bmonkey/delphi/delphi.html#REXP
0482nobodyさん
2005/07/02(土) 17:29:23ID:???0483nobodyさん
2005/07/02(土) 17:49:47ID:???「ほげほげを含む文字列にマッチ」させて否定をとりゃいいじゃんと
思うのだが、そうしないのは何か理由があるのだろうか。
0484nobodyさん
2005/07/02(土) 17:54:12ID:???ここ "Web"Prog だしなあ。
0487nobodyさん
2005/07/02(土) 19:47:06ID:???0490nobodyさん
2005/07/03(日) 04:10:52ID:???0491nobodyさん
2005/07/03(日) 14:30:29ID:???「否定が取れないソフト」の場合は確かに仕方ないけど、
そうでないケースもこのスレの質問では結構多いと思う。
それに、 >>484 の言うとおり、 "Web"Prog でそんなソフトはあまり無いと思われ。
0492nobodyさん
2005/07/04(月) 11:06:12ID:???マッチしない文字列にのみマッチする正規表現は
一般には作れますか? 有限オートマトンだから
作れそうな気はするのですが。
0493nobodyさん
2005/07/04(月) 16:44:56ID:LXfnoi1Z変数$html にとあるHTMLファイルを読み込みまして、そのHTMLに記述されている
<!-- コメント1 --> から <!-- /コメント2 --> までの範囲にある文字列(タグ含む)を
変数$hensu に代入したいのです。
preg_match を使えとのことだったんですが、具体的にどうやればよいのか分かりません。
どうかご教授頂けますでしょうか。お願い致します。
0494nobodyさん
2005/07/04(月) 16:49:45ID:???あのね、
http://pc8.2ch.net/test/read.cgi/php/1117945031/769
に答え出てますよ。
0496nobodyさん
2005/07/06(水) 21:23:47ID:uSLwEBZ9見たいな数値と.の組み合わせの文字列を
123.45789のように
最初に出現する.を除き除去するにはどうすればよいでしょうか?
0497496
2005/07/06(水) 21:26:13ID:uSLwEBZ9javascriptで行うつもりです。
0498nobodyさん
2005/07/06(水) 22:06:55ID:???var a='123..45.78.9'.replace(/\./,'<<escape>>').replace(/\./g,'').replace(/<<escape>>/,'.');
0499nobodyさん
2005/07/08(金) 22:48:37ID:???13756〜36865みたいな中途半端な数字の範囲は
どう表現すればよいのでしょうか?
0501499
2005/07/09(土) 00:10:04ID:???正規表現でできると講師に聞いたのでやってみようといろいろ試したのですが全くわからなくて
ここで聞いてみたのですが・・
正規表現以外でできるものがあるのですか?
0502JAPU
2005/07/09(土) 02:15:39ID:???上記の条件を受理する正規表現は存在するので,理論上は可能。
たとえば,123 - 456 の整数なら (JS知らないのでPerlの表現になるけど)
^(?:12[3-9]|1[4-9]\d|[23]\d\d|4[0-4]\d|45[0-6])$
または
^(?:123|124|125| 途中略 |454|455|456)$
となる。13756 - 36865 でも同様に書ける。
でも,数字に変換して,その範囲かどうかチェックしたほうが速くない?
0503nobodyさん
2005/07/09(土) 08:57:03ID:b0QlFvY60504nobodyさん
2005/07/09(土) 18:16:14ID:XiYWtJZE0505JAPU
2005/07/09(土) 19:55:25ID:???(日本語版「詳説正規表現」)
0506nobodyさん
2005/07/09(土) 22:43:09ID:???0507nobodyさん
2005/07/11(月) 09:54:07ID:???最近、昔懐かしいコテをいろいろ名乗っている人がいるので
このJAPUたんも多分偽者ジャマイカ?
ほかにはT女の竹田とかも見た。
0508nobodyさん
2005/07/12(火) 01:28:34ID:???0509nobodyさん
2005/07/12(火) 06:21:34ID:???0510JAPU
2005/07/12(火) 21:37:17ID:???http://www.japu.org/tmp/2ch.txt
0511nobodyさん
2005/07/13(水) 06:58:27ID:???0513506
2005/07/14(木) 01:35:07ID:???チャンコダイニング若で鍋でも囲もうじゃないか。
0514nobodyさん
2005/07/17(日) 16:02:42ID:6p9wxgWqこの正規表現を理解したいです。
\$([E-G])
\x0f/e
この2点の意味がわかりません。
/はどのような意味を持つのでしょう?
よろしくお願いします。
0515514
2005/07/17(日) 23:47:07ID:???0516nobodyさん
2005/07/17(日) 23:49:01ID:???まあそーゆーな
16進で1b,$そのもの,EからGのどれか,16進21から7aのどれかの中から一文字以上繰り返し,16進0f
で/は閉じ
eはフラグだから正規表現とは関係なし
0517516
2005/07/17(日) 23:53:33ID:???その場合は/は/そのもの
最後のところは16進0f, /, eというシーケンス
ていうか何の言語での話か
わからないとわからないよ
0518nobodyさん
2005/07/18(月) 00:25:05ID:???0519514
2005/07/18(月) 00:57:29ID:???/−/e
は正規表現の置換ですね。
$ = 0x24
E-G = 0x45-0x47
のことだとわかって納得しました。
本に書いてあるコードなんですが、直前まで16進数で解説してたのでわかりませんでした。
ありがとうございました。
0520nobodyさん
2005/07/18(月) 01:04:26ID:jRcBcWiXよかったら書名教えて
あと「正規表現の置換」て意味わからないから
0521nobodyさん
2005/07/18(月) 01:40:16ID:???s/♂/♀/g
0522nobodyさん
2005/07/18(月) 03:34:06ID:???0523nobodyさん
2005/07/18(月) 12:46:19ID:???性器表現のチカン ><
s/♂/♀/g
522 :nobodyさん sage :2005/07/18(月) 03:34:06 ID:???
それじゃ性転換!
0524nobodyさん
2005/07/18(月) 16:54:26ID:fWK6qRMT0525nobodyさん
2005/07/18(月) 16:58:35ID:???0526PHPで。
2005/07/21(木) 10:09:56ID:jGRVDiGIこういったURLがあり、置換で必要のない変数を削除したい。
例えば、 「&a=」「&c=0」「&e=」を削除して、「index?b=&d=1」のようにしたいのです。
ちなみに、これらの変数には数字(1桁)がくる場合と空白の場合があります。
正規表現が初めてなので、とりあえずやってみたのは一個一個削除することです。
$url = ereg_replace('\&a=[0-9]?','',$url);
$url = ereg_replace('\&c=[0-9]?','',$url);
$url = ereg_replace('\&e=[0-9]?','',$url);
一応これで成功はしたのですが、何せ初めてなのであっているかどうか分かりません。
それと、もし1回の変換で可能であればその方法も教えて下さい。
0527nobodyさん
2005/07/21(木) 10:19:40ID:???PHPは知らんのだけど、その例だと "a=" は消えないだろ。前に & ついてないし。
> もし1回の変換で可能であればその方法も教えて下さい。
もうちょっと条件を一般化してくれないと、できるかどうかは誰にも分からない。
0528nobodyさん
2005/07/21(木) 10:41:27ID:???フォームのGETで出されたURLから必要の無い変数を削除したいのです。
フォームは自分でいじれないので、URLを直接置換するしか方法が無くて。
先の例ですが、GETで渡されたURLで、最初にくる変数には確かに「&」がつかず「?」の次から始まりますね。
それで今ちょうど躓いてしまったところです。(例と実際のソースが異なるためミスってしまいました)
条件1
・英字の先頭には「&」もしくは「?」がくる。「?」は削除せず、「&」は削除
・「& or 無し」+「英字1文字」+「=」+「数字1文字 or 空白」を削除
例: &c=
これともう一つ別件で
条件2
・英字の先頭には「&」もしくは「?」がくる。「?」は削除せず、「&」は削除
・「& or 無し」+「英字1文字」+「=」+「英数字の組み合わせ6文字」を削除
例: ?c=ff00cc
わかりにくいかも知れませんが、精一杯説明したつもりです。
どうかヨロシクお願いします。
0529nobodyさん
2005/07/21(木) 10:57:35ID:???phpは知らんので繰り返し指定子とか使えるなら使えばよい
0530nobodyさん
2005/07/21(木) 10:58:05ID:???&?[a-zA-Z]=([a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9])|([a-zA-Z]?)
0531nobodyさん
2005/07/21(木) 10:59:39ID:???あー、なるほど!1文字ずつ指定していけばいいのか。
まとめてやろうとしたからダメだったっぽいです。
今後は繰り返し何タラとかも覚えていきます。ありがとうでした。
0532nobodyさん
2005/07/21(木) 13:26:18ID:???置換でやろうとせずに一度ばらしてから組み立てた方が
見通しがいいと思うけどな。
0533nobodyさん
2005/07/22(金) 11:54:34ID:kQk294zK0537nobodyさん
2005/07/22(金) 15:22:08ID:???↓
http://www.google.co.jp/%E4%BC%9D%E8%AA%AC/
にしてたいんだよなー。(ググルを例に取った)
RewriteRule ^/(%[0-9A-Fa-f]{2})+/ /q=$1
これでやってみたけど駄目だった。
助けてくれ。
0538nobodyさん
2005/07/22(金) 15:46:20ID:???RewriteRule ^/(%[0-9A-Fa-f]{2}|\+|[0-9A-Za-z_.-])+/$ /search?q=$1
0539nobodyさん
2005/07/22(金) 16:00:06ID:???それも試しましたがダメでした。むー、原因が分からん。
でも試行錯誤しているうちに正規表現が楽しくなってきた。
0540nobodyさん
2005/07/22(金) 16:43:02ID:???それって、本当にマッチしてない?
正規表現の問題じゃなくて mod_rewrite 側で問題があるような希ガス。
0541nobodyさん
2005/07/22(金) 17:20:52ID:???まずは rewrite_log を出して確認してみるとか、
もっと緩いルール、例えば ^/(.+)/ /q=$1 あたりから始めてみるとか。
0542nobodyさん
2005/07/22(金) 17:32:44ID:???ですよねぇ。文法的には合ってるはずなんだけどなぁ。
ちなみに、半角英数ならちゃんと出来たんです。
http://www.google.co.jp/2ch+nobdy/
みたいなやつね。
0543nobodyさん
2005/07/22(金) 19:59:19ID:Hy++Zfidギンギラギンにさりげなく さりげなく生きるだけさ〜♪
0544nobodyさん
2005/07/23(土) 00:56:00ID:???自宅のApacheでログをみたところ、何やら文字化けを起こしているようです。
http://localhostp/%A5%CA%A5%A4%A5%AD/
↓
File does not exist: c:/public_html/・ハ・、・ュ/
%A5%CA%A5%A4%A5%AD が ・ハ・、・ュ と文字化けしてしまうようです。
原因分かりますか?
0547nobodyさん
2005/07/23(土) 17:44:37ID:2bOgW3d1([0-9A-Za-z_]+)
って書いたらうごくんだけど、これって正しい書き方?
0550nobodyさん
2005/07/24(日) 01:10:29ID:???どこに行ったかわかりません。スレ違いかも知れませんが、
ポインタだけでもお示しいただければ幸いです。
0551nobodyさん
2005/07/24(日) 01:31:12ID:???0552nobodyさん
2005/07/24(日) 12:09:04ID:???真っ先に布団を捜したんですがありませんでした。
あれを家から持ち出すはずがないので、空き巣にでも
入られたんじゃないかと心配になってきました。
0553nobodyさん
2005/07/24(日) 13:44:01ID:???0554nobodyさん
2005/07/24(日) 13:47:30ID:???0555nobodyさん
2005/07/24(日) 15:49:03ID:vU2XL6goおまいの心の中にしまってあるんだよ・・・
0557nobodyさん
2005/07/24(日) 21:17:58ID:???0559550
2005/07/25(月) 00:40:13ID:???置いてありました。トイレットペーパーなんかを置く棚です。
下痢の時とかトイレに本を持ち込むんでした。
>>554
あれは確か、Perlで作るCGI入ry
スレ汚し申し訳ありませんでした。「単語境界とは何か」
ということについて、これからじっくり考えてみます。
0560nobodyさん
2005/07/25(月) 09:11:16ID:???普通こんな感じ
0561560
2005/07/25(月) 09:12:21ID:???間違えた。
0562nobodyさん
2005/07/27(水) 03:13:00ID:rvBHMPTm配列に格納します。
$array = preg_split("/\s/", $string, -1, PREG_SPLIT_NO_EMPTY);
この時、空白だけではなく
「英数字か記号1字で、前後が英数字でない文字」
も区切り文字として正規表現に加えたいんですが、どういう風に
書けばいいでしょう? お願いします。
0563nobodyさん
2005/07/27(水) 13:59:47ID:???「英数字か記号1字で、前後が英数字でない文字」 だと記号は全部消える気がするんだけどいいのかしら。
"記号"は"文字"の中に含まれない、ってことかな?
0564562
2005/07/27(水) 15:16:57ID:???すいません、説明がダメダメでした。英数字でも記号でも、
1字のみの場合は空白と同じ扱いにしたいということです。
$string = "This is a pen."; なら
Array ( [0] => This [1] => is [2] => pen. )
$string = "A to Z"; なら
Array ( [0] => to )
$string = "15 - 9"; なら
Array ( [0] => 15 )
$string = "YOMIURI ON-LINE"; なら
Array ( [0] => YOMIURI [1] => ON-LINE )
という具合です。なんだかよくわからなくなってきました。
0565nobodyさん
2005/07/27(水) 16:12:52ID:???/(?:^|\s+).(?:\s+|$)|\s+/
↑こういうのとは違う?
"A to Z" は [0] => to にならないよ。
0566562
2005/07/27(水) 17:14:16ID:???ありがとうございます。えーと、先に挙げた例でうまくいかないのは
"A to Z"ではなく"15 - 9"が
Array ( [0] => 15 [1] => 9 )
となるわけですが、これって /(?:^|\s+).(?:\s+|$)|\s+/ の前の方の
表現で" - "がマッチして、残りの9はマッチしなくなるんですね?
"1 2 3 4 5"でやってみると
Array ( [0] => 2 [1] => 4 )
となります。こういう時ってどこで勉強したらいいんでしょうか?
なんかもう頭が泥沼です。
0567nobodyさん
2005/07/27(水) 17:42:00ID:???/(?:^|\s+|(?<=\s)).(?:\s+|$)|\s+/
でどうよ?
0568nobodyさん
2005/07/27(水) 17:47:02ID:???/(?:(?:^|\s+|(?<=\s)).(?:\s+|$)|\s+)+/
何度もスマン。
0569562
2005/07/27(水) 18:20:12ID:???いえいえ、何度もありがとうございます。期待した通りの
結果が得られたのですが、表現がそこまで行くと私には
魔法の呪文としか理解できなくて、もしよろしければ少し
解説いただけませんでしょうか?
(?:...) が、グループ化、ということはわかったのですが、
(?<=\s)) というのは何でしょう? たびたび恐縮ですが
正解を教えてもらうだけでなく、表現の中身も理解して、
自分で解を導けるようになりたいです。お願いします。
0570nobodyさん
2005/07/27(水) 19:59:22ID:???何て言うんだっけ、「前方一致言明」 とかだっけ。
文字列 (上の場合".(?:\s+|$)") の前に、"\s"があった場合、マッチする、ってやつ。
まあ、下記参考ー
[PHP マニュアル] -> [パターン構文]
http://php.s3.to/man/pcre.pattern.syntax.html#regexp.reference.assertions
[SMART]->[PERL]->[正規表現]
http://www.rfs.jp/sitebuilder/perl/02/09.html の [拡張構文]
0572nobodyさん
2005/07/28(木) 11:40:06ID:???さらに\,は\\,のようにしています
perlでこれを分割したいのですが、
,に一致して(\\)+,に一致しないものはどう書けばよいのでしょう
よろしくお願いします
0573nobodyさん
2005/07/28(木) 11:45:32ID:???0574nobodyさん
2005/07/28(木) 11:50:38ID:???0575nobodyさん
2005/07/28(木) 12:08:05ID:MIm3P7gz?A=1111&B=2222&C=33&D=444 から「=」と「&」と「?」を抜き取りたい。
(A1111B2222C33D444 みたいな感じ)
それだけなら何とか今の知識で大丈夫なのですが、
このAやらBやらが毎回この順番でなるわけではなく、
しかも出現したりしなかったりするわけです。
?B=2223&A=1111&D=444 とか
?C=33&A=1111 のようになることもあります。
うまいこと置換する方法を教えて下さい。
0576nobodyさん
2005/07/28(木) 12:39:27ID:???perl なら tr/=&?//d;
0577nobodyさん
2005/07/28(木) 13:49:11ID:???0578nobodyさん
2005/07/28(木) 14:04:30ID:???色々悩んでいるうちに解決しちゃいました。
>>576-577 さんありが�d
0579nobodyさん
2005/07/28(木) 14:16:26ID:???^(?:(A)=(\d+)|(B)=(\d+)|(C)=(\d+)|(D)=(\d+)|[^?&]+|[?&])+$⇒$1$2$3$4$5$6$7$8
?A=123&C=456&B=0&A=2222&F=0000&DUMMY⇒A2222B0C456
0581nobodyさん
2005/07/28(木) 15:43:53ID:???1回目送られてきたデータをURLデコード後、ハッシュにばらして同じ名前、値でもう1回送ることです
改行コードはまず<br>に変換します
その後、<br><br>を<br>に置換したいのすがどのように書けばいいでしょうか?
もしくは根本的な解決方法はあるでしょうか?
0582581
2005/07/28(木) 17:03:13ID:???各<br>の前に0x0dが含まれてた('A`)
0583nobodyさん
2005/07/29(金) 13:13:28ID:???例えば /\"/ と/"/ の違いって一体何ですか?
0584nobodyさん
2005/07/29(金) 14:58:02ID:???\ には大きく分けて二通りの意味があって、
1. (主に) 正規表現のメタ文字として使われる文字を、メタ文字でない通常の文字として解釈させる
2. 正規表現のメタ文字でない文字 (英数文字など) に特殊な意味を持たせる
その例だと 1. になって、単なる " として解釈されるようになる。
ただ " はもともとメタ文字としての意味はないので、要するに、両者に違いは無い。
0585nobodyさん
2005/07/29(金) 16:05:14ID:???"を"に変換する正規表現がサイトによって異なっていたので気になってました
ありがとうございます
0587nobodyさん
2005/07/29(金) 19:33:29ID:???s/"// だと後の色変わっちゃって読みにくいので、s/\"// にしちゃう。
0588nobodyさん
2005/07/30(土) 00:23:34ID:???0589nobodyさん
2005/08/02(火) 23:32:23ID:Yo8mbngHそうでないかの判定を行いたいと思ってます。
$str = "192.168.0.1";
if ( ereg("(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)", $str) ) {
echo "入力された文字は、IPアドレスです";
} else {
echo "入力された文字は、IPアドレスではありません";
}
↑のようなコードで実行したのですが、どうしても、
IPアドレスであると判断してくれません。
どのようにすれば、IPだと判定してくれるのでしょうか<(_ _)>
0590nobodyさん
2005/08/03(水) 00:41:00ID:???0591nobodyさん
2005/08/03(水) 00:44:23ID:???ありがとうございます。Googleで、調べまくっても判らないんです。
なにとぞお願いします・・・<(_ _)>
0592nobodyさん
2005/08/03(水) 03:02:28ID:???0593589
2005/08/03(水) 06:12:36ID:???if ( preg_match("(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)", $str) ) {
で良いんですか?しかし、IPと判定されません。
正規表現の部分が間違ってるんでしょうか?
0594nobodyさん
2005/08/03(水) 12:31:12ID:???あと、ダブルクオート文字列内のバックスラッシュのエスケープには注意。 \. とか。
preg_match の場合は正規表現の記述が独特だね。
ereg("([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)", $str)
ereg("([[:digit:]]+)\\.([[:digit:]]+)\\.([[:digit:]]+)\\.([[:digit:]]+)", $str)
preg_match("/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)/", $str)
0595nobodyさん
2005/08/03(水) 13:38:00ID:???IPアドレスかどうか判定するってのに正規表現は適任じゃないだろ。
>>594の例だと123456.123456.987654.987654なんかでもマッチしちゃうけど、
これはIPアドレスではないよな?
「.」でsplitした結果の配列の要素数は4か?各要素は全て数字で、0〜255の範囲内か?
とか、そういうことじゃん?
いや、規格とか詳しくないので、それで十分なのかどうか断言できないけど、
少なくともpreg_matchひとつで判定できるような代物じゃないと思うわけよ。
0596nobodyさん
2005/08/03(水) 18:18:24ID:M5PNKcG20599nobodyさん
2005/08/03(水) 21:25:53ID:M5PNKcG2無理矢理だろうが何だろうが、preg_matchひとつで判定できるような代物ですが何か?
0600nobodyさん
2005/08/03(水) 21:43:01ID:???0601nobodyさん
2005/08/12(金) 05:18:07ID:???フラッシュ[1].jepg
フラッシュ[10].jepg
フラッシュ[100].jepg
フラッシュ[2].jepg
↓
フラッシュ[0001].jepg
フラッシュ[0010].jepg
フラッシュ[0100].jepg
フラッシュ[0002].jepg
こう言う正規表現を誰かお願いします。
0603nobodyさん
2005/08/12(金) 11:04:52ID:???正規表現を教えて下さい。(/usr/local/abcde にはマッチするが、/usr/local/aiueoはマッチしない)
apacheの設定で必要なんですが今一分からない、、、orz
0604nobodyさん
2005/08/12(金) 11:27:06ID:???/usr/local/(?!aiueo)
でいいのか・・・間違ってたら教えて下さい
0605nobodyさん
2005/08/12(金) 15:18:28ID:???宿題じゃないです。
学校にも通ってません。
ソフトを教えてもらうスレでソフトは手に入れたのですが、
正規表現を使わないといけないみたいなんです。
断じて宿題ではありません。
0607nobodyさん
2005/08/12(金) 15:27:19ID:???その先のマッチした文字列を書き換えるところは正規表現の責務じゃない。
* そして、書き換えるところの仕様はソフトによってまちまちなので、
ソフト名を示さないと答えようがない。
* さらに、正規表現もソフトによって異なる点が少なくないので、
ソフト名を示さないと答えようがないケースも多い。
0609nobodyさん
2005/08/12(金) 16:57:29ID:???ベクターで探してみます。
>>607
あっちで教えてもらったソフトは、regrenと言うソフトでした。
ttp://magarchive.halfmoon.jp/nifty/softs/regren.html
>>608
すみません。
0610nobodyさん
2005/08/13(土) 10:23:33ID:???これがマッチしないのはどうしてなんでしょう?お助け下さい。
$ua = "Opera 8.01 [ja]";
preg_match("/Opera 8\.01 \[ja\]/i", $ua)
0611610
2005/08/13(土) 10:36:32ID:???スペースをふたつ吐いてました。 ↑
0612nobodyさん
2005/08/28(日) 20:15:48ID:???https://age.example.net/9j8i7h6g5f-4e3d2c1b0a?ref=true
http://sage.example.net/a1b2c3d4e5-f6g7h8i9j0
https://age.example.net/0j1i2h3g4f-5e6d7c8b9a
上記のようなURLを抽出したいと思い、下記のように試してみましたが
preg_match_all(
"/(https?:\/\/s?age\.example\.net\/[a-z0-9]{10}+-[a-z0-9]{10}+(\?ref=true)?)/i",
$str, $val);
http://sage.example.net/a1b2c3d4e5-f6g7h8i9j0 というような
sageではじまるURLが取得できません
どこがおかしいのでしょうか?ご教授お願いします
0613612
2005/08/28(日) 20:23:16ID:???0614nobodyさん
2005/08/28(日) 20:26:13ID:???これじゃだめなの?
0616nobodyさん
2005/08/28(日) 21:36:14ID:???0617nobodyさん
2005/08/28(日) 21:45:11ID:???0618617
2005/08/28(日) 21:47:13ID:???ほんとに10桁なら、それでOK。
0619nobodyさん
2005/08/28(日) 23:07:24ID:???ありがとうございます
sageではじまるURLの件を除いて、期待通りの動作が確認できました
未熟なので好ましくないコーディングをしている部分がありますが
日々精進していきたいと思います
0620nobodyさん
2005/08/28(日) 23:59:00ID:???異なるというのが原因でした
皆様本当にお騒がせしました・・・
0621nobodyさん
2005/08/31(水) 08:41:15ID:Ym1OpgcO[\w\.-]+(\+[\w-]*)?@([\w-]+\.)+[\w-]+
と手元の本に書いてありました。
でもこれの意味がよく分かりません。
どなたか解読していただけないでしょうか?
あと上のメールアドレスの正規表現に
!#$%&`+-'^{}
の文字も使えるようにするにはどうすればいいんでしょうか?
よろしくお願いします。。。
0622nobodyさん
2005/08/31(水) 17:56:05ID:???―――――――――――――‐┬┘
.|
____.____ |
| | | |
| | ∧_∧ | |
| |( ´∀`)つ ミ |
| |/ ⊃ ノ | | 手元のクソ本
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ |
0623nobodyさん
2005/09/05(月) 02:14:46ID:???javascriptで 通常のdatを かちゅ〜しゃdatに変換するコンバータを作っています。
http://www.geocities.jp/mirrorhenkan/katu/
ある程度出来たのですが、2点ほどつまづいています
「&gt;1-2」などがマッチした場合は
「<a href="http://hoge.com?bbs=hoge&st=1&to=2">&gt;1-2</a>」
と置換したいので
<script>
test = "これ&gt;1-2です そして&gt;10-20です あと&gt;200-300も";
test = test.replace(/(&gt;)(\d+)(-)(\d+)/g,"<a href=\"http:\/\/hoge.com?bbs=hoge&st=$2&to=$4\">$1$2$3$4</a>");
document.write(test);
</script>
という正規表現をjavascriptで組んでみたら
ちゃんと動作するのですが、
http://www.geocities.jp/mirrorhenkan/katu/
で同じようにやると、
数字が一桁づつの時は動作するのですが
「&gt;99-100」とか「&gt;100-200」等の時には
それぞれ
「〜st=9&to=9">&gt;9</a>9-100」
「〜st=10&to=10">&gt;10</a>0-200」
のようになってしまいます。
もし宜しければ正規表現のおかしい箇所を御指導頂けないでしょうか。
上記ページの該当部分はこちら↓です
line[3] = line[3].replace(/([^>\;]|^)(&gt;|&gt;&gt;|>|>>|≫)(\d+)(-)(\d+)([^<]|$)/g,"$1"+sp1+"$3"+sp2+"$5"+sp3+"$2$3$4$5<\/a>$6");
$3と$5に数字が格納され、URL部分は「sp1+"$3"+sp2+"$5"+sp3」になります。
0624nobodyさん
2005/09/05(月) 02:25:13ID:???クライアントサイドのスクリプト(javascript)を使ってはいますが
正規表現の問題だろうと思い こちらに投稿しました。
あと
最初、間違えて(と書いたら失礼ですが)プログラム板の正規表現スレに
質問したのですが、反応がないので改めてこちらでお願いさせて頂きたく思います。
お詫びという訳でもありませんが、正規表現スレの過去ログです(IEと専用ブラウザ限定ですが)
0625nobodyさん
2005/09/05(月) 02:27:39ID:???http://www.geocities.jp/mirrorhenkan/dat2html-3/
0626nobodyさん
2005/09/05(月) 17:18:48ID:???/[^\d]/で行けると思ったのですが117となってしまいました。
宜しくお願いします。
0627nobodyさん
2005/09/05(月) 17:21:09ID:???何だか楽しそうだから勉強してみたいんだが。
0628nobodyさん
2005/09/05(月) 18:13:16ID:???\((\d+)\)
Perlだと s/[^\d]//g; なんて置換しない限り117にはならない。
>>627
正規表現環境が用意されているエディタやファイラでも大体そのまま使えるよ。
0629nobodyさん
2005/09/05(月) 19:58:08ID:???その「該当部分」がおかしいわけではなくて、一連の replace() うちで、
一番最初のに先にマッチしてしまっているのがまずいんじゃないかな。
ちょっとまだ考え切れてないけど、 replace() を並べる順番を逆にして、
一番複雑なパターンからマッチを試行していくようにするとか、
あるいは、頑張って正規表現を一つにまとめて一度で replace するようにするとか。
>>627
何だか楽しそうだから始めるっていうのは動機として全然アリなんじゃないかと。
0630623
2005/09/06(火) 20:37:04ID:???何でそうなったのか、後でじっくり考えてみようと思います。
>>629さん、ありがとうございます。
もう一つ質問してもいいでしょうか。
「&gt;1」や「&gt;50」等のように
レス番に全角数字を使っている場合、
URL該当部分だけ半角数字にする正規表現は何か考えられるでしょうか。
例えば
<script>
test = "これ&gt;1-2です";
test = test.replace(/(&gt;)(\d+)(-)(\d+)/g,"<a href=\"http:\/\/hoge.com?bbs=hoge&st=$2&to=$4\">$1$2$3$4</a>");
document.write(test);
</script>
の場合、
「これ<a href="http://hoge.com?bbs=hoge&st=1&to=2">&gt;1-2</a>です」
と表示されますが、
URL表示部分の数字を半角にしたいのです。
javascript寄りの質問になってしまっていたら、申し訳ありません。
もし宜しかったらお願い致します。
0631nobodyさん
2005/09/06(火) 23:15:05ID:???\dが全角数字にもマッチするってどのブラウザ?
WinIE6では再現できなかった。[0-9]ならできたけど。
とりあえず全角数字部分をescapeして
"0"→"%uFF10"→"0"
"9"→"%uFF19"→"9"
みたいに末尾1字取れば一応半角に戻る
"630".replace(/0/g,'0').replace(/1/g,'1').replace(/2/g,'2').replace(/3/g,'3').......
でもいいけど。他にもっといい方法あるかも。
url = "http://hoge.com?bbs=hoge&st=1&to=2";
url = url.replace(/([0-9])/g, function(){return escape(arguments[1]).substr(5)}));
// 参考:JavaScript質問スレ40-237
0632nobodyさん
2005/09/07(水) 00:29:44ID:CuTS4a6v(foo)(bar)(hoge)
のような文字列のときに、それぞれの括弧とその中身にマッチさせるにはどうすればいいでしょうか。
どうしても一番外側の括弧一つだけしかマッチできません。
0636nobodyさん
2005/09/07(水) 05:59:43ID:L++YBOi9とりあえず次スレのテンプレには
/\Qhttp://pc8.2ch.net/php/index.html\E/
m|usr/local/bin/perl|
が必要だと感じた。
0637623
2005/09/07(水) 19:44:49ID:???すみません、ごちゃごちゃしてて書き換え忘れてました。[0-9]です。
escapeを教えて頂いてありがとうございます。
ただ、URL部分だけを半角数字にするにはどういう方法があるのだろう・・。
例えば
<script>
url = "1番目のレスは<a href=\"http://hoge.com?bbs=hoge&key=0123456789&st=551&to=552\">&gt;551-552</a>です";
url = url.replace(/([0-9])/g, function(){return escape(arguments[1]).substr(5)});
document.write(url);
</script>
とやると、URL以外の数字も半角になってしまいます・・。
0638623
2005/09/07(水) 19:51:37ID:???アンカーが飛び飛びについてしまいます
<script>
line = "&gt;2 &gt;3 &gt;4 &gt;5 &gt;6 &gt;7-8 &gt;90-100 >100-200";
sp1 = "<a href=\"http:\/\/server.2ch.net/test/+read.cgi?bbs=board&key=123456789&st=";
sp2 = "&to=";
sp3 = "&nofirst=true\" target=\"_blank\">";
//半角レス番
line = line.replace(/([^\;]|^)(&gt;|&gt;&gt;|>|>>|≫)(\d+)(-)(\d+)([^<]|$)/g,"$1"+sp1+"$3"+sp2+"$5"+sp3+"$2$3$4$5<\/a>$6");
line = line.replace(/([^\;]|^)(&gt;|&gt;&gt;|>|>>|≫)(\d+)([^<-]|$)/g,"$1"+sp1+"$3"+sp2+"$3"+sp3+"$2$3<\/a>$4");
//全角レス番
line = line.replace(/([^>\;]|^)(&gt;|&gt;&gt;|>|>>|≫)([0-9]+)(-|\−|\ー)([0-9]+)([^<]|$)/g,"$1"+sp1+"$3"+sp2+"$5"+sp3+"$2$3$4$5<\/a>$6");
line = line.replace(/([^>\;]|^)(&gt;|&gt;&gt;|>|>>|≫)([0-9]+)([^<-]|$)/g,"$1"+sp1+"$3"+sp2+"$3"+sp3+"$2$3<\/a>$4");
document.write(line);
</script>
実行させると
レスアンカーが一つ飛びについてない状態です
何故だ・・・
0640nobodyさん
2005/09/08(木) 15:58:55ID:???line = ">2 >3 >4 >5 >6 >7-8 >90-100 >100-200";
sp1 = "<a href=\"http:\/\/server.2ch.net/test/+read.cgi?bbs=board&key=123456789&st=";
sp2 = "&to=";
sp3 = "&nofirst=true\" target=\"_blank\">";
line = line.replace(/(>|>>|>|>>|≫)([0-90-9]+)(-([0-90-9]+))?/g, ""+sp1+"$2"+sp2+"$4"+sp3+"$1$2$3<\/a>");
document.write(line);
</script>
これでいいのかな?
まだハイパーリンクに仕込む番号は半角化しないとならないな。
0641nobodyさん
2005/09/08(木) 16:35:13ID:???(>>|>|>>|>|≫) みたいにして長い方のパターンを先にしなきゃダメじゃない?
0643nobodyさん
2005/09/08(木) 17:07:45ID:???0645623
2005/09/08(木) 20:11:30ID:???半角全角の数字をまとめて出来るとは知りませんでした・・
ただ
「&gt;1」のようにレス番が単独のものと
「&gt;1-2」のようにレス番がまたがるものがあるので
それを一度に置換させる方法があるでしょうか。。
「&gt;1」の場合 →「〜&st=1&to=1〜」
「&gt;1-2」の場合→「〜&st=1&to=2〜」
と、「to=××」の部分に入れる部分が異なるので
今のところは二つに分けているのですが・・・。
全角数字と半角数字をまとめてみました↓が、やはりアンカー飛び飛びだ・・・
<script>
line = "&gt;2 &gt;3 &gt;4 &gt;5 &gt;6 &gt;7-8 &gt;90-100 >100-200";
sp1 = "<a href=\"http:\/\/server.2ch.net/test/+read.cgi?bbs=board&key=123456789&st=";
sp2 = "&to=";
sp3 = "&nofirst=true\" target=\"_blank\">";
line = line.replace(/([^\;]|^)(&gt;|&gt;&gt;|>|>>|≫)([0-90-9]+)(-|−|ー)([0-90-9]+)([^<]|$)/g,"$1"+sp1+"$3"+sp2+"$5"+sp3+"$2$3$4$5<\/a>$6");
line = line.replace(/([^\;]|^)(&gt;|&gt;&gt;|>|>>|≫)([0-90-9]+)([^<-]|$)/g,"$1"+sp1+"$3"+sp2+"$3"+sp3+"$2$3<\/a>$4");
document.write(line);
</script>
>>640さんのように、正規表現を一つにまとめないと駄目みたいですね。。
0646nobodyさん
2005/09/08(木) 20:27:23ID:???後半があれば必ず長い方に一致させるから
心配しなくていい。
前後の([^\;]|^)や([^<-]|$)が、lineに格納されたスペースを食っちゃってる
ようだけど。
0647646
2005/09/08(木) 20:32:18ID:???間違えた。
0649nobodyさん
2005/09/08(木) 20:41:11ID:???document.write(line);
としてみたらやっと気付いたけど、今のままでも
2回目の置換では<a href="...">2</a>とかタグの終了の>
置換してるのが原因だな・・・
0650nobodyさん
2005/09/08(木) 20:44:19ID:???line = ">2 >3 >4 >5 >6 >7-8 >90-100 >100-200";
sp1 = "<a href=\"http:\/\/server.2ch.net/test/+read.cgi?bbs=board&key=123456789&st=";
sp2 = "&to=";
sp3 = "&nofirst=true\" target=\"_blank\">";
line = line.replace(/(>|>>|>|>>|≫)([0-90-9]+)(-([0-90-9]+))?/g,
sp1 + "$2" + sp2
+ ("$4" ? "$2" : "$4")
+ sp3 + "$1$2$3<\/a>");
document.write(line);
</script>
ではこれでどう?
0651650
2005/09/08(木) 20:47:45ID:???0652623
2005/09/09(金) 19:15:40ID:???「>132」等の全角半角混じりでもあてはまってしまうので
([0-9]+|[0-9]+)
でした。。
>>646
>>648
2chの生datをかちゅ〜しゃdatに変換しようとしているのですが
生datを見てみると、レスアンカーは
例えば「&gt;&gt;1」だと
「<a href="../test/read.cgi/server/0123456789/1" target="_blank">&gt;&gt;1</a>」
となっているので、それらを除外させる為に前後につけています。
その正規表現も正しいのかどうか・・。
あと すみません、>>640さんや>>650さんのものだと
例えば「>90-100」だと
「〜&st=90&to=90&nofirst=true〜」となってしまうのです
望む結果は「〜&st=90&to=100&〜」なのです・・
何だか駄々をこねてるみたいで申し訳ないです・・。
0653650
2005/09/09(金) 20:44:02ID:???今度は大丈夫だと思います。
<script>
line = "&gt;2 &gt;3 &gt;4 &gt;5 &gt;6 &gt;7-8 &gt;90-100 >100-200";
sp1 = "<a href=\"http://server.2ch.net/test/+read.cgi?bbs=board&key=123456789&st=";
sp2 = "&to=";
sp3 = "&nofirst=true\" target=\"_blank\">";
function toascii(s) {
dest = "";
for (i = 0; i < s.length; i++) {
ch = s.charCodeAt(i);
0654650
2005/09/09(金) 20:45:42ID:???dest += String.fromCharCode(ch - 0xff10 + 0x30);
else
dest += s.charAt(i);
}
return dest;
}
function replacefunc(m) {
if (m.match(/(&gt;|&gt;&gt;|>|>>|≫)([0-90-9]+)([-−ー]([0-90-9]+))/)) {
return m.replace(/(&gt;|&gt;&gt;|>|>>|≫)([0-90-9]+)([-−ー]([0-90-9]+))/,
sp1 + "$2" + sp2 + "$4" + sp3 + "$1$2$3<\/a>"
).replace(/(st|to)=[0-90-9]+/g, toascii);
} else {
return m.replace(/(&gt;|&gt;&gt;|>|>>|≫)([0-90-9]+)/,
sp1 + "$2" + sp2 + "$2" + sp3 + "$1$2<\/a>"
).replace(/(st|to)=[0-90-9]+/g, toascii);
}
}
line = line.replace(/(&gt;|&gt;&gt;|>|>>|≫)([0-9]+|[0-9]+)([-−ー][0-90-9]+)?/g,
replacefunc);
document.write(line);
</script>
0655651
2005/09/10(土) 11:01:20ID:maA6hdJkPHPで全角カタカナとハイフンと全角スペースだけを通したいんだけどこれ間違えてる?
0656623
2005/09/10(土) 19:09:02ID:???すみません、後でじっくりやってみます・・・。
正規表現の内部(?)でも javascript使えるんですね。
0657名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:19:19ID:???preg_match("/^(\x83[\x40-\x96]|\x81\x40|\x81\\x5B)+$/", $nnn )
にしたら動いた。
\x5bは'['に当たるからエスケープしないとダメ
0658名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:40:59ID:???0659名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:35:06ID:???0660nobodyさん
2005/09/14(水) 09:43:56ID:krHmg2tG近くの本屋になかった。
0661nobodyさん
2005/09/14(水) 09:47:46ID:???立ち読みする必要ないなら通販で買えば。
0662nobodyさん
2005/09/15(木) 00:14:36ID:???そこそこでかいとこか、技術書みたいな本が置いてあるようなとこくらい。
オライリーが置いてあるとこでも、全部置いてあるわけじゃないから
>>661の言うように中身確認する必要がなければ通販で買っちゃうのが手っ取り早いかも。
紀伊国屋とかならネットで在庫確認出来るから、利用するのもアリ。
0663nobodyさん
2005/09/15(木) 00:17:41ID:???0664nobodyさん
2005/09/15(木) 00:45:18ID:???0665nobodyさん
2005/09/15(木) 04:31:19ID:???0666nobodyさん
2005/09/15(木) 13:19:06ID:???0667nobodyさん
2005/09/15(木) 13:30:10ID:???0668nobodyさん
2005/09/15(木) 21:28:10ID:???$temp[7] =~ /(*.)時(*.)分/;
と使うと、以下のようなメッセージが出ます。
Quantifier follows nothing in regex; marked by <--HERE in m/(* <--HERE .)時(*.)分/; at sub2.pl line 161.
初めてでるエラーメッセージなので憶測ですが、HEREで示されたメタ文字[*]が、掛け算の演算子と間違えて認識されているのでしょうか?
文字コードはShift_JIS、開業コードはCR+LFです。ぜひアドバイスお願いします。。。
0669nobodyさん
2005/09/15(木) 21:44:26ID:???0670nobodyさん
2005/09/15(木) 21:53:15ID:???ぐおおおおお、本当ですね…
こんな簡単なことでスレ汚してすいません… 回線切ってこのプログラム仕上げてから首吊ってきます…
0671nobodyさん
2005/09/15(木) 21:59:21ID:???0672nobodyさん
2005/09/16(金) 17:59:17ID:???ありがとう!
熊谷で売ってなくて、大宮のそごうでも売ってなくて、結局新宿の紀伊国屋まで行ってきたよ。
半端じゃない数だな…。
0673nobodyさん
2005/09/16(金) 18:01:35ID:???0675nobodyさん
2005/09/16(金) 19:00:48ID:???ところで、最近正規表現の入門的な書籍がたくさん出てきてるみたいだけど、
プログラミングや正規表現の初心者向けに一冊すすめるとしたらコレ、
っていうのは何かある?
0676nobodyさん
2005/09/17(土) 15:02:40ID:???0677nobodyさん
2005/09/18(日) 21:21:10ID:???3以上の数字が、特定の文字列(Xとする)の後に来た場合にマッチさせ置換します。
数字は全角でも半角でもマッチとし、マッチした部分を\\1後で使います。
数字は二桁までを範囲とします。
$pattern = "/X([0-9]?[3-9]|[0-9]?[3-9])/";
preg_replace ("$pattern", "X<span class=\"level\">$1</span>", $aaaa);
これだとうまくマッチしないのですが、何が原因でしょうか。
0678nobodyさん
2005/09/18(日) 23:33:12ID:???0679nobodyさん
2005/09/19(月) 01:36:01ID:???0680nobodyさん
2005/09/19(月) 16:33:59ID:???数量詞はregexで何にも続きません; --<によってマークされて、m/(*<--HERE。)時(*)分/のHERE; sub2.plに、161を裏打ちしてください。
0681nobodyさん
2005/09/19(月) 16:54:25ID:???"/^fuckyou$/"
0682nobodyさん
2005/09/19(月) 17:38:25ID:???0683nobodyさん
2005/09/19(月) 17:50:19ID:???表現のなかに ' やら " が出て来た場合面倒杉。
0684nobodyさん
2005/09/19(月) 18:50:05ID:XLGKZohV含まれたものをヒットさせたいのだが、うまくいかない。
$line =~ /『.*?か.*?』/g;
だと、例2のような間に』と『あるやつも引っかかってしまうのだが・・・・・・・わかる人お願い。
例1 $line = "あいうえお『かき』くけこさし『すせ』そ"; →○
例2 $line = "あい『うえお』かき『くけ』こさしすせそ"; →×
0685nobodyさん
2005/09/19(月) 18:54:01ID:???0688nobodyさん
2005/09/19(月) 21:40:28ID:???こういうのよく見るけど、
$pattern を用意して、preg_replace() かける時に
わざわざ再度ダブルクォートで囲うのって
個人的にはちょっと…怖いかも。
副作用がありそうで。
0689nobodyさん
2005/09/20(火) 23:16:09ID:???ただし、"で囲まれた文字列はスペースで分割しない
ということをやりたいんだけど、これって正規表現で
うまくできる?
例:
dir "c:\abc def" ghi jkl
dir
c:\abc def
ghi
jkl
こんな感じに分割したいです。
0690nobodyさん
2005/09/20(火) 23:38:25ID:pDhdrwjA0691nobodyさん
2005/09/21(水) 20:40:37ID:???VK_C, 57634, NOINVERT, CONTROL, VIRTKEY
VK_BACK, 57643, NOINVERT, ALT, VIRTKEY
VK_F6, 57681, NOINVERT, SHIFT, VIRTKEY
VK_Z, 57643, NOINVERT, CONTROL, VIRTKEY
これを1 or 2回の置換で下のように編集できるでしょうか?
CONTROL C, 57634
ALT BACK, 57643
SHIFT F6, 57681
CONTROL Z,57643
秀丸つかってるんですが、タグつき正規表現に関する知識足りず、
ノーマル置換とExcelでまかなっている現状です。
0692nobodyさん
2005/09/21(水) 22:26:39ID:???VK_([^,]+),\s+(\d+),\s+[^,]+,\s+([^,]+).*$ → \3 \1, \2
で駄目なの?
0694nobodyさん
2005/09/22(木) 08:50:22ID:???ありがとうございます。ただ少し手直し必要だったので、一応のせておきます。
検索 VK_\f[A-Z0-9]+, [0-9]{5}\f, [A-Z]+, \f[A-Z]+\f,.+
置換 \3 \1
でも意味はあまり理解してません。
0695nobodyさん
2005/09/23(金) 23:27:20ID:???Vn →Vn/2
例
@1 →@0
V127 →V63 V63→V31 V31→V15
というように、@とVに続く数値をそれぞれ「-1」、「1/2」になるように処理したいのですが、
どのような正規表現を記述すれば良いでしょうか?
0696695
2005/09/23(金) 23:28:24ID:???@n →@n+1
例
@0 →@1
の誤りでした。
0697nobodyさん
2005/09/24(土) 01:32:55ID:???$1eval($2/2)
0698nobodyさん
2005/09/24(土) 01:41:34ID:PQeiuh7H$valに含まれる"a"全てを"ab"に置換する
$val = "aaa";
$val =~ s/a/ab/g;
print "Content-type: text/html\n\n";
print "$val";
/gというのは繰り返しということですが、
どのような繰り返しなのか理解できていません
1.置換前$valを把握し、参照するというような形で文字を繰り返し置換する
出力結果 ababab
2.毎回$valの最初から繰り返し置換していくので
置換後の"ab"にも"a"が含まれているので永久ループになる
出力結果 aaaaa.......................... (永久に終らず)
1を望んでいるのですが2だった場合が怖くて試せません
実際はどのような結果になるのでしょうか?
もし2だった場合は実際どのように記述すればいいのかご教授してくれると助かります
0699nobodyさん
2005/09/24(土) 01:55:09ID:???まず最初の "a" に /a/ がマッチして "ab" に置換したら、
次は $val 中の次の文字 (2文字目の "a") から /a/ のマッチを開始する。
というのを繰り返すので、 2. にはならないから安心しる。
2. だったら怖くて誰も /g を使いたがらない罠。
0700nobodyさん
2005/09/24(土) 02:02:00ID:PQeiuh7H>>699
永久にはならないのですね、安心しました
これでまたいろいろ試せそうです
早い解答どうもありがとうです
0701695
2005/09/24(土) 03:26:00ID:???すみません、これFlexRenamerなどで置き換えリストを作る場合、
ファイル名置換指定: $1eval($2+1) or $1eval($2/2)
にするとして、
ファイル名検索指定: の文字列はどのように入れればいいんでしょう?
0702695
2005/09/24(土) 03:43:59ID:???@に続く数値
Vに続く数値
に特化して計算処理をさせたい次第です。
@、V 以外に続く数値(TやOなど)もテキストファイル中に含まれるのですが、
それらの数値はそのままにしておきたいのです。
0703nobodyさん
2005/09/24(土) 23:07:27ID:???> すみません、これFlexRenamerなどで置き換えリストを作る場合、
おいおい、どんな言語やソフトを使ってるかは先に言えっつーの。
で、 Flexible Renamer ってのを見てみたけど、
ファイル名置換指定で -1 とか 1/2 とかいった演算はできないみたいね。
何か適当なスクリプト言語か何かで処理した方が良さそう。
0704nobodyさん
2005/09/25(日) 21:10:04ID:???メールじゃなくても郵便でもいいや。
0705nobodyさん
2005/09/25(日) 23:03:33ID:???0706nobodyさん
2005/09/26(月) 00:12:31ID:???0707nobodyさん
2005/09/26(月) 00:15:01ID:???0708nobodyさん
2005/09/26(月) 01:14:20ID:AIxnVq6mどうしてもうまくいきません。どう書けばいいでしょうか。
やりたいこと
<HTML>で始まり、<!--ここまで-->で終わる部分を削除する。
この区間に含まれる文字や文字数は不定、日本語アリ。複数行。
書いてみてダメだった表現
<html>.*--ここまで--> ←処理されない
.*--ここまで--> ←<html>からの処理ではない。<!--ここまで-->のある行だけ削ったようだ
<html>[\s\S].*<!--ここまで--> ←処理されない
Perlメモとか読んでみましたが、・・・ごめんなさい見方がわからない(というか理解が?)
このソフトについているリファレンスを見てやってます。
0709708
2005/09/26(月) 01:27:01ID:???<HTML>
<head>
<meta http-equiv=Content-Type content=text/html; charset=Shift_JIS>
<title>test</title>
</head>
<body bgcolor="#000000">hogehoge<!--ここまで-->
test</body></html>
0710nobodyさん
2005/09/26(月) 02:04:56ID:???0712nobodyさん
2005/09/26(月) 10:50:59ID:???<A HREF=http://www.2ch.net/ TARGET="_top">2chの入り口</A><br>
<A HREF=http://info.2ch.net/guide/>2ch総合案内</A>
・・・・(ry
このような2chのメニューから、板のURLと板の名前の二つを取り出したいのですが、
うまくいきません。
自分で書いたのは、/<A HREF=(\S*?)\s?.*?>(.*?)<\/A>/ です。
0713nobodyさん
2005/09/26(月) 15:11:05ID:???そのソフトは大文字小文字無視という設定無いみたいね。BBSでやっと見つけた。
>>712
最短マッチを否定の最長マッチに置き換える手があるよ
/<A HREF=([^ >]+)[^>]*>([^<]+)<\/A>/
0714nobodyさん
2005/09/26(月) 15:59:19ID:???0716nobodyさん
2005/09/26(月) 19:11:50ID:???0719708
2005/09/26(月) 22:12:35ID:???オプションは「マルチラインモード」っていうのがありますが
マッチしてないです。
・・・って、
>>711
できました。ありがとう(T△T)
0720711
2005/09/26(月) 22:26:07ID:???そうそう。探したんだけど見つからなかった。
もし大文字でも小文字でも動くようにするなら、めんどくさいけどこうかな。
<[Hh][Tt][Mm][Ll]>[\S\s]+<!--ここまで-->
>>719
ドキュメントを見る限りだと、「マルチラインモード」は、
^ (行頭) と $ (行末) の処理にしか反映しないっぽいのよね。
0721nobodyさん
2005/09/30(金) 02:58:44ID:???彼女が医療関係の学校に通ってるんだが、実習か何かで精神
障害者の施設へ行ったそうなんだ。それが終わって会った時に、
単なる会話として「大変だった?」とか訊いてたら、「あなたと同じ
本を読んでる患者がいた」って言うんだよ。隠してあったエロ本が
見つかったのかと動揺してたら、「あれだよ、表紙に動物の絵が
書いてあるコンピュータの」って言うから、オライリーのを順番に
見せていったら「それそれ! フクロウのやつ」だって。
施設の人が言うには、その患者は絶対にその本を手放さないし、
取り上げると錯乱するからずっと持たせてあるんだってさ。
0722nobodyさん
2005/09/30(金) 04:41:15ID:???よっぽど正規表現が好きな人だったんだな・・彼(彼女)に足を向けて寝れない。福岡から見た方角を教えてくれw
0724nobodyさん
2005/09/30(金) 17:14:30ID:???ヒトの不幸は密の味ですな。
0725nobodyさん
2005/09/30(金) 17:58:49ID:???本を抱えているからといって中身を理解しているとは限らないわけで
単純に絵が気に入っているのかもしれない。
0726721
2005/09/30(金) 19:21:05ID:???いやいやw、みんなも気をつけてくれと言いたかった。
マッチがどうしてもうまくいかない時は、精神的にも
肉体的にも参ってしまうことがあるだろう?
>>725
SEとかそういった職業に就いていたことは聞いたそう。
当然ながら施設の人は(医師さえも)、「正規表現」が
何なのかも知らないわけで、彼の話を理解してくれる
相手がいないとなるといい環境ではないなと。
ひょっとしたら正規表現でしかコミュニケートできなく
なってるんじゃないか、紙と鉛筆を渡せば正規表現で
意思表示してくれるんじゃないか、などと妄想してみた。
0727nobodyさん
2005/09/30(金) 20:31:46ID:???時間は人より掛かったけど旧帝大の電子工学科卒業してるし、情報処理の資格も持ってる。
が、本業はソフト屋じゃ無く、ハードの設計開発してる。
精神科に入院した事もあるし(2度)、今の会社もそんな事も理解した上で採用してくれた。
君らが、どんだけ精神障害者に偏見持ってるのか、あるいは無知なのかはしらないが、
『こんな風にあげつらって、楽しいのか?』
0728nobodyさん
2005/09/30(金) 20:53:55ID:???世の中にはいろんな人がいるんだよね。
0729nobodyさん
2005/09/30(金) 20:56:58ID:???このへんでもういい加減やめれ。
0730nobodyさん
NGNG0731nobodyさん
2005/09/30(金) 21:38:59ID:???というのは、それ自体が一種の偏見だな。
0732nobodyさん
2005/09/30(金) 21:42:20ID:???なるほど、>>726とかは、正確な知識等に基づいて、精神障害者をあげつらってるわけね。
そりゃすばらしい。
0735nobodyさん
2005/10/02(日) 15:27:27ID:???難しいね。
0736nobodyさん
2005/10/03(月) 01:28:44ID:???4.2.1 例題について
そのためツールによっては、
示したもをサポートしていないものもある。
他にもいくつかミスがあったはず。
正規表現を扱う人はミスを見逃さない人ばっかりだと思ってました。
0737nobodyさん
2005/10/03(月) 02:57:56ID:???0741nobodyさん
2005/10/06(木) 15:28:34ID:???$xxxregexp = "%<TD WIDTH=\"448\" VALIGN=\"TOP\"><A href=\"(.+?)\">\n(.+?)\n<\/A>%";
$match_count = preg_match_all($xxxregexp, $data, $xxxs);
xxxregexpの二つめのグループ内を抽出して出力したいのですが、マッチしないようです。
二つめのグループで抽出するのは日本語なのですが、この場合どのように記述すれば正しいのでしょうか
0742nobodyさん
2005/10/06(木) 15:55:05ID:???$data = '%<TD WIDTH="448" VALIGN="TOP"><A href="foo">
ほげほげ
</A>%';
$xxxregexp = "%<TD WIDTH=\"448\" VALIGN=\"TOP\"><A href=\"(.+?)\">\n(.+?)\n</A>%";
$match_count = preg_match_all($xxxregexp, $data, $xxxs);
print($xxxs[2][0]);
0743nobodyさん
2005/10/06(木) 17:29:47ID:???もう少し考えてみます
0744nobodyさん
2005/10/06(木) 19:45:05ID:???\n じゃなくて \r\n とか \r?\n にしてみたら?
0745nobodyさん
2005/10/06(木) 20:23:02ID:???ありがとうございます orz
0746nobodyさん
2005/10/08(土) 03:47:34ID:???NOff または Noff
という文字列を正規表現で検索させる場合は
[N][Oo](n|ff)
こんな感じじゃ駄目なんですかね?
0747nobodyさん
2005/10/08(土) 05:16:33ID:???N[Oo](n|ff)
0748nobodyさん
2005/10/09(日) 11:51:52ID:???gfgfgfgfff
みたいに10桁の二つの文字列にマッチするにはどうしたらいいでつか?
0749nobodyさん
2005/10/09(日) 12:33:11ID:???不定の2種類の文字で構成されているってことだろうから
^(.)(\1*)(.)(\1|\3)*$
ただしこれは10文字以外でもマッチするからそれも入れるなら面倒そうだ
0751nobodyさん
2005/10/09(日) 16:01:03ID:???jpg以外が混じってるとうまくいきません。
どうすればいいのでしょうか?
/<img\s.*?src="(.*?\.jpg)".*?>/i
<img SRC="test_01.gif" />
<IMG src="test_02.jpg" border="0">
<img alt="test" src="test_03.jpg" />
0752nobodyさん
2005/10/09(日) 16:04:35ID:???0753nobodyさん
2005/10/09(日) 16:15:18ID:???/<img\s.*?src="(.*?\.jpg)".*?>/i だと、
【<img SRC="test_01.gif" /><IMG src="test_02.jpg" border="0">】
↑みたいに余計な部分を含んでマッチしてしまいます。
↓だけマッチするようにしたいのですが、、
【<IMG src="test_02.jpg" border="0">】
0754nobodyさん
2005/10/09(日) 16:19:18ID:???0756nobodyさん
2005/10/11(火) 13:37:02ID:???↑こちらに 「入れ子を許した括弧内にマッチさせる」 正規表現が載ってるんですが、
残念ながら perl5.5 以前では (??{〜}) の書きかたがサポートされていません。
その場合、どのように書けばいいでしょうか? 数行に渡ってもいいです。
0757nobodyさん
2005/10/11(火) 14:54:34ID:???0758nobodyさん
2005/10/11(火) 15:03:55ID:???「数行」 ってのは正規表現以外の処理入ってもよくて、例えば、
my $string = 'aa {bb} cc { dd {ee} } ff { gg { hh { ii { jj } kk } ll } mm } nn';
1 while ($string =~ s/(\{(?>[^{}]*))\{((?>[^\}]*))\}/$1\x11$2\x12/); # 中のカッコを一旦escape
while ($string =~ /(\{[^{}]*\})/g) {
local $_ = $1;
tr/\x11\x12/{}/; # 中のカッコをunescape
print $_, "\n";
}
これより上手い方法思いついたら教えてほしいのですr
0759nobodyさん
2005/10/11(火) 15:59:26ID:???正規表現以外の処理を前提にするなら、それは正規表現スレで
する質問では無くなるよな。各言語のスレへお行き。
0760nobodyさん
2005/10/11(火) 16:07:28ID:???いや、そりゃそうなんだけど、
もっとうまい正規表現があるかと思って疑問に思った核が正規表現の部分なんだから、このスレでいいかと思ったんだけどな。
perl板に行っても正規表現スレに行けって言われるのがオチなので、ダメなら諦めるわ。
0761nobodyさん
2005/10/11(火) 16:16:08ID:???そんなことはないと思うけどなあ。
Perl でのアルゴリズムの話でもあると思うので、
厶板 Perl スレあたりで聞いてみるのもアリかと。
0762nobodyさん
2005/10/11(火) 17:17:22ID:???0763nobodyさん
2005/10/11(火) 18:33:57ID:???詳しく!
0764nobodyさん
2005/10/12(水) 22:20:33ID:enZtkyi2現在はこんな感じで書いていますが「ー」などを弾いてしまうので困っています。
if( !preg_match("/[0-9\x\-\x(\x)\x[\x\]\x<\x>\x?\x\/\x\.\x\+\x\*\x_\x!\x#\x\$\x%\x~\x\|\x\@\x;\x,\x`\x{\x}]/", $R_um_name1) ){
$ERROR=$ERROR.'エラー<br>'."\n";
}
0765nobodyさん
2005/10/12(水) 22:23:30ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0767nobodyさん
2005/10/13(木) 00:27:53ID:???現在、「.dat<>」と「 (」で分割してるのですが、
0000000000.dat<>スレッドタイトル (レス数)
という形式だけでなく、スレ数の括弧が全角だったりするところもありますorz
誰か教えてください
0768nobodyさん
2005/10/13(木) 00:56:37ID:???.ノ′ } 〕 ,ノ .゙'┬′ .,ノ
ノ } ゙l、 」′ .,/′ .,ノ _,,y
.,v─ーv_ 〕 〕 .| .il゙ 《 ._ .,,l(ノ^ノ
,i(厂 _,,,从vy .,i「 .》;ト-v,|l′ _,ノ゙|.ミ,.゙'=,/┴y/
l ,zll^゙″ ゙ミ .ノ .il|′アll! .>‐〕 \ _><
《 il|′ フーv,_ .,i″ ||}ーvrリ、 ¨'‐.` {
\《 ヽ .゙li ._¨''ーv,,_ .》′ ゙゙ミ| ,r′ }
\ ,゙r_ lア' .゙⌒>-vzト .ミノ′ 〕
.゙'=ミ:┐ .「 ./ .^〃 :、_ リ .}
゙\ア' .-- ,,ノ| 、 ゙ミ} :ト
゙^ー、,,,¨ - ''¨.─ :!., リ ノ
〔^ー-v、,,,_,: i゙「 } .,l゙
l! .´゙フ'ーv .,y ] '゙ミ
| ,/゙ .ミ;.´.‐ .] ミ,
| ノ′ ヽ 〔 ミ
} } ′ } {
.| .ミ .< 〔 〕
.{ \,_ _》、 .{ .}
{ ¨^^¨′¨'ー-v-r《 〔
0769nobodyさん
2005/10/13(木) 10:37:30ID:???ココは正規表現スレです。詳しい仕様がなければ回答しません。
貴方は調べるのを面倒に感じて投げ出したのに、我々に資料集めからやれと仰るのでしょうか?
オープンソースな2chブラウザのコードを見るという手もありますが、それはこのスレの範疇にありません。
具体的な仕様の提示・スレの移動 の何れかを選択してください。
0770nobodyさん
2005/10/13(木) 12:20:37ID:4gxpiBDK立派なモノをお持ちですねw
0772nobodyさん
2005/10/13(木) 14:40:34ID:???2ch の仕様は、なにはともあれまずは monazilla.org(w の資料室を調べてみれ。
それ見てまたわかんないことがあったら、
どこまで頑張ってみたかコードを示してまたおいで。
http://www.monazilla.org/
http://www.monazilla.org/document/subjecttxt2001.html
0773nobodyさん
2005/10/13(木) 15:13:39ID:???foreach($tmp as $value) {
$tmp = split("<>", $value);
if($tmp[0]) {
$thread['key'] = $tmp[0];
list($thread['name'], $thread['res']) = split(" \(", $tmp[1]);
list($thread['key'], $tmp) = split(".dat", $thread['key']);
list($thread['res'], $tmp) = split(")", $thread['res']);
printf("\n<TR><TD><A href=\"%d\">%d</A></TD><TD>%s</TD><TD>%s</TD></TR>", $thread['key'], $thread['key'], $thread['name'], $thread['res']);
}
}
現在は、試行錯誤を繰り返しながら分割でやっているのですが、「 (」がタイトルにあると失敗します。
0774773
2005/10/13(木) 15:32:40ID:???$tmp = preg_match("/^([0-9]+)\.dat(<>|,)(.*) (\(|(|<)([0-9]+)(\)|)|>)$/", $tmp, $match);
でいいのかな・・・
111111111.dat<>テスト (実験用) (2) Part2 (100)
↓
Array
(
[0] => 111111111.dat<>テスト (実験用) (2) Part2 (100)
[1] => 111111111
[2] => <>
[3] => テスト (実験用) (2) Part2
[4] => (
[5] => 100
[6] => )
)
0776Jeffrey E.Friedl
2005/10/15(土) 20:57:56ID:???0777nobodyさん
2005/10/15(土) 21:49:52ID:???0780nobodyさん
2005/10/28(金) 06:06:55ID:???vbsで2ちゃんのidxファイル内のスレ数が抽出できません。
(\t)\8[^(\t)](\t)\9
0781nobodyさん
2005/11/06(日) 23:27:29ID:???0782nobodyさん
2005/11/08(火) 22:59:53ID:???grepで、ファイルから行を抽出したいんですが、
文字列1か、文字列2のどちらかを含む行の条件の指定って
どのように書けばよろしいのでしょうか?
0784nobodyさん
2005/11/08(火) 23:11:09ID:???\(文字列1|文字列2\)
でした
0785782
2005/11/09(水) 09:49:48ID:???レスありがとうございます。
早速試してみたのですが、どうもうまくいきません。
>>783だとsyntax errorで、
>>784だと、
grep \(s1|s2\) file だと、パイプの前後で別のコマンドとして扱われ、
s2):comannd not foundになってしまいます。
環境はCygwinなんですが・・・
0786nobodyさん
2005/11/09(水) 12:15:36ID:???言語はPHPです。
出力直前にHTMLを一括で変換しようと思っているのですが、
元のHTMLが汚く、以下のように書き方がバラバラで困っています・・・
<img src="/lib/aaa.gif">
<img src=/lib/aaa.gif> ← ダブルクォーテーションなし
<img src='/lib/aaa.gif'> ← シングルクォーテーション
<img src=lib/aaa.gif> ← 最初のスラッシュなし
0787nobodyさん
2005/11/09(水) 14:44:34ID:???まず元の HTML の書式を統一させるように変換をかけてから、パスの変換をかけるといいかも。
あるいは元の HTML 自体をあらかじめ直しておくか。
いずれにせよ、一発で全部やるのは効率悪いと思う。
0788nobodyさん
2005/11/09(水) 15:29:52ID:???([0-9][=+]?)
が64個並んでいます。
マッチした()の中身を出力するためなのですが、
([0-8][=+]?){64}
ではダメでした。
何かいい方法はあるんでしょうか?
0789788
2005/11/09(水) 15:42:44ID:???ページパスと相対パスで、絶対パスを出力する関数作って、
そこに切り出してきた相対パスを放り込む作戦はやったことがある。
>>788
下側は ([0-9][=+]?){64} の間違い。
0792nobodyさん
2005/11/09(水) 20:45:26ID:ySyrfo3jphpなんですが
$url = "http://www.hoge.com/です。http://www.ho-ge.com/もよろしく!";
$url = ereg_replace( "(http://[[:alnum:]\S!#\$%&=-~@;\+:\*,\./\?_]+)", "<a href='\\1' target='_blank'>\\1</a>", $url );
とすると、-が正規表現の対象から外れているんですがなにが悪いんでしょうか?
0794nobodyさん
2005/11/09(水) 20:50:57ID:???あと、あげてすみませんでした。
0795nobodyさん
2005/11/09(水) 20:51:31ID:???0796nobodyさん
2005/11/09(水) 22:59:58ID:???ASCII コードで '\' から '~' までの範囲の意味になっちゃうからかな。
>>794 みたいに文字クラスの先頭 (もしくは最後) に盛ってくるのが無難な希ガス。
0797nobodyさん
2005/11/10(木) 00:09:07ID:???0798nobodyさん
2005/11/10(木) 01:27:42ID:???0799nobodyさん
2005/11/10(木) 19:39:04ID:???@より後ろの文字列を取得したい場合の正規表現を教えてくださいませ
(この例の場合、def.ghiを取得したいです)
0800nobodyさん
2005/11/10(木) 20:20:35ID:???0801nobodyさん
2005/11/10(木) 20:47:37ID:???>>799
def.ghi
二度と書き込むな、クズ
0802nobodyさん
2005/11/10(木) 23:17:22ID:???入門者はそれなりの覚悟を持って欲しい。
0804nobodyさん
2005/11/11(金) 13:03:02ID:BiZLdrp5はじめの11月11日だ毛を取りたいです。
月=>11, 日=>11
教えてくださいませーーー
0807nobodyさん
2005/11/13(日) 03:51:30ID:0sDXu6D3123月0日
にもマッチしちゃうじゃん
0808nobodyさん
2005/11/13(日) 04:36:28ID:???0809nobodyさん
2005/11/16(水) 02:15:16ID:S0o67+2ohtmlから正規表現を使って一部分を取得したいのですがちょっと引っかかってます。
言語はPHPなんですがperl等でも理解はできるので宜しくお願いします。
簡単に言うと、例えば・・・
$source = "<a href=ttp://aaa.com/>あああ</a>";
と文字列があるとして URLと表示部分を取得するには現在は以下のようにしています。
// = の次から > を含まない全角を含んだ全ての文字が連続する物を取得
// > の次から < を含まない全角を含んだ全ての文字が連続する物を取得
mb_eregi("<a href=((?:(?!>).)*)>((?:(?!<).)*)</a>",$source,$reg);
これで
$reg[1] = "ttp://aaa.com/"
$reg[2] = "あああ"
上記のように取得できたんですが
$source = "<a href=ttp://aaa.com/>あああ</a><a href=ttp://ccc.com/>bbb</a>";
こんなふうに、ヒットする物が繰り返される場合
最初の "ttp://aaa.com/" と "あああ" しか取得できず
次に有る "ttp://ccc.com/" と "ddd" は無視されてしまいます
aタグは複数連なっており、全てではなく場合によって n 個目を取得したいです。
n回目にヒットした物や、次にヒットした物、を得る方法は無いでしょうか?
正規表現で何とかなる問題なのかどうかも解りません。
do while とか使わないと出来ないんでしょうか・・・
※ mb_eregi() は、大文字小文字を区別しないマルチバイト対応な関数です
0810nobodyさん
2005/11/16(水) 04:25:06ID:???欲張りじゃない繰り返しを覚える。
mb_eregi("<a href=((?:(?!>).)*?)>((?:(?!<).)*?)</a>",$source,$reg);
少し洗練。
mb_eregi("<a href=([^>]*?)>([^<]*?)</a>",$source,$reg);
0811nobodyさん
2005/11/16(水) 07:04:27ID:???0812nobodyさん
2005/11/16(水) 10:33:34ID:???有り難うございました><
0813nobodyさん
2005/11/20(日) 21:30:03ID:E/P1aLNd0814nobodyさん
2005/11/25(金) 11:16:59ID:t2pzoEwO正規表現でチェックするプログラムがあったのですが、
プログラム書いた人がもういなくてわかりません。
^([\w\.\-]+)@([\w\.\-]+)$
とかかれてました。
\wはわかるとして、「\.」、「\-」の意味がわかりませんでした。
エスケープ文字なのでしょうか?
でももしそうだとしたら、「[email protected]」
と入力してはじかれてしまうので、そういう意味ではないような気がします。
どなたか教えてもらえないでしょうか?
0815nobodyさん
2005/11/25(金) 11:30:49ID:???0816nobodyさん
2005/11/25(金) 11:57:05ID:???そのものの意味なんですね、ありがとうございます。
…ということはいけるはず…ということはプログラムがまずいのか…
0817nobodyさん
2005/11/26(土) 01:23:13ID:l7a43yMv.@.
こんな文字列にもマッチするのですが・・・
0819nobodyさん
2005/11/26(土) 15:30:09ID:???んなことないっしょ。
2バイト文字や空白や記号みたいにあからさまに不正な文字ははじけるし、
あと、後方参照用にグルーピングしてるみたいから、
チェックだけが目的じゃなさそうだし。
0820nobodyさん
2005/11/26(土) 15:48:49ID:RIen9muBなにかいい案ありませんか?
よろしくおねがいします。
0821nobodyさん
2005/11/26(土) 15:51:10ID:???0822nobodyさん
2005/11/26(土) 15:56:35ID:RIen9muB言語は一応Javaでやりたいのですけど・・
0823nobodyさん
2005/11/26(土) 16:57:57ID:???0824nobodyさん
2005/11/26(土) 16:59:12ID:RIen9muB0825nobodyさん
2005/11/26(土) 17:29:33ID:???それを読んでみてはいかが。
0826nobodyさん
2005/11/27(日) 01:17:00ID:mxeBXpTzずいぶん前から持ってます。
板違いみたいなので
どっか他のとこ逝ってきます。
ありがとうございました。
0827nobodyさん
2005/11/27(日) 03:00:37ID:2DsEIeioってもうちょっとかっこよくかけない?
0829nobodyさん
2005/11/27(日) 03:15:49ID:???0832nobodyさん
2005/11/27(日) 07:14:44ID:???「posixのsed」?
http://www.kt.rim.or.jp/~kbk/regex/regex.html#SED
() のエスケープ忘れはともかく | すら使えんようだが。
0833nobodyさん
2005/11/27(日) 08:06:25ID:???0834nobodyさん
2005/11/27(日) 20:11:19ID:???コメントタグが何個かあって、コメントタグからコメントタグまでの内容をえたい場合どういうふうに書けばいいのでしょうか。
/<!--([^-]*)-->(.*)<!--([^-]*)-->/
コメントタグは<!--hoge-->など色々で、上のように書くと、$2には最初のコメントタグから最後のコメントタグが入ってしまいます。
0835nobodyさん
2005/11/27(日) 20:13:06ID:???$2には最初のコメントタグから最後のコメントタグまでの内容が入ってしまいます。
です。
追記
改行文字は取り払った後なので、含まれていないものとします。
0836nobodyさん
2005/11/27(日) 20:18:49ID:???Perl で良いんだよね?
コメントとコメントの間が (.*) だと最長マッチしちゃうので、 (.*?) とすると良いと思う。
0838nobodyさん
2005/12/04(日) 20:14:17ID:N27X1adxこれを全角数字四桁にもマッチングさせたいんです。
これだけなら出来るのですが、またそのマッチした全角数字を半角に変換して$2に格納したいんです。
どなたかご教授頂けると幸いです。
マッチング対象文字列:([^-#=&\w+>@/×*?])(?!\d000)([1-9]\d{3})([^-\d_*×月日円年時分目→万千億兆人台枚回./@&?=])
変換後文字列:$1http://c.hibi.info/?$2.png
0839nobodyさん
2005/12/05(月) 13:49:29ID:???のように3文字までではヒットせず、
aaaaaaaaaaaaaaa
のように4文字以上だとヒットするにはどのように書けばいいですか?
0840nobodyさん
2005/12/05(月) 13:56:30ID:???0842839
2005/12/05(月) 14:20:07ID:???phpで書いているのですが、>>839の場合に、
「連続した任意のアルファベットと数字を、その連続した文字の1文字にまとめる」場合はどう書けばいいですか?
aaaaaならaに、abcdeeeeeeeefgならabcdefgにしたいです。
if(preg_match("([a-zA-Z0-9]{4})", $str))
{
$str = preg_replace("([a-zA-Z0-9]{4})", "ここの書き方がわからない…", $str);
}
0843nobodyさん
2005/12/05(月) 14:36:45ID:???http://jp.php.net/manual/ja/pcre.pattern.syntax.php
ここの書き方がわからない… は "\$1" か '$1'
0844nobodyさん
2005/12/05(月) 14:44:37ID:FuV10sP7aaaa bbbb AND cccc OR dddd eeee
のような文字列の「aaaa」と「bbbb」の間のスペースと
「dddd」と「eeee」の間のスペースを
「 AND 」に置き換えるにはどうしたらいいですか?
0847839
2005/12/05(月) 14:58:09ID:???ありがとうございます。
後方参照という言葉すら知りませんでしたが、パターンにマッチしたものが一時的にキャッシュされるんですね。
しかし、abcdeeeeeeeefgがfgになってしまいましたorz
abcdにはマッチしてないはずなのになんでだろうなぁ…
0848nobodyさん
2005/12/05(月) 15:01:55ID:???0849839
2005/12/05(月) 15:17:09ID:???ありがとうございます。しかし全然わかりませんでしたorz
察するに、"([a-zA-Z0-9]{4})"の部分が悪いのでしょうか・・・?
0851839
2005/12/05(月) 15:49:46ID:???なるほど・・・
abcdeeeeeeeeeeeeeeeeeeeefgという文字で試していたのですが、
abcd eeee eeee eeee eeee eeee fg
となって、4文字に達していないfgだけが表示されたんですね・・・
(.)\1 なんてしてみましたがうまく動いてくれませんでしたorz
なんとなく理解できてきたのでいろいろ試してみます。
何度もすみませんでした。
0852nobodyさん
2005/12/05(月) 18:36:28ID:xIS9Um0eエラーは出ないのですが、マッチしてくれません。コードは以下です。
my $data = get("http://profile.yahoo.co.jp/biz/fundamental/4302.html");
$data = decode('EUC-JP', $data);
$data =~ tr/【】//d;
print encode('Shift_JIS', $data);
0853nobodyさん
2005/12/05(月) 19:53:04ID:???0854nobodyさん
2005/12/05(月) 20:13:03ID:???([a-zA-Z0-9]{4})
これだと"abcd"でも"0123"でもとにかく4文字続いてたらマッチしちゃう。
$str = "aaaaabbccccccddddeeff";
$str = preg_replace( "/([a-zA-Z0-9])$1{3,}/", "$1", $str );
echo "$str\n";
結果:
abbcdeeff
こうしないと。
>>853
[abc]の方が短い。
0855nobodyさん
2005/12/05(月) 20:21:42ID:???普通にマッチするよ。ソースファイルはEUC?
encodeだかdecodeだかのサブルーチンが悪さしてるんでしょ。
つか、Yahooのhtmlは最初からeucなので、
そのdecodeとかいう処理が要らないのでは?
0861nobodyさん
2005/12/06(火) 16:39:35ID:???0862nobodyさん
2005/12/06(火) 22:55:04ID:???・[]はネストできる。
"xxxx[123[45]6[7]8]xxxxxx" の場合"[123[45]6[7]8]" を得たい。
・\[ とすることでエスケープできる。
"[xx\]" はマッチしない。
"[\\\[]" は全体がマッチする。
正規表現だけに頼らなければ問題ないのですが。。
0863nobodyさん
2005/12/06(火) 23:05:28ID:???0864nobodyさん
2005/12/07(水) 00:04:58ID:???0866nobodyさん
2005/12/07(水) 00:34:22ID:???0867nobodyさん
2005/12/07(水) 00:48:55ID:???\[(?:[^\[]*|\[[^\]\\\\]*(?:\\\\.[^\]\\\\]*)*\])*\]
0868nobodyさん
2005/12/07(水) 00:49:26ID:???0870nobodyさん
2005/12/07(水) 01:08:36ID:???根本的に変遷取れないのはどれ?って話
鬼車の拡張は無しの方向で
0871nobodyさん
2005/12/07(水) 01:12:12ID:???RubyはもうOnigurumaに変更されたんだっけ。
0872nobodyさん
2005/12/07(水) 01:25:15ID:???最近勉強し始めたばっかだし
解がもとまるかどうかすぐ分かるくらいになりてえ
0873862
2005/12/07(水) 01:26:25ID:???[]の数は等しくないとまずいです
等しくなくてもいいのならば
\[.+([^\\](\\\\)*)\]
になりませんか?
0874nobodyさん
2005/12/07(水) 11:18:55ID:???かなわないので、「subjectに2バイト文字が含まれないもの」を振り分けたい
だけど、正規表現でどう書くのかわかりません。
subject で始まる行が1バイト文字だけで構成されている。
にマッチで良いと思うんですが・・・・
0875nobodyさん
2005/12/07(水) 11:36:31ID:???コミュニティは黄泉がえるか メーラー電八スレッド
http://pc7.2ch.net/test/read.cgi/software/1112876529/
0876nobodyさん
2005/12/07(水) 11:58:35ID:???FROM:で始まる行にmag2という文字列が含まれていたら、
magmag.FLDに振りわけてる。
/^Subject:1バイト文字のみの1回以上の繰り返し spam.FLD
どうかくの?
0878nobodyさん
2005/12/07(水) 12:17:30ID:???0879nobodyさん
2005/12/07(水) 12:18:12ID:???もし使えたら[\x20-\x79]+とか
0880nobodyさん
2005/12/07(水) 12:26:13ID:???> アルファベット若しくは半角数字、半角記号が一回以上繰り返される場合、でいいのかな。
そのとおりです。お願いします。お手数お掛けします。
0881874=876=880
2005/12/07(水) 12:27:39ID:???0883nobodyさん
2005/12/07(水) 12:38:58ID:???マニュアル読むのも大嫌いそうだな。
http://denshin8.esprix.net/den8help/V32.1.5.3/html/usage/folder/regular_expression.htm
ソフトの設定方法なんて WebProg と関係無いし、電信八号が
正規表現エンジンに何を使ってるのかも分からんから、ここで
尋ねるより専用スレに行った方が的確な答がもらえると思うが。
0884881
2005/12/07(水) 16:14:28ID:???> マニュアル読むのも大嫌いそうだな。
すいません。ご指摘のとおりです。
助かりました。
おはずかしい。しかし望む動作はだいたい実現しました。
/^subject:[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789!"#$%&'@+]*/i spam.FLD
0885881
2005/12/07(水) 16:17:53ID:???スレ違いを承知で質問させてもらっちゃいました。スレ違いスマソ
0886nobodyさん
2005/12/07(水) 17:19:59ID:???0887nobodyさん
2005/12/07(水) 17:33:04ID:???0888nobodyさん
2005/12/09(金) 00:38:44ID:iCbRbzp1という正規表現を実現したいのですが、何かいい方法ありませんか?
0.000000000(永久につづく) 以上っていう書き方が思いつきません・・・・。
0889nobodyさん
2005/12/09(金) 00:52:32ID:???それが数値にマッチするかを調べて、0以上かの判定はスクリプトなり何なり使えば・・
0890nobodyさん
2005/12/09(金) 01:16:43ID:???0891nobodyさん
2005/12/09(金) 01:23:27ID:???([1-9][0-9]*|0)\.?[0-9]*[1-9]
0892891
2005/12/09(金) 01:24:34ID:???0893891
2005/12/09(金) 09:10:57ID:???([1-9][0-9]*|0)(\.[0-9]*[1-9])?
0894nobodyさん
2005/12/09(金) 10:21:46ID:???0895nobodyさん
2005/12/14(水) 12:30:18ID:3LtPjEbb0896nobodyさん
2005/12/14(水) 12:58:51ID:???([1-9]+[0-9]|[1-9])(\.[0-9]+)?|0+\.0*[1-9]
>>895
( ´_ゝ`)フーン
0897nobodyさん
2005/12/14(水) 13:52:46ID:???0898nobodyさん
2005/12/14(水) 13:54:14ID:???0900nobodyさん
2005/12/14(水) 14:14:29ID:???^([0-9]*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$
つーか>>888で「0以上」って0含んでもいいじゃん
「0を越える」の間違いだな
0901nobodyさん
2005/12/14(水) 14:41:58ID:???0902nobodyさん
2005/12/15(木) 20:55:26ID:???^[^Final].*\r?
と書いた所何もヒットしないんですが
自分では「先頭が」+「Finalでない」+「何でもOK」+「改行」
と書いているつもりなんですが…
どこがおかしいのか教えて下さいまし
0903nobodyさん
2005/12/15(木) 21:00:09ID:???0904nobodyさん
2005/12/15(木) 21:27:27ID:???否定したさに[]にいれてしまった…。
ttp://www.sixnine.net/regexp/
をみながらやってたんですが
{}、/(/)等の中では^は否定にはならないですか?
0905nobodyさん
2005/12/15(木) 23:40:50ID:???一般的な正規表現に文字「列」の否定はありません。Perl には ?! あるいは ?<! といった拡張が存在しますが。
プログラム中で使おうと思っているなら、先頭が Final で始まる行を正規表現で引っかけて、それ以外、とするのが簡単だと思います。
Perl だと↓な感じで。
print "NOT FINAL\n" if $str !~ /^Final/;
むりやり正規表現で表すなら ^([^F]|F[^i]|Fi[^n]|Fin[^a]|Fina[^l]).*\r? になるんじゃないかと。
0906nobodyさん
2005/12/15(木) 23:45:53ID:???丁寧に解説して頂きありがとうございます
今回はJ-editというエディタ内で置換したかったのでプログラムではできなさそうですが
勉強になりました。
0907nobodyさん
2005/12/16(金) 00:10:03ID:???0908nobodyさん
2005/12/16(金) 00:13:11ID:???0909nobodyさん
2005/12/16(金) 05:39:59ID:???エディタがサポートしてないとしたら仕方ないが、その正規表現は泥臭すぎる……
サポートしてるなら「^(?!Final).*$」がいいんじゃないか。
0910nobodyさん
2005/12/16(金) 14:20:34ID:3Jn+fCoS$val = "<TD>1000〜</TD>";
preg_match_all("/<TD>(.*)〜<\/TD>/", $val, $name);
とすると $name[0][1]には1000〜となり〜が入ります。
これをぬこうにも
$name2 = str_replace("〜", "", $name[0][1]);
$name2 = 1000〜となり〜が取れません。
0912nobodyさん
2005/12/16(金) 14:33:08ID:???0913nobodyさん
2005/12/17(土) 23:21:43ID:9ZVQMdkG0914nobodyさん
2005/12/18(日) 02:15:55ID:E4qxneT12バイト文字を全く使っていない書き込みはendにしたいのですが、
どのように表現したらいいのでしょうか?
どうぞよろしくお願いします。
0918nobodyさん
2005/12/20(火) 20:28:35ID:???ttp://ftp.iasi.roedu.net/pub/mirrors/mozdev.org/greasemonkey/linkify.user.js
で,http://〜をttp://〜も対応させたくて
const urlRegex = /\b(https?:\/\/[^\s+\”\<\>]+)/ig;
をさらに日本語対応化させて
const urlRegex = /\b([^h])(ttps?:\/\/[^\s\”\<\>\/]+\w+\/?[!#-;=\?-~]*)/ig;
としてみたんですがうまくいかず...
ttp://〜をマッチさせる方法教えてもらえないでしょうか
0919nobodyさん
2005/12/20(火) 21:23:10ID:???他の文字列とマッチングをさせたいのですが
どうすればいいでしょうか?
対象とする文字列は Mem[0]、Mem[1]…(以下、数字が増加)
になります。
正規表現の "Mem\[[0-9]*\]" で試したのですが、
上手くマッチしてくれませんでした。
何か良い方法があれば教えてください。
0920nobodyさん
2005/12/20(火) 21:43:50ID:???0921919
2005/12/20(火) 21:51:53ID:jBM1u1uW即レスありがとうございます。
ただ、 \\[ という書き方だと、
\[ (バックスラッシュ[) とマッチするような気がするのですが…
[ とマッチさせる場合は特別で、
バックスラッシュが二つ必要になるのでしょうか?
0922nobodyさん
2005/12/20(火) 22:55:56ID:???詳しくは
ttp://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#bs
0923919
2005/12/20(火) 23:45:59ID:???文字列として扱いたいのは\ではなく[と]の方です。
単に[と]を書くと、括弧の中に着目されてしまうので
\[や\]と書けば良いのかと思ったのですが、
この方法だとマッチしたという判定にならず。
他に記述方法があるのかどうかと…
分かりにくい質問でスミマセンでした。
リンク先、参考にしてみます。
0925nobodyさん
2005/12/21(水) 18:13:17ID:???その外部ファイルにどんなものが定義されているかを
htmlのtable要素を使って一覧にしたいと思い、下記のようにしましたがパースエラーと出ました。
XXX {
○○○
}
とあるものを
<table>
<tr>
<td>XXX</td><td>○○○</td>
</tr>
</table>
のように表示させたいのですがこの条件でマッチする表現を教えて頂けますか
0926nobodyさん
2005/12/21(水) 21:38:17ID:???0927925
2005/12/21(水) 23:26:34ID:???ありがとうございます。
下記のコードで試してみたところ
改行以降をひろってくれなかったのでちょっと改造にチャレンジしてきます。
-----------------------------
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<?
$lines = file('./hoge.css');
$file = implode('',$lines);
preg_match_all("/(?:^|\n)([^\s\{]+)\s*\{\s+(\S+)/",$file,$css);
for ($i=0; $i< count($css[0]); $i++) {
?>
<tr bgcolor="#9999cc">
<td><?=$css[1][$i]?></td><td><?=$css[2][$i]?></td><td><?=$css[2][$i]?></td>
</tr>
<?
}
?>
</table>
0928925
2005/12/22(木) 00:02:45ID:???最後の(\S+)を(.*)}?にして
"}が来るまでを最短マッチ"って書いたつもりでしたが.*は改行にマッチしないんですね…。
orz
むつかしいぃぃぃ
0929nobodyさん
2005/12/22(木) 01:04:42ID:???0930??
2005/12/22(木) 06:00:17ID:VYb6VtoN0931??
2005/12/22(木) 06:08:36ID:VYb6VtoNbut I can read.
I use PHP.
I want to change every HTML tags in a file as follows:
<span class='test'>abcdefg</span>
->
<b><font color=#ff0000>abcdefg</font></b>
I tried
eregi('<span class="test">.*</span>', '<b><font color=#ff0000>.*</font></b>');
It does not work.
0932nobodyさん
2005/12/22(木) 11:16:59ID:???ereg-replace ?
0933??
2005/12/22(木) 11:46:44ID:VYb6VtoNereg-replace
desu
sumimasen
0934nobodyさん
2005/12/22(木) 15:40:37ID:???http://jp2.php.net/manual/ja/function.ereg-replace.php
こんな感じでしょうかね?
$text = ' <span class=\'test\'>abcdefg</span>';
$text = ereg_replace('<span class=\'test\'>','<b><font color=#ff0000>',$text);
$text = ereg_replace('</span>','</font></b>',$text);
echo $text;
でも
http://jp2.php.net/manual/ja/function.str-replace.php に
「(正規表現んような)技巧的な置換ルールを 必要としない場合、
ereg_replace() または preg_replace()の替わりにこの関数を常用するべきです。」
ってあるね。
0936925
2005/12/25(日) 16:01:19ID:???@@@@でexplodeしてループ処理しました。
ヘタレだなぁ
orz
0937nobodyさん
2006/01/04(水) 21:06:51ID:???if(ereg("[^0-9a-zA-Z@_\-\.]+",$a)){エラー処理}
だとうまくいかないようです。どこがおかしいのでしょうか?
0938nobodyさん
2006/01/05(木) 13:07:16ID:???0939nobodyさん
2006/01/05(木) 13:10:56ID:???http://www.japan.xitami.net/nsw/php/mailaddress.phtml
http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/
http://www.din.or.jp/~ohzaki/perl.htm#Mail
0941nobodyさん
2006/01/08(日) 16:38:18ID:???どうすればいいでしょうか?
[1-12]ではもちろんだめぽですよね・・・
0942nobodyさん
2006/01/08(日) 16:42:11ID:???0944nobodyさん
2006/01/08(日) 17:30:16ID:???0945nobodyさん
2006/01/08(日) 17:37:14ID:???0946nobodyさん
2006/01/08(日) 18:03:28ID:???0947nobodyさん
2006/01/08(日) 18:16:03ID:???0948nobodyさん
2006/01/08(日) 21:20:50ID:???0949nobodyさん
2006/01/09(月) 05:39:24ID:DKtQK5nB[1-9-]であってる?
それともエスケープしなきゃならんのでしょうか。
0950nobodyさん
2006/01/09(月) 12:21:39ID:???0951nobodyさん
2006/01/09(月) 16:46:54ID:???[^hoge]だとhとoとgとe以外になってしまいますよね
0952nobodyさん
2006/01/09(月) 17:32:03ID:???少し自分で考え、実験してみてそれでもわからなくなったら質問しろ
0953nobodyさん
2006/01/09(月) 17:46:24ID:???preg_match_all("/<A>/", $var, $array1);
preg_match_all("/A/", $var, $array2);
phpなんですが、$array2にはAが入ってるんですが、
$array1には<A>が入りません。
<>が問題ありなのは分かりますが、根本的理由が分かりません。
へるぷみー
0955nobodyさん
2006/01/09(月) 18:32:37ID:???質問の時は使用言語を書いてほしいんだ。
http://www.din.or.jp/~ohzaki/regex.htm#Without
0957953
2006/01/09(月) 19:15:11ID:???タグとして処理されてました・・・鬱だ・・・
0959nobodyさん
2006/01/09(月) 21:15:45ID:???>483-491
>902-909
0960nobodyさん
2006/01/09(月) 21:16:25ID:???0961nobodyさん
2006/01/09(月) 22:03:59ID:???0962951
2006/01/09(月) 22:19:51ID:???0963nobodyさん
2006/01/09(月) 22:32:14ID:???http://www.php.net/manual/ja/ref.pcre.php
http://www.php.net/manual/ja/pcre.pattern.syntax.php#regexp.reference.assertions
0964馬鹿です
2006/01/09(月) 23:13:46ID:3zyjeInA正規表現で例えば、全角カタカナを表したら、[ァ-ヶ]と
(?:\xA5[\xA1-\xF6])と(?:\x83[\x40-\x96])とありますよね。
この中のどれを使えばいいんでしょうか?後の2つはeucとsjisと
いうことは分かるんですが結局[ァ-ヶ]を使えばどちらでも(eucとsjis)
使えるということなんでしょうか?初心者ですいません。。
0966nobodyさん
2006/01/09(月) 23:46:07ID:???せんせー、これ上手くいくんですけど。
use encoding qw(shiftjis);
my $str = "アノネキュウタロウハネ";
$str =~ /^[ァ-ヶ]+$/ and print "true";
0967nobodyさん
2006/01/10(火) 00:01:48ID:???言ってるんでしょ。あの文脈ではencodingなしでってこと
だから(ちょっと苦しい)…
で、>>965さんの疑問には、スクリプトと対象ファイルと
端末の文字コードが同じなら「はい」、そうでなきゃ、
STDIN=>'euc-jp', STDOUT=>'shiftjis'などを組み合わせなきゃ
化けるよというのが答えか。
0968nobodyさん
2006/01/14(土) 15:10:11ID:???平仮名すべてとカタカナすべてにマッチさせるのは
$s =~ /[あ-ん]|[ア-ン]/; ですか?
それとも
$s =~ /[あ-ん]|[ア-ン]/; ですか?
0969nobodyさん
2006/01/14(土) 22:33:31ID:???0970nobodyさん
2006/01/14(土) 23:10:54ID:???0971nobodyさん
2006/01/15(日) 00:17:54ID:???0972nobodyさん
2006/01/15(日) 02:59:40ID:4XZbfZj+エンコードとかしてない。
0975nobodyさん
2006/01/18(水) 02:18:59ID:4mLPDnIV禿→\x00\x00
で評価されてるわけか?
やば…なおさな…。
0976nobodyさん
2006/01/18(水) 11:59:38ID:???~ は何を表すものでしょうか?
0977nobodyさん
2006/01/18(水) 12:38:10ID:???http://httpd.apache.org/docs/2.2/ja/mod/core.html#files
0978nobodyさん
2006/01/20(金) 05:37:59ID:???サーバを移転しましてーその対応を.htaccess中でRedirectMatchにて付けようとしています
http://AAA.HOST/CCC/modules/kif/index.php/display.php?kid=123456
↓
http://BBB.HOST/CCC/index.php?cmd=kif&cmds=display&kid=123456
に飛ばしたいのですが
RedirectMatch /CCC/modules/kif/index\.php/display\.php\?kid=(.*)$
http://BBB.HOST/CCC/index.php?cmd=kif&cmds=display&kid=$1だと
引っ掛かりもしません><
ご教授頂ければ有難いですーm..m
0980nobodyさん
2006/01/20(金) 08:23:23ID:???RewriteEngine on
RewriteRule /CCC/modules/kif/index\.php/display\.php$ \
http://bbb.example.com/CCC/index.php?cmd=kif&cmds=display&%{QUERY_STRING} [R]
0981nobodyさん
2006/01/20(金) 09:57:31ID:???ありがとうですー
が下位の階層が全部403になりますorz
スレ違いっぽいんで、RewriteRuleの勉強してきますー^^
レス数が950を超えています。1000を超えると書き込みができなくなります。