[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/03 06:01 / Filesize : 179 KB / Number-of Response : 640
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現道場



1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

604 名前:nobodyさん mailto:sage [2009/12/30(水) 09:01:55 ID:???]
ああそうか、phpだとシングルクオートで囲んでも\はエスケープに解釈されるのか。

605 名前:nobodyさん mailto:sage [2010/01/24(日) 19:36:14 ID:???]
<a href="test.php?id=0001">あいうえお</a>
<div class="id">0001</div>
<div class="time">20100101010101</div>
<div class="name">なまえ</div>
<div class="body">コメント</div>

上記のタグがあったとして、
preg_match_all("/<a href=\"test.php\?id=0001\">(.*)/<\/div>\" style=\"display: none;\">/", $hoge, $data);
のように書くと、指定したIDのaタグ内の文字がとれるのですが、その下の<div class="id">から<div class="body">の後の</div>までのタグ、
もしくはそのタグ内の文字列を抽出したいのですがうまくいきません。
それぞれのタグは1行でつながってるものとして、複数タグの範囲内を取るのは可能なのでしょうか?



606 名前:nobodyさん mailto:sage [2010/01/24(日) 20:12:18 ID:???]
複数ならpreg_match_all()使うけど一つならpreg_match()で以下のように

preg_match('/\bid=(\d+)[^>]+>([^<]*)<\/a>.*?"id">\1<.*?"time">(\d+)<.*?"name">([^<]*)<.*?"body">([^<]*)</is', $s, $match);

607 名前:nobodyさん mailto:sage [2010/01/24(日) 21:01:02 ID:???]
有難うございます。
IDが0001以外のコメントもひろっちゃっていますが、かなり希望するのに近づいてきました。

もう少し細かく書くべきでしたが、複数のIDがあり、同じIDでのコメントも複数あった場合です。
上記のタグが一つのセットとして、いくつかある中の
<a href="test.php?id=0001">あいうえお</a>のタグとコメント部分をまとめて表示させたいと思っています。
id=の部分を改変して直接0001を指定したらだめだった・・・

608 名前:nobodyさん mailto:sage [2010/01/25(月) 01:28:52 ID:???]
試行錯誤したらなんとか希望通りのものができました。
正規表現だけに囚われててプログラムがよろしくなかった…

609 名前:nobodyさん mailto:sage [2010/02/03(水) 12:34:08 ID:???]
先生質問です
Rewriteで動的URLを静的URLにしたいのです

やりたいことは6つのクエリを書き換えたいのですが
6つのうち1つのとき、2つのとき、・・・6つのときというように組み合わせがかなりの数になってしまうと思うのですが

順列で 6P1 + 6P2 + 6P3 + 6P4 + 6P5 + 6P6 と考えてよいのでしょうか?

6つも書き換えなんてやっぱ無理でしょうか?

610 名前:nobodyさん mailto:sage [2010/02/03(水) 13:22:42 ID:???]
ちょw

611 名前:nobodyさん mailto:sage [2010/03/02(火) 21:59:18 ID:???]
 

612 名前:nobodyさん mailto:sage [2010/03/02(火) 22:11:34 ID:???]
test



613 名前:nobodyさん mailto:sage [2010/03/08(月) 15:33:08 ID:???]
MySQLダンプ内の

/*------------------ここから--------------------*/
DROP TABLE IF EXISTS `table100`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `table100` (
`code1` varchar(5) default NULL,
`zip1` varchar(7) default NULL,
`address1` varchar(250) default NULL,
`address2` varchar(250) default NULL,
`div_1` varchar(1) default NULL,
`div_2` varchar(1) default NULL,
`import_date` timestamp NULL default NULL,
`rec_key1` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`rec_key1`)
) ENGINE=InnoDB AUTO_INCREMENT=121471 DEFAULT CHARSET=eucjpms;
/*!40101 SET character_set_client = @saved_cs_client */;
/*------------------ここまで--------------------*/

`table100` → `TABLE100`
`code1` → `CODE1`
など逆クォートで囲まれた小文字→大文字変換を一括で行いたいです。。
できればlinux コマンドライン、perl などでお願いします。。


614 名前:nobodyさん mailto:sage [2010/03/08(月) 18:01:54 ID:???]
たぶんs/`(\w+)`/`\U$1`/g

615 名前:nobodyさん mailto:sage [2010/04/11(日) 00:10:39 ID:???]
eregで半角記号のみをマッチさせてfalseを返す処理を組んでいるのですが、
何故か一部の漢字が引っ掛かってしまいます…確認した所では夕焼けの「夕」の
文字などです。

