[過去ログ] 正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g (989レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
746(1): 04/10/03 02:25 ID:??? AAS
スマソ。括弧を1つ取るの忘れた。
×((?=[^[:graph:]])|$)) ○((?=[^[:graph:]])|$)
747: 744 04/10/03 04:57 ID:??? AAS
>>745-746
回答ありがとうございます。
XREA を利用しているので PHP の 4.3.8 を利用しているのですが、
Warning: ereg_replace(): REG_BADRPT が出てしまいました
(いろいろ試したみたところ、 (?= に反応しているようでした)。
preg mb_ereg でも同様のコードを試してみたところ (?= はパスするものの
ereg と違って [:graph:] に日本語がマッチしてしまうようです(こっちが正しいのかな?)。
745のコードを参考に mb_ereg で以下のように書き直してみたところなんとか動作しました。
$mes = mb_ereg_replace('([a-zA-Z.]{2,})((?=[^a-zA-Z0-9<>":;.,/=?+_&@\-])|$)',
'<a href="keyword.php?q=\1">\1</a>', $mes);
省2
748: 04/10/03 05:14 ID:??? AAS
eregはPosix拡張、pregはPerl拡張。
749: 04/10/03 05:29 ID:??? AAS
正規表現ライブラリがちがううんだよ。PHPマニュアルにも書いてあるが、
例によって>>1の正規表現メモんとこ参照すると分かりやすい。
750(3): 04/10/03 22:20 ID:??? AAS
あるシステムの独自タグをあつかっています。
<XXXX Name = Test1 number = 1 value1 = "テスト" value2 = "テスト\"ああ\"" value3="テスト3 \t test">
</XXXX>
という具合に、<XXXX で始まるタグの中にかかれた各属性と値をそれぞれ分割したいのです。最初、Javaプログラムで頑張って書いていましたが、
へたれな自分のプログラムが長くなってしまいバグも所々に…。くせものが属性と値の表記で、valueというキーの値がaaaa としても、
value = aaaa の場合
value = "aaaa" の場合で異なる値にしたい(" がポイント)
value=aaaa や、途中で改行やタブが入る、
value=
省4
751: 750 04/10/03 22:21 ID:au5XkXk9(1) AAS
ageときます。スマン
752(2): 04/10/04 01:59 ID:??? AAS
>>750
その独自タグの仕様をはっきりさせなければ誰もわからんよ。
「=」の隣にスペースが入っていたりダブルクォートでくくっていたり
いなかったりしてるし。
753(1): 04/10/04 02:00 ID:??? AAS
s/<XXXX[\n\s]+([^>]*)>(.|\n)*<\/XXXX>/$1/g;
/(.+?)[\n\s]*=[\n\s]*("(\\"|[^"])+"|[^\s]+)(?:[\n\s]+|$)/; #$1=属性, $2=値
やっとできた・・・。
\"を含める方法とか、勉強になりました。
754: 753 04/10/04 02:10 ID:??? AAS
>>752
そうだ、
>value = aaaa の場合
>value = "aaaa" の場合で異なる値にしたい(" がポイント)
これがどういう結果を望んでいるのか分からないままやってたw
とりあえず、ダブルクォートは残す仕様にしておいたけど。
755: 750 04/10/04 07:43 ID:3m/jnQ5F(1) AAS
ありがとう〜(;´д`) とりあえず、ためしてみます。。
>>752にあるように、= の両隣は、スペースが入ったり、入らなかったりします。厳密にはJavaでいうところのホワイトスペースを許可してて、タブとか全角スペースなどもありです。ここは許可しないことを改善してもらうつもりです。
あとで結果報告しますね。ありがとう〜
756: 04/10/04 11:31 ID:??? AAS
可能であれば、独自な形式でなくて、
みんなが使ってるフォーマット (XML ね) にしてもらうようにした方が良いと思う。
757: 04/10/04 15:15 ID:??? AAS
同感。あとちゃんとtokenizeすればスパゲッティにはならんでしょ、このくらい。
758(3): 04/10/11 11:12 ID:ek9GJkPH(1) AAS
質問させてください。
EZwebの絵文字をShift_JISコードに変換する正規表現を書いたつもりなのですが、
”♪”マークなど一部の絵文字以外の記号にマッチしてしまいます・・・。
(使用言語:PHP 4.3.3)
$sjis='[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
$text=preg_replace("/((?:$sjis)*)([\xf3-\xf7][\x40-\xfc])/e","'\\1['.bin2hex('\\2').']'",$text);
EZweb絵文字だけにマッチさせるようにするには、どうのように直したら良いでしょうか?
よろしくお願いします。
759(4): 04/10/12 01:28 ID:??? AAS
(?:$sjis)*のところ、(?:$sjis)*?にしないと全部取っちゃうよ。
そこら辺は大丈夫?
760: 759 04/10/12 01:34 ID:??? AAS
ああ、そうか。
[顔文字]♪
のパターンが良くないのね。
今まで
♪[顔文字]
でやってたから気づかなかった。
言い訳だけど、具体的にどういうパターンがダメなのか書いてほしかったな。
761(1): 759 04/10/12 03:17 ID:??? AAS
[\xf3-\xf7][\x40-\xfc]は絵文字の文字コードってことで良いかな。
sjisの漢字の範囲は[\x81-\x9F\xE0-\xEF][\x40-\x7E\x80-\xFC]じゃない?
てなわけで、とりあえずこれ。
/($sjis)([\xf3-\xf7][\x40-\xfc])/e
でも、これでは絵文字が連続した場合は変換できない。
やはり、どこが1バイト目か2バイト目か分かるように、
あらかじめ明確に文字を区切らなきゃいけないっぽい。
$text = preg_replace("/($sjis)/", "$1 ", $text);
$text = preg_replace("/([\xf3-\xf7][\x40-\xfc])\s/e", "'['.bin2hex(\\1).'] '", $text);
省2
762(1): 04/10/12 14:09 ID:oX6FVXHm(1) AAS
AA省
763: 04/10/12 14:22 ID:??? AAS
>>762
外部リンク[htm]:homepage1.nifty.com
764: 04/10/12 14:39 ID:??? AAS
AA省
765: 759 04/10/12 14:52 ID:??? AAS
漏れならこうだな。
/((?:\x82[\x4F-\x58])+)/
上下前次1-新書関写板覧索設栞歴
あと 224 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s