トップページ⇒php
1001コメント313KB

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

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

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

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

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

過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc2.2ch.net/test/read.cgi/php/1038146241/
0002nobodyさん03/11/19 21:44ID:???
motu
0003nobodyさん03/11/19 22:56ID:???
nikomi
0004nobodyさん03/11/20 00:40ID:???
nabe
0005nobodyさん03/11/20 01:09ID:???
uma-
0006nobodyさん03/11/20 13:42ID:???
shika-
0007nobodyさん03/11/20 15:18ID:???
chou-
0008nobodyさん03/11/20 20:06ID:???
流れを断ち切るために9get。

$MyJob =~ s/仕事/労働/;
0009nobodyさん03/11/20 20:06ID:???
俺は数字が読めない馬鹿でした。
0010nobodyさん03/11/20 20:15ID:???
$Pay =~ s/残業代//;
0011nobodyさん03/11/21 14:29ID:???
初心者質問で申し訳ないです。
条文(第一条〜第九百九十九条)をアラビア数字(第1条〜第999条)に置き換える式を教えてください。

0012nobodyさん03/11/21 15:19ID:???
>>11
使用言語と環境と文字コードは?
0013未承諾広告※ ◆aiY4htt2.2 03/11/21 21:05ID:???
>>11
$arabic{'第一条'} = 1;
から、
$arabic{'第九百九十九条'} = 999;
まで入れといて、
対象文字列 $joubunn に対して置換してみるとか?

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

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

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

てゆかそもそもそのハッシュテーブルの初期化が効率悪そうな悪寒。。。
0015nobodyさん03/11/21 22:43ID:???
文字コード Shift_JIS

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

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

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

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


# なんかこれって位取りの処理の仕方が肝で、正規表現とはあんまり関係なさそうな予感。
0016nobodyさん03/11/23 02:27ID:marqbBst
検索したい字句が存在してもしなくても
マッチさせるにはどうしたらいいのでしょうか?

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

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

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

というようにしたいのです。
src="(.*?)".*?alt="(.*?)".*?<b>(.*?)</b>
↑のような正規表現を考えたのですが
これを2行目にも正しくマッチできるように
修正していただけませんか?
 
0017nobodyさん03/11/23 03:02ID:???
src="(.*?)".*?(?:alt="(.*?)".*?)?<b>(.*?)</b>
0018nobodyさん03/11/23 03:07ID:???
>>17
希望通りの結果が得られました。
どうもありがとうございます。
0019nobodyさん03/11/24 18:36ID:???
>>11のは、文字列として処理するより、いったん数値にするのがいいと思う
漢数字<->数値<->アラビア数字 で相互変換できればどういったケースでも使える

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

一応言語はJavaですが、PERLも同じらしいのですが・・
0021nobodyさん03/11/25 00:39ID:???
>>20
Perlなら /s オプション
または文字クラスで [\d\D]* とか [\s\S]* とか [\w\W]* とかどうにでもなる。
JavaScriptは知ってるがJava言語は知らん。
0022nobodyさん03/11/25 00:42ID:???
>>20

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

Javaでも全部できたみたい!!
今から意味調べます。ありがとうございます!
0023nobodyさん03/11/25 00:43ID:???
>>20
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html#DOTALL
0024nobodyさん03/11/29 00:22ID:???
PHPで質問です。

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

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

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

</xsl:stylesheet>

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

PHPのXSLT関数ってXSLファイル内のの改行を全部無視しちゃうので明示的に
改行を置かないと出力されるHTMLファイルが一行になっちゃうんですね。
0025nobodyさん03/12/01 13:50ID:???
>>24
もっとスマートな方法があるかもしれないけど、漏れだったらこうするかな。
1. <xsl:template /> の中だけ取り出す
2. 取り出したものを \n を <xsl:text>\n</xsl:text> に置換する
3. 置換したものを <xsl:template /> の中に戻す
■ このスレッドは過去ログ倉庫に格納されています