if(ereg ("[[:punct:]]",$_POST['名前']))

こんな感じです。今までは普通に機能していたんですが…
どなたかアドバイス頂けないでしょうか?

616 名前:nobodyさん mailto:sage [2010/04/11(日) 02:49:42 ID:???]
>>615
ereg って多バイト文字に対応してないんじゃないか?


617 名前:nobodyさん mailto:sage [2010/04/12(月) 09:23:26 ID:???]
eregはPHP5.3.0から非推奨になってるので新しく書くプログラムでは
使わないほうがいいよ。perl互換正規表現(PCRE)をお使いください。

618 名前:nobodyさん mailto:sage [2010/05/02(日) 00:32:33 ID:???]
:wink:, :lol:, :cry:, :evil:, :twisted:, :roll:, :idea:, :arrow:, :mrgreen:, :),
:-(, :!:, :?:, :oops:, :-o,:-D,8-|,8-), :??, :x:, :-P, :ase:, =:[, :ahhh:,
:star0.0:, :star0.0:, :star0.5:, :star1.0:, :!!!:, :**:,
:heart:, :!!:, :hahaha:, :chin:, :[], :|

こんな感じのスマイリーコードをマッチさせるのに、
$string = '{[:\*8=][(^:|*|a-zA-Z\-!?_\.\d\[)]*[(.*:)(.*\*)(.?)(:*[)(\])PoD\|]};
こんな感じのコードにしてみたけど、もっとスマートに出来ますか?

しかし、正規表現はパズルみたいで面白いね。

619 名前:nobodyさん mailto:sage [2010/05/02(日) 04:08:13 ID:???]
>>618
スマートさではこっちのが上だね :P
(:(wink|lol|cry|evil|twisted|roll|idea|arrow|mrgreen|\!|\?|oops|x|ase|ahhh|star0.0|star0.5|star1.0|\!\!\!|\*\*|heart|\!\!|hahaha|chin):)
|(:)|:-(|:-o|:-D|8-\||8-)|:??|:-P|=:[|:[]|:\|)

620 名前:nobodyさん mailto:sage [2010/05/02(日) 04:53:21 ID:???]
>>619
色々バグってた

my @g = $str =~ /(
(?: \:
(?: ahhh | arrow | ase | chin | cry | evil | hahaha | heart | idea | lol | mrgreen | oops | roll | star0\.0 | star0\.0 | star0\.5 | star1\.0 | twisted | wink | x | \!\!\! | \!\! | \! | \*\* | \? )
\:)
|
(?: \:-\) | \:\-\( | \:\-D | \:\-P | \:\-o | \:\?\? | \:\[\] | 8\-\| | 8\-\) | \=\:\[ )
)/gx;

621 名前:nobodyさん mailto:sage [2010/05/02(日) 10:16:16 ID:???]
>>618のだと:aaaaa:とか存在しないものまでマッチしちゃうよ?

((?:\:(?:(?:ahhh|arrow|ase|chin|cry|evil|hahaha|heart|idea|lol|mrgreen|oops|roll|star(?:0\.[05]|1\.0)|twisted|wink|x|\!{1,3}|\*{2})\:|\?[:?]|(?:\)|\[\]|\||\-[(oDP])))|(?:8\-[|)])|=\:\[)

622 名前:nobodyさん mailto:sage [2010/05/02(日) 11:44:31 ID:???]
>>619-621
そうか、未来の拡張を考えて緩くしたけど、
2バイト文字以外のブログじゃ広くマッチしすぎるって事か。。。
それじゃスマイリーコードの方に厳格なルールを...
なんって考えるのもユーザーに優しくないし。
折り合いつけるの難しいね :|





623 名前:nobodyさん mailto:sage [2010/05/02(日) 19:52:37 ID:???]
>>622
厳格さが必要でない処理が行われるというのがイメージできんのだけど、
マッチさせてどうしたいんだ?

624 名前:nobodyさん mailto:sage [2010/05/02(日) 20:21:19 ID:???]
>>623
とあるCMSで、
引用表示の時は、リンクとか画像とか取っ払う追加プログラム書いてるから。

625 名前:nobodyさん mailto:sage [2010/05/02(日) 22:35:26 ID:???]
>>624
文から推測すると、前提として普通の記事の場合はスマイリーコードとやらが画像に変換されるということがあって、
その記事が引用されてる場合はそれらを除去したいということか?

前提が正しいならスマイリーコードを画像に変換する時に使ってるルールを厳格に使うべきだし、
正しくないならリンクでも画像でもないスマイリーコードを除去する必要がないと思うんだが

626 名前:nobodyさん mailto:sage [2010/05/02(日) 23:09:45 ID:???]
>>625
正解です。
通常記事ではスマイリーコードが画像に変換されます。
で、引用時には、それら(改行,スペース,タブ,画像,リンク等)を除去して
コンパクトにしたいのです。

引用文にスマイリーが入ってもいいんですが、
記事を丸める過程で<img>タグが邪魔したので、除去するを仕様としました。


627 名前:nobodyさん mailto:sage [2010/05/03(月) 00:05:08 ID:???]
>>626
一度img要素に置換したものをベースにするというのがそもそもおかしいのでは?
もしかして表示する直前に置換してるんじゃなくて、DBに突っ込む段階で置換しちゃってるとか?
それだったら設計を見直したほうがいいと思うんだけど

628 名前:nobodyさん mailto:sage [2010/05/03(月) 00:07:04 ID:???]
>>626
じゃあやっぱり >スマイリーコードを画像に変換する時に使ってるルールを厳格に使う が一番スマートなんじゃないか
それができないなら一旦引用されていない記事として処理して、そこからimgタグを除去するとか

正規表現の話からはだいぶそれたので俺はこれ以上何も言わないことにするよ :P

629 名前:nobodyさん mailto:sage [2010/05/03(月) 00:36:11 ID:???]
>>627-628
スマイリーコードが置換されるのはDBから引っ張ってからですが、
追加プログラムの導入IDによって優先順位があるので単純ではないんです。。。

で、私も正規表現から脱線しすぎなのでこれが最後。

脱線ついでに、タイムズスクウェアで爆発物を積んでた車って。。。
家の車も正規表現でマッチしちゃうwww


630 名前:nobodyさん [2010/05/19(水) 16:47:15 ID:t/z/xcK5]
質問させてください!

ああああああ @ ABCD @ abcd

という文字を

<b>ああああああ</b> @ ABCD @ <em>abcd</em>

のように置換したい時はどういう正規表現を使えばいいのでしょうか?

よろしくお願いいたします

631 名前:nobodyさん mailto:sage [2010/05/19(水) 17:44:20 ID:???]
その例にするための条件って何?
スペース @ スペース が区切りとか?

632 名前:nobodyさん [2010/05/20(木) 19:43:15 ID:avs5qFDL]
質問させてください。

<table>
<tr>
<th>名称1</th>
<td>
値1
</td>
</tr>
<tr>
<th>名称2</th>
<td>
値2
</td>
</tr>
</table>
のようなHTMLがあります。
実際には全ての改行とインデントはトリムされてます。
この値1の部分をとるにはどのような正規表現を使えば良いでしょうか?

<th>名称1</th><td>([^<]*)</td>
のように考えてましたが値1には<img>タグが入る場合があります。
<table>や<td>が入ることはありません。




633 名前:632 mailto:sage [2010/05/20(木) 19:44:24 ID:???]
途中で投稿してしまいました。

お手数ですがご教授よろしくお願いします。
なお、当方18歳女子になります。

634 名前:nobodyさん mailto:sage [2010/05/20(木) 19:54:06 ID:???]
<th>名称1</th><td>(.*?)</td>

635 名前:nobodyさん [2010/05/20(木) 20:40:36 ID:a5arSWsA]
www19.atpages.jp/imagelinkget/get.php?t=v&u=www.phpbook.jp/regexp/ini/img/p1-1.png
ukiya.sakura.ne.jp/index.php?plugin=ref&amp;page=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F1&amp;src=regex1.png
ukiya.sakura.ne.jp/index.php?plugin=ref&amp;page=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F8&amp;src=regex8.png


636 名前:nobodyさん mailto:sage [2010/05/20(木) 21:13:11 ID:???]
<th>名称1</th><td>(値1|<img>)</td>

637 名前:632 [2010/05/21(金) 22:05:20 ID:E8tDrX2s]
ありがとうございました。
無事に解決できました。
これより踊りに行くのでこれにて失礼致します。

638 名前:nobodyさん mailto:sage [2010/05/24(月) 12:25:48 ID:???]
便乗だけど
<table>
<tr>
<th>名称1</th>
<td class="abc">
値1
</td>
</tr>
<tr>
<th>名称2</th>
<td class="def">
値2
</td>
</tr>
...あと何個か続く

この場合 <th>名称1</th><td .*>(.*?)</td> にしたのですが
何故かうまく 値1 だけ取得できません
どうも .*で余計なものも取得しているようです
どう書けばいいでしょうか
当方JKです。



639 名前:nobodyさん mailto:sage [2010/05/24(月) 14:40:31 ID:???]
<th>名称1</th><td .*?>(.*?)</td>






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<179KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef