正規表現道場
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/01/11(木) 02:40:43ID:uW7xEbZY・言語不問
・質問も大歓迎。使用言語を書くのを忘れずに。
正規表現と関係ない話・質問は他スレへどうぞ。
0153nobodyさん
2007/09/02(日) 11:04:51ID:tGLa/mAn正規表現とは文字列の集合を表現する手段でありますから、
ワイルドカードを用いた表現も正規表現の一種であります。
0154nobodyさん
2007/09/02(日) 11:20:25ID:tGLa/mAn> (\d+)(\.([*(\d+)])){3}
これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。
> *.168.50.5
これは数字の後、 ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が2回しか繰り返していないので、
先ほどの正規表現にマッチしません。
0155nobodyさん
2007/09/02(日) 11:40:01ID:tGLa/mAn> (\d+)(\.([*(\d+)])){3}
だと、
> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5
のすべてにマッチしないはずです。 先ほど
> これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。
と申しましたが、 より正確には、
・ 数字が1つ以上あり、 その後ピリオドと 「*」、 「(」、 数字1つ、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現
でありまして、
> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5
のどれもそのような文字列ではないからです。
0156nobodyさん
2007/09/02(日) 12:28:15ID:???0157nobodyさん
2007/09/02(日) 13:10:37ID:???数字だけがマッチする正規表現ってむずくね?
[0-9]|[12][0-2]?[0-9]|[12]?[34][0-9]|1?[5-9][0-9]|25[0-5]
とか
[0-9]|1[0-9][0-9]?|2[0-4]?[0-9]|[3-9][0-9]|25[0-5]
とか
0158nobodyさん
2007/09/02(日) 19:09:05ID:???次のような文章があったとします。
左のは行番号で、実際の文章中にはありません。
01.<div>
02.text
03.<img>
04.</div>
05.
06.<div>
07.text1
08.text2
09.</div>
10.
11.<div>
12.hoge
13.<img>
14.</div>
ちなみにドットは改行にもマッチするようにしておきます。
これに対してパターン「<div>\n(.+)\n</div>」を最小マッチさせると、
サブパターンで02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれるんですが、
今度は<img>を含むdivだけをマッチさせようとして、「<div>\n(.+\n<img>)\n<div>」で最小マッチをさせると、
02,03と07,08,09,10,11,12,13行目にマッチしてしまいます。
ここで02,03と12,13行目だけにマッチさせるにはどうすればいいのでしょうか?
いろいろ考えたのですがよくわかりません。
どなたかよろしくお願いします。
0159nobodyさん
2007/09/02(日) 19:35:53ID:/HflMMhVすいません
「02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれる」は
02,03と07,08と12,13の間違いですね
0160nobodyさん
2007/09/02(日) 20:08:53ID:???「<div>\n((?:[^<]|<(?!div))+\n<img>)\n<div>」
これでいけるんですね
0161nobodyさん
2007/09/04(火) 05:14:07ID:p30GnV0e2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
192.168.50.*
192.168.*.*
192.*.*.*
192.168.50.5
1000.1000.1000.1000
これらはすべてOKとします。
0162nobodyさん
2007/09/04(火) 09:42:52ID:???> 2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
それ先に言えよ!
どういう結果が欲しくて、どう書いたら、どうダメだったか、を具体的に書かんと。
あと、使用してる処理系 (言語やソフトウェア) も。
で、ダメだった正規表現中の [*(\d+)] だけど、
[] は「文字クラス」の正規表現なので、
>>154 の言っているように * ( 数字 + ) のいずれかの「文字」を表す。
「* または数字」を表現したいのであれば、 (\*|\d+) みたいにする。
ので、こうかな。
(\d+)(\.(\*|\d+)){3}
0163nobodyさん
2007/09/04(火) 11:21:03ID:/G1gxUUQ↑これの使い方を教えてください。言語はPerlです。
0164nobodyさん
2007/09/04(火) 11:29:12ID:???"hoge" =~ /og/;
print join(",", $`, $&, $'), "\n";
↑こんな感じで、この場合は "hoge" に対して "og" がマッチするので、
$`, $&, $' にはそれぞれ "og" の前の "h", "og", "og" の後ろの "e" が格納される。
0165nobodyさん
2007/09/04(火) 11:54:02ID:/G1gxUUQできました。ありがとうございます。
0166nobodyさん
2007/09/09(日) 01:04:12ID:???0167nobodyさん
2007/09/10(月) 21:26:12ID:lrmAiBXNPerl互換の正規表現だと
[0-9a-z]{3}\.com
0169nobodyさん
2007/09/12(水) 11:22:48ID:DkIOyoGeそれだと大文字とアンダースコアにもマッチしてしまいます。
0170nobodyさん
2007/09/15(土) 15:32:58ID:???の「ほげほげ」だけを抜き出すのにはどう表記すればいいのでしょうか?
0171nobodyさん
2007/09/15(土) 16:48:18ID:???0173nobodyさん
2007/09/16(日) 01:35:56ID:6P4HpCmYhoge
hage
123.txt
の中から 123 を抜き出したいんだけど
"/^(.+?).txt/"
だと当然
hoge
hage
123
がマッチしてしまう。
hoge や hage は任意の文字列で数字が入る可能性もあるのだけど、どうやって抽出したらいいんでしょう。
0174173
2007/09/16(日) 02:11:14ID:???strrev()
で逆順にして、今度は
txt. で再度マッチングさせたらとりあえず抽出できました。それをもう一度逆順に。
こんな力業じゃなくて他に方法があるんだろうな……。
0175nobodyさん
2007/09/16(日) 02:19:07ID:???0176nobodyさん
2007/09/16(日) 03:52:16ID:vOvwrq99前後にデリミタ (「/」) が付いているという事はPerl互換の正規表現関数を使うのでありましょうが、
そうであれば 「.」 はs修飾子がない限り改行にマッチせず、 よって
/^(.+?).txt/
は
hoge
hage
123.txt
にマッチせず、 したがって
hoge
hage
123
がキャプチャされることはないはずです。
0178nobodyさん
2007/09/16(日) 13:59:22ID:G/qusHMmheight:244pt を height:122pt…
height:244pt を height="150"に
といった具合にheight:●●ptやheight="●●"の数値部分を
$bairitsu倍して置換するにはどのようにすればいいですかね?
やろうとしてることは、エクセルで作ってHTMLで保存したものを、
A4サイズの用紙に合うようにHTMLの中にあるサイズ指定を変更したいです。
使用言語はPerlです。よろしくお願いします。
0179173
2007/09/16(日) 15:18:36ID:6P4HpCmYそれは……ヒント? それともAA?
>>176
失礼。パターンを行頭にしたり行末にしたり改行文字にしたりしてるうちにこんがらかってしまったみたい。
正確には
"/^(.+?).txt/"
でマッチしました。
>>177
コード的にはこんな感じ。
$string = "
hoge
hage
123.txt
";
preg_match("/^(.+?).txt/", $string, $matches);
preg_match("/txt.(.*?)\r/", strrev($matches[0]), $matches);
echo strrev($matches[1]);
// 結果 123
PHPも正規表現も初心者なので変な書き方してるかもだけど……。
0180173
2007/09/16(日) 15:27:38ID:???なんで「マッチしてしまう」のだろう。
0181nobodyさん
2007/09/16(日) 21:38:24ID:YMkvDZNbああ、 改行コードをCRにしているのですね。
私は
> 「.」 はs修飾子がない限り改行にマッチせず
と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。
普通はスクリプトの内部では文字列の改行コードをLFにするものですが、
何か理由があってCRにしているのですか。
0182nobodyさん
2007/09/16(日) 21:48:57ID:YMkvDZNb0183173
2007/09/17(月) 00:37:12ID:/5o1hJUZ> と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。
あー、そういう事なのか……。
勉強になります。
> 何か理由があってCRにしているのですか。
実はいつも決まった形式で入稿されるテキスト原稿を決まった形式のHTMLにするだけの仕事が定期で入ってくるんです。
で、毎回毎回コピペにつぐコピペで対応し続けるのもバカくさいので極力自動化しようと思い、PHPでシコシコ書いている次第。
そのプログラムに食わせるお客さんからの入稿原稿を元に作ってたのでCRになってました。
試しに改行コードをLFにしてm修飾子というのを試したらうまくいきました。
なるほどもらった原稿をLFに変換してから使えばいいわけだな。
ありがとーございました!
0184nobodyさん
2007/09/17(月) 01:05:58ID:T68tRmUw0185173
2007/09/17(月) 15:37:44ID:/5o1hJUZおーなるほど。ありがとうございます。
0186nobodyさん
2007/09/18(火) 14:10:13ID:hpuf++fz例)
<!--
コード
・
・
-->
HTMLタグは s/<.*?>//sg; とすれば削除できますが
なぜかコメントタグだけが残ってしまいます。
コメントタグの開始「<」と終了「>」以外の全ての文字列・記号・改行コードを削除したうえで
s/<>//g; としてみましたが削除することができません。
s/<//g;
s/>//g;
とするとなぜか削除できます。
うまく削除できる方法をご存知の方がいたら教えて下さい。
0187nobodyさん
2007/09/18(火) 16:31:55ID:???コメントタグのネストはないだろうし(JavaScriptとかで書き出してたら別だけど・・)
0188nobodyさん
2007/09/19(水) 07:54:55ID:???レスどうもありがとう。
s/<!--.*?-->//gsでもなぜかうまくいかないので
コメント行が現れたらif文でスルーするようにしました。
0189nobodyさん
2007/09/19(水) 21:54:47ID:???もちろん本人の技量にもよると思いますが、Perlをまったく知らない人間がという解釈でお願いします。
逆に文字列処理をしたいなら、Perlを一からやっとけみたいなのもありです。
0190nobodyさん
2007/09/20(木) 00:20:26ID:???preg_.*系関数ならPerl互換なのでふくろう本の記述が使えると思う。
というかね、ふくろう本のキモは処理系にほとんど依存しない3章と4章で、
それ以外はおまけだ。熟読すべし。
0191nobodyさん
2007/09/20(木) 01:57:42ID:???0193nobodyさん
2007/09/20(木) 13:36:17ID:KlmMrt1+<div align="center">F8FA</div>
</TD>
これの
「F8FA」の部分をpreg_match_all取得したいのですが、
'/<TD .*><div .*>(.*)</div><\/TD>/Ums'
としたのですが、何も取得されません。
どのように表記すれば良いのでしょうか?
0194nobodyさん
2007/09/20(木) 13:42:18ID:???こんな感じ?
0195nobodyさん
2007/09/20(木) 13:44:34ID:???'/<TD .*>\s*<div .*>(.*)<\/div>\s*<\/TD>/Ums'
0196nobodyさん
2007/09/20(木) 17:00:54ID:SqIRO2nC0197nobodyさん
2007/09/20(木) 19:58:25ID:???正規表現は二作出てるから次も一年たった今頃出るかなという予想込みだけど出なかったら出ないのもタイミングかなと。
0201nobodyさん
2007/10/02(火) 19:12:55ID:DsttFroaブラウザバージョンとOSのバージョンを取得するため
以下を作成しました
preg_match('/Mozilla\/.*(MSIE [0-9\.]+);.*(Win[^;\)]+|Mac[^;\)]+).*/i', $lua, $match)
ほぼ間違いなく取得できるのですが唯一以下形式のエージェントのみ
失敗します
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; Yahoo! JAPAN Version Windows 95/NT CD-ROM Edition 1.0.; DigExt)
古いバージョンなので切り捨てても良いとは思うのですが悔しいので
どうすれば正しく取得できるか教えていただけないでしょうか?
上記の正規表現では
MSIE 5.0
Windows 95/NT CD-ROM Edition 1.0.
ほしいのは以下
MSIE 5.0
Windows 98
0202nobodyさん
2007/10/02(火) 19:26:37ID:???こんな風でどう?
0203nobodyさん
2007/10/02(火) 19:34:02ID:DsttFroaありがとうございます
おかげ様でできました
比較検証して勉強させてもらいます
0204nobodyさん
2007/10/05(金) 23:08:47ID:ivRnBDKk$text = "第41条 [国会]は、[国権]の最高機関であつて、国の唯一の[立法機関]である。";
というテキストで[]でくくられた部分を検索エンジンに飛ばすためのリンクに書き換えるための置換処理を行いたいと考えています。
そこで下のように組んでみたところ
$text =~ s/\[(.*)\]/(<a href=\/http:\/\/foo.bar?query=\"$1\">$1<\/a>)/;
置換の対象となるカッコは行の先頭の[から行の最後の]までが対象となってしまい。上手く機能しません。
この置換処理はどうかけば、いいのでしょうか?
0205nobodyさん
2007/10/06(土) 00:06:57ID:???* や + は、そのままだと最長の文字列でマッチしてしまうので、
最短マッチにするために .*? みたいにすると良い。
あと、繰り返し処理させるために、 g オプション (/.../g みたいな) を付けるよろし。
0206nobodyさん
2007/10/06(土) 00:07:46ID:???$s=~tr/ /+/;'[<a href="http://foo.bar?query='.$s."\">$r</a>]"#ges;
こんな風でどう?
0207nobodyさん
2007/10/06(土) 00:35:40ID:1+GhnPpXどちらも上手く機能しました。
奥が深いですね
0208nobodyさん
2007/10/06(土) 16:42:21ID:kTx5Crj6C言語風には、'\\'みたいなやつです
0209nobodyさん
2007/10/06(土) 17:45:43ID:???0210nobodyさん
2007/10/06(土) 17:50:21ID:kTx5Crj6\\\ってかいたら一個認識した。
でも\\って連続する文字列は、\\\\\\だと駄目だった。
謎
検索に使ってるエディタは、UnEditorです
0211nobodyさん
2007/10/06(土) 18:29:58ID:C0xnGICK「\\\\」 というエスケープシーケンスが解釈されて文字列 「\\」 になり、 文字列 「\\」 が正規表現として解釈されて 「\」 を表すと見た。
その推測からすると、 「\\」 を表すには 「\\\\\\\\」 と打てばよい。
0212nobodyさん
2007/10/06(土) 18:34:59ID:kTx5Crj6なんという\
いけました。ありがとうございます。
0213nobodyさん
2007/10/07(日) 17:23:56ID:bdyGFUK8>>206のようにしなければならないわけですね。今、気がつきましたよ。
0214nobodyさん
2007/10/25(木) 15:30:25ID:???正規表現で文字制限をかける場合どのように書けばよいでしょうか?
日本語を含まなければ簡単そうですが、、、、
0217nobodyさん
2007/11/05(月) 12:34:21ID:???↑の様にファイルに名前をつけているのですが、これを下のようにリネームしたいのです。
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
[07.07.07]は日付です。2006/10/15なら[06.10.15]となります。
正規表現でどのように表現したら一括変換できるでしょうか?
どなたか御教示ください。
0218nobodyさん
2007/11/05(月) 12:38:12ID:EztAcqYR0220217
2007/11/05(月) 13:09:25ID:EztAcqYR失礼しましたPerl5です。
http://www.hi-ho.ne.jp/~babaq/bregexp.htmlのDLLを使って
Nameryでリネームするつもりです。
的外れなレスだったらすみません
0221nobodyさん
2007/11/05(月) 13:59:05ID:???s/^(\(.+?\))( \[.+?\] .+?)( \[.+?\])/\1\3\2/
空白の処理とか適当なので、あとは自分で調べていろいろいじってみてちょ。
0222nobodyさん
2007/11/05(月) 14:37:50ID:EztAcqYRバッチリできました!ありがとうございました
しかし依頼するカタチを間違えていましたorz
gomennnasaigomennnasaigomennnasai
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
↑ではなく↓にするにはどうすれば・・・
(愛うえお) [下記kuけこ] [07.07.07] saし素せそ
0223nobodyさん
2007/11/05(月) 14:41:33ID:EztAcqYRはぁゆとりすぎて面目ない
0224nobodyさん
2007/11/12(月) 05:47:51ID:Kg6xKnVX上記の中に、「ABC+16進数x2回」がいくつ含まれているかをPHPの正規表現で表すにはどうかけばよろしいでしょうか?
ご鞭撻よろしくお願いいたします。
0225nobodyさん
2007/11/12(月) 10:41:44ID:???正規表現はいまひとつなのでもっと上手いやり方があるかもしれないが・・・
$input_str = "あいうえおABC+F481ABC+F485かきくけこABC+F7A5さしすせそABC+F3F0ABC+F39EたちつてとABC+F65AなにぬねのABC+F485ABC+F7A5はひふへほABC+F7A5ABC+F39Eまみむめも";
echo preg_match_all("/ABC\+[A-F\d]{4}/",$input_str,$out_ary);
※$out_aryは無いとエラーになるので消さないで
0226nobodyさん
2007/11/13(火) 16:45:36ID:KDxCSN/cPHPスクリプトでpreg_match("/^[^@]+@[^.]+\..+/", $superunkoman))
という正規表現があったのですが
^[^@]+ ←最初の文字が@以外の文字の一回以上の繰り返し
@ ←で、@が入り
[^.] ←この部分が理解できません。
教えてください
0229nobodyさん
2007/11/13(火) 22:44:37ID:???phpスクリプトで
$str = ereg_replace(
"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\">\\1\\2</a>",
$str);
この正規表現の(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)の部分とhref=\"\\1\\2\">\\1\\2</a>この部分は
何を表しているのか教えてくれませんか?
0230nobodyさん
2007/11/14(水) 12:22:47ID:E8xVrSo00231nobodyさん
2007/11/14(水) 13:37:57ID:???次回からはまずマニュアル嫁
PHPマニュアルより引用
string ereg_replace ( string pattern, string replacement, string string )
pattern の中に括弧でくくられた部分 文字列が含まれている場合、
replacement の中に \\数字 のような部分文字列を埋め込むことも
できます。この部分は、 「数字」番目の括弧でくくられた部分文字列に
マッチする文字列に 置き換えられます。また、\\0 は文字列全体を
指します。9 個までの部分文字列を使うことができます。括弧は
入れ子になっていても構いません。この場合は開き括弧 '(' が
最大 9 個まで使用可能です。
0232nobodyさん
2007/11/23(金) 11:29:24ID:OIbrK2sw文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出
すことができますが、
文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。
0234nobodyさん
2007/11/23(金) 20:53:35ID:tvqFA7baすべての文字
を取り出す事は
0235nobodyさん
2007/11/27(火) 18:05:34ID:fIXcwnBhPHP5です
0236nobodyさん
2007/11/27(火) 19:15:14ID:???0237nobodyさん
2007/11/28(水) 13:29:18ID:fpWBgokpで、正規表現チェッカー
ttp://www.asterworld.com/ja/soft/regexchk.html
という物をみつけて、こりゃ便利だ!と思ってたのですが
作成した正規表現を preg_replace に設定してもマッチしてくれません。
そんなに方言があるとも思えないのですが...
C#2005の正規表現のようなのですがPerlの正規表現と何がちがうのでしょうか。
C#2005の正規表現をPerlの正規表現に変更するには無理なのでしょうか。
Perlの正規表現を作成するようなソフトはあるのでしょうか?
恐れ入りますがどなたか教えてください 頭がゴチャゴチャしてきて..
0238nobodyさん
2007/11/28(水) 15:10:44ID:???まずは、これ以上ないってくらい単純な正規表現で挙動を比較してみて、
そこから順次複雑な正規表現にしていって差異を見てみては。
0239237
2007/11/28(水) 15:41:05ID:???取り合えずアマゾンで本を注文しました。
言語ごとの差が判るようなものがあれば...
0240238
2007/11/28(水) 15:48:56ID:???それで、ぱっと見で、基本的なところは Perl と .NET とで大した差は無いと思う。
0241237
2007/11/29(木) 13:36:57ID:???お昼食べた後なんで眠くて眠くて フワァァ(/ 0 ̄)~゜
がんばってみます。。
0242nobodyさん
2007/12/11(火) 20:35:33ID:???PHPにて、特定の画像ファイル名を持つ<IMG>タグを抽出するという正規表現を作りたいのですが
上手く行かなくて困っております。
どなたか、お助けください。。。
0243nobodyさん
2007/12/12(水) 01:18:37ID:???もちっとくわしく。src属性以外に属性をもつのかとか。
多分alt属性がついていそうだけど。
preg_match('/<img .*?src=(["¥'])特定のファイル名を表す正規表現¥¥1 .*?>/', src);
とかか。今適当に作ったのでうまく動くかどうかはわからんけど
0244nobodyさん
2007/12/19(水) 16:38:31ID:H15tWjcK特定の文字列で囲まれた文字列を変換しない正規表現を教えてください。
たとえば
preg_replace("/aaa/", "[\1]", "aaa aaa aaa aaa aaa")
だと結果は "[aaa] [aaa] [aaa] [aaa] [aaa]" になりますが
preg_replace("/aaa/", "[\1]", "aaa{{{aaa aaa aaa}}}aaa")
となっていたときに
"[aaa]{{{aaa aaa aaa}}}[aaa]" という結果を取得したいんですが
思うように出来ません。
答えを直接出なくてもいいのでヒントだけでも教えてください。
0245nobodyさん
2007/12/19(水) 18:16:44ID:???後読み表明は量指定子を含められないから、もしpreg_replaceだけでやろうとするなら、
それ以外の部分を食わせておいて置き直すという、やや気持ち悪いことになると思う。
例えばこんなふうに
preg_replace('/(.*?(?:\\Q{{{\\E.*?\\Q}}}\\E.*?)*)(aaa)/', '$1[$2]', "aaa{{{aaa aaa aaa}}}aaa");
分解してから対象の部分だけ処理する等の方法も検討した方が宜しいかと。
0246nobodyさん
2007/12/19(水) 18:44:19ID:???http://www.city.ota.tokyo.jp/oshirase/mokutekibetsu/other/fusyouji_syobun/index.html
当区職員が傷害の容疑で逮捕されるという事件につきましては、新聞等での報道やホームーページで公表したところですが、今回、事実関係が明らかになり、以下のとおり懲戒処分を行いましたので公表いたします。
区民の皆様の信頼を裏切ることとなり、誠に申し訳ありません。あらためて、お詫びいたします。
懲戒処分とは
職員が一定の義務違反を犯した場合に、公務の規律と秩序を維持することを目的として、その責任を追及するために制裁として行う処分です。
大田区では懲戒処分の公表基準に基づき、免職処分をした場合や特に区民の関心が大きい事案又は社会的影響が大きい事案について、個別の懲戒処分を公表します。
(懲戒処分の制度の詳細は、大田区人事白書をご参照ください。)
処分発令日
平成19年12月19日
被処分者氏名
建築調整課 吉原 幸光
処分の内容
停職3月
処分の理由
一般非行関係(法令に違反し、全体の奉仕者たるにふさわしくない非行があったため)
事件の概要
この職員は、平成19年11月16日(金曜日)、勤務時間終了後、東神奈川駅周辺で飲食した後、帰宅途中のJR京浜東北線川崎―蒲田間の電車内において、乗客男性に全治4週間の怪我を負わせる暴行を働き、傷害の容疑により蒲田警察署に現行犯逮捕されました。
同職員は、東京簡易裁判所に起訴され、罰金刑を申し渡されています。
0247nobodyさん
2007/12/22(土) 08:43:52ID:KKfYoqPiPHPで携帯電話に文字列を表示する際に、
電話番号の部分をteltoリンクにしたいと思い以下のように書きました。
$bodySTR = preg_replace('/([-0123456789]+)/', '<a href="tel:\\1">\\1</a>',$bodySTR);
当然ながらこれだと、「100円」や「〒123-4567」にも反応してしまいます。
そこで、
「03-1234-5678」「090-1234-5678」「03−1234−5678」等にマッチして
「100」や「123-4567」にはマッチしない正規表現は可能でしょうか?
0248nobodyさん
2007/12/22(土) 14:06:28ID:???0249nobodyさん
2007/12/22(土) 16:17:35ID:???でどうよ
0250nobodyさん
2007/12/22(土) 17:39:05ID:6MoMAQ1+>>244の方と同じ様なものなのですが
"test <a href="http://test.jp"> test"
の様な文字列があった場合、タグ内のtestは変更せずに
"[test]<a href="http://test.jp">[test]"
という形にしたいのですが、どのようにすれば宜しいでしょうか。
一度置換した後、<>タグ内の物は[]を外す方法も考えてはみたのですが、
思うように動作させる事が出来ず。ご教授の程、宜しくお願い致します。
0251nobodyさん
2007/12/22(土) 17:52:18ID:???■ このスレッドは過去ログ倉庫に格納されています