07/09/04 11:29:12
>>163
"hoge" =~ /og/;
print join(",", $`, $&, $'), "\n";
↑こんな感じで、この場合は "hoge" に対して "og" がマッチするので、
$`, $&, $' にはそれぞれ "og" の前の "h", "og", "og" の後ろの "e" が格納される。
165:nobodyさん
07/09/04 11:54:02 /G1gxUUQ
>>164
できました。ありがとうございます。
166:nobodyさん
07/09/09 01:04:12
***.com([0-9]もしくは[a-z]の文字が3つ並び、その後に.com)の表記方法を教えてください
167:nobodyさん
07/09/10 21:26:12 lrmAiBXN
>>166
Perl互換の正規表現だと
[0-9a-z]{3}\.com
168:nobodyさん
07/09/12 05:01:53
>>166
\w{3}\.com
169:nobodyさん
07/09/12 11:22:48 DkIOyoGe
>>168
それだと大文字とアンダースコアにもマッチしてしまいます。
170:nobodyさん
07/09/15 15:32:58
<title>ほげほげ</title>
の「ほげほげ」だけを抜き出すのにはどう表記すればいいのでしょうか?
171:nobodyさん
07/09/15 16:48:18
/<title>([^<]+)<\/title>/
172:nobodyさん
07/09/15 17:17:54
>>171
ありがとうございます。
173:nobodyさん
07/09/16 01:35:56 6P4HpCmY
PHP 4.4.7で
hoge
hage
123.txt
の中から 123 を抜き出したいんだけど
"/^(.+?).txt/"
だと当然
hoge
hage
123
がマッチしてしまう。
hoge や hage は任意の文字列で数字が入る可能性もあるのだけど、どうやって抽出したらいいんでしょう。
174:173
07/09/16 02:11:14
マッチした文字列を
strrev()
で逆順にして、今度は
txt. で再度マッチングさせたらとりあえず抽出できました。それをもう一度逆順に。
こんな力業じゃなくて他に方法があるんだろうな……。
175:nobodyさん
07/09/16 02:19:07
^^
176:nobodyさん
07/09/16 03:52:16 vOvwrq99
>>173
前後にデリミタ (「/」) が付いているという事はPerl互換の正規表現関数を使うのでありましょうが、
そうであれば 「.」 はs修飾子がない限り改行にマッチせず、 よって
/^(.+?).txt/
は
hoge
hage
123.txt
にマッチせず、 したがって
hoge
hage
123
がキャプチャされることはないはずです。
177:nobodyさん
07/09/16 12:32:40
>>173
まあとにかく「マッチしてしまう」とかいうそのコードを晒してみ。
178:nobodyさん
07/09/16 13:59:22 G/qusHMm
$bairitsu = 0.5;という風に$bairitsuに倍率を入れておいて
height:244pt を height:122pt…
height:244pt を height="150"に
といった具合にheight:●●ptやheight="●●"の数値部分を
$bairitsu倍して置換するにはどのようにすればいいですかね?
やろうとしてることは、エクセルで作ってHTMLで保存したものを、
A4サイズの用紙に合うようにHTMLの中にあるサイズ指定を変更したいです。
使用言語はPerlです。よろしくお願いします。
179:173
07/09/16 15:18:36 6P4HpCmY
>>175
それは……ヒント? それとも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も正規表現も初心者なので変な書き方してるかもだけど……。
180:173
07/09/16 15:27:38
あれ?正確にはも何も最初に書いたのであってるなあ。
なんで「マッチしてしまう」のだろう。
181:nobodyさん
07/09/16 21:38:24 YMkvDZNb
>>179
ああ、 改行コードをCRにしているのですね。
私は
> 「.」 はs修飾子がない限り改行にマッチせず
と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。
普通はスクリプトの内部では文字列の改行コードをLFにするものですが、
何か理由があってCRにしているのですか。
182:nobodyさん
07/09/16 21:48:57 YMkvDZNb
改行コードがLFなら、 m修飾子を使うことにより 「^」 が行頭にマッチするようになるのです。
183:173
07/09/17 00:37:12 /5o1hJUZ
>>181
> と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。
あー、そういう事なのか……。
勉強になります。
> 何か理由があってCRにしているのですか。
実はいつも決まった形式で入稿されるテキスト原稿を決まった形式のHTMLにするだけの仕事が定期で入ってくるんです。
で、毎回毎回コピペにつぐコピペで対応し続けるのもバカくさいので極力自動化しようと思い、PHPでシコシコ書いている次第。
そのプログラムに食わせるお客さんからの入稿原稿を元に作ってたのでCRになってました。
試しに改行コードをLFにしてm修飾子というのを試したらうまくいきました。
なるほどもらった原稿をLFに変換してから使えばいいわけだな。
ありがとーございました!
184:nobodyさん
07/09/17 01:05:58 T68tRmUw
あと1つ指摘しますと、 「.txt」 は 「\.txt」 にすべきですね。
185:173
07/09/17 15:37:44 /5o1hJUZ
> あと1つ指摘しますと、 「.txt」 は 「\.txt」 にすべきですね。
おーなるほど。ありがとうございます。
186:nobodyさん
07/09/18 14:10:13 hpuf++fz
Perlを使って、アフィリエイトのコードやJavaScriptなどを含むコメントタグがなぜか削除できません。
例)
<!--
コード
・
・
-->
HTMLタグは s/<.*?>//sg; とすれば削除できますが
なぜかコメントタグだけが残ってしまいます。
コメントタグの開始「<」と終了「>」以外の全ての文字列・記号・改行コードを削除したうえで
s/<>//g; としてみましたが削除することができません。
s/<//g;
s/>//g;
とするとなぜか削除できます。
うまく削除できる方法をご存知の方がいたら教えて下さい。
187:nobodyさん
07/09/18 16:31:55
前処理としてまず s/<!--.*?-->//gs やってみたら?
コメントタグのネストはないだろうし(JavaScriptとかで書き出してたら別だけど・・)
188:nobodyさん
07/09/19 07:54:55
>>187
レスどうもありがとう。
s/<!--.*?-->//gsでもなぜかうまくいかないので
コメント行が現れたらif文でスルーするようにしました。
189:nobodyさん
07/09/19 21:54:47
PHPで正規表現勉強したいんですが、オライリーのふくろう本を読めるでしょうか?
もちろん本人の技量にもよると思いますが、Perlをまったく知らない人間がという解釈でお願いします。
逆に文字列処理をしたいなら、Perlを一からやっとけみたいなのもありです。
190:nobodyさん
07/09/20 00:20:26
>>189
preg_.*系関数ならPerl互換なのでふくろう本の記述が使えると思う。
というかね、ふくろう本のキモは処理系にほとんど依存しない3章と4章で、
それ以外はおまけだ。熟読すべし。
191:nobodyさん
07/09/20 01:57:42
ありがとう。時期を見計らって購入するよ。第三版出るみたいだし
192:nobodyさん
07/09/20 02:42:28
>>191
え、日本語訳出るの?
193:nobodyさん
07/09/20 13:36:17 KlmMrt1+
<TD width="52" height="25" bordercolor="#CCCCCC" valign="middle">
<div align="center">F8FA</div>
</TD>
これの
「F8FA」の部分をpreg_match_all取得したいのですが、
'/<TD .*><div .*>(.*)</div><\/TD>/Ums'
としたのですが、何も取得されません。
どのように表記すれば良いのでしょうか?
194:nobodyさん
07/09/20 13:42:18
/<TD.*?><div.*?>(.*)?</div><\/TD>/
こんな感じ?
195:nobodyさん
07/09/20 13:44:34
試してないけどひとまずパッと見でおかしそうなのを直すとこう?
'/<TD .*>\s*<div .*>(.*)<\/div>\s*<\/TD>/Ums'
196:nobodyさん
07/09/20 17:00:54 SqIRO2nC
'#<TD(?:\s[^>]*)?>\s*<div(?:\s[^>]*)?>(.*)</div>\s*</TD>#ms'
197:nobodyさん
07/09/20 19:58:25
>>193
正規表現は二作出てるから次も一年たった今頃出るかなという予想込みだけど出なかったら出ないのもタイミングかなと。
198:nobodyさん
07/09/20 22:27:42
>>197
日本語でおk
199:nobodyさん
07/09/20 23:09:32
>>198
おk!=日本語
200:nobodyさん
07/09/21 00:43:48
>>191
ソースは?
201:nobodyさん
07/10/02 19:12:55 DsttFroa
PHPの正規表現でユーザーエージェント(IE限定)から
ブラウザバージョンと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
202:nobodyさん
07/10/02 19:26:37
m#(MSIE\D*[\d\.]+).*?((?:Win|Mac)\D+\d+)#
こんな風でどう?
203:nobodyさん
07/10/02 19:34:02 DsttFroa
>>202
ありがとうございます
おかげ様でできました
比較検証して勉強させてもらいます
204:nobodyさん
07/10/05 23:08:47 ivRnBDKk
質問です
$text = "第41条 [国会]は、[国権]の最高機関であつて、国の唯一の[立法機関]である。";
というテキストで[]でくくられた部分を検索エンジンに飛ばすためのリンクに書き換えるための置換処理を行いたいと考えています。
そこで下のように組んでみたところ
$text =~ s/\[(.*)\]/(<a href=\/http:\/\/foo.bar?query=\"$1\">$1<\/a>)/;
置換の対象となるカッコは行の先頭の[から行の最後の]までが対象となってしまい。上手く機能しません。
この置換処理はどうかけば、いいのでしょうか?
205:nobodyさん
07/10/06 00:06:57
>>204
* や + は、そのままだと最長の文字列でマッチしてしまうので、
最短マッチにするために .*? みたいにすると良い。
あと、繰り返し処理させるために、 g オプション (/.../g みたいな) を付けるよろし。
206:nobodyさん
07/10/06 00:07:46
$text=~ s#\[(.*?)\]#my$r=$1;(my$s=$1)=~s/([^\w ])/'%'.unpack('H2',$1)/ge;
$s=~tr/ /+/;'[<a href="URLリンク(foo.bar?query=)'.$s."\">$r</a>]"#ges;
こんな風でどう?
207:nobodyさん
07/10/06 00:35:40 1+GhnPpX
>>205-206
どちらも上手く機能しました。
奥が深いですね
208:nobodyさん
07/10/06 16:42:21 kTx5Crj6
普通の文字として\を表現するにはどうすればいいですか?
C言語風には、'\\'みたいなやつです
209:nobodyさん
07/10/06 17:45:43
まずはそれを試してみてください
210:nobodyさん
07/10/06 17:50:21 kTx5Crj6
ためしたけど、駄目でした。
\\\ってかいたら一個認識した。
でも\\って連続する文字列は、\\\\\\だと駄目だった。
謎
検索に使ってるエディタは、UnEditorです
211:nobodyさん
07/10/06 18:29:58 C0xnGICK
>>210
「\\\\」 というエスケープシーケンスが解釈されて文字列 「\\」 になり、 文字列 「\\」 が正規表現として解釈されて 「\」 を表すと見た。
その推測からすると、 「\\」 を表すには 「\\\\\\\\」 と打てばよい。
212:nobodyさん
07/10/06 18:34:59 kTx5Crj6
>>211
なんという\
いけました。ありがとうございます。
213:nobodyさん
07/10/07 17:23:56 bdyGFUK8
半角英数文字だと>>205の方法でOKなんすですが、日本語の文字列の場合、エンコードする必要があるので
>>206のようにしなければならないわけですね。今、気がつきましたよ。
214:nobodyさん
07/10/25 15:30:25
phpで、変数にファイル名を入れて処理したいんですが
正規表現で文字制限をかける場合どのように書けばよいでしょうか?
日本語を含まなければ簡単そうですが、、、、
215:nobodyさん
07/10/25 16:34:35
>>214
どゆこと?どんな制限をかけたい?
216:nobodyさん
07/10/27 01:42:21
>>214
つマルチバイト
217:nobodyさん
07/11/05 12:34:21
(愛うえお) [下記kuけこ] saし素せそ [07.07.07]
↑の様にファイルに名前をつけているのですが、これを下のようにリネームしたいのです。
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
[07.07.07]は日付です。2006/10/15なら[06.10.15]となります。
正規表現でどのように表現したら一括変換できるでしょうか?
どなたか御教示ください。
218:nobodyさん
07/11/05 12:38:12 EztAcqYR
もしスレ違いでしたら案内していただけると助かります
219:nobodyさん
07/11/05 12:47:34
>>217
まずは >>1 の二項目。
220:217
07/11/05 13:09:25 EztAcqYR
>>219
失礼しましたPerl5です。
URLリンク(www.hi-ho.ne.jp)のDLLを使って
Nameryでリネームするつもりです。
的外れなレスだったらすみません
221:nobodyさん
07/11/05 13:59:05
「連続置換・マクロ」にチェックして、こんなんでどう?
s/^(\(.+?\))( \[.+?\] .+?)( \[.+?\])/\1\3\2/
空白の処理とか適当なので、あとは自分で調べていろいろいじってみてちょ。
222:nobodyさん
07/11/05 14:37:50 EztAcqYR
>>221
バッチリできました!ありがとうございました
しかし依頼するカタチを間違えていましたorz
gomennnasaigomennnasaigomennnasai
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
↑ではなく↓にするにはどうすれば・・・
(愛うえお) [下記kuけこ] [07.07.07] saし素せそ
223:nobodyさん
07/11/05 14:41:33 EztAcqYR
間違えた>>222は無視してください
はぁゆとりすぎて面目ない
224:nobodyさん
07/11/12 05:47:51 Kg6xKnVX
「あいうえおABC+F481ABC+F485かきくけこABC+F7A5さしすせそABC+F3F0ABC+F39EたちつてとABC+F65AなにぬねのABC+F485ABC+F7A5はひふへほABC+F7A5ABC+F39Eまみむめも」
上記の中に、「ABC+16進数x2回」がいくつ含まれているかをPHPの正規表現で表すにはどうかけばよろしいでしょうか?
ご鞭撻よろしくお願いいたします。
225:nobodyさん
07/11/12 10:41:44
>>224
正規表現はいまひとつなのでもっと上手いやり方があるかもしれないが・・・
$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は無いとエラーになるので消さないで
226:nobodyさん
07/11/13 16:45:36 KDxCSN/c
質問です
PHPスクリプトでpreg_match("/^[^@]+@[^.]+\..+/", $superunkoman))
という正規表現があったのですが
^[^@]+ ←最初の文字が@以外の文字の一回以上の繰り返し
@ ←で、@が入り
[^.] ←この部分が理解できません。
教えてください
227:nobodyさん
07/11/13 17:15:59
>>226
ドット以外の文字列が1つ以上
hoge@.ドメイン.ne.jp
だとか画駄目ってことじゃないの?
228:nobodyさん
07/11/13 17:39:32
>>227
ありがとうございました。そのとおりですね
229:nobodyさん
07/11/13 22:44:37
質問です
phpスクリプトで
$str = ereg_replace(
"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\">\\1\\2</a>",
$str);
この正規表現の(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)の部分とhref=\"\\1\\2\">\\1\\2</a>この部分は
何を表しているのか教えてくれませんか?
230:nobodyさん
07/11/14 12:22:47 E8xVrSo0
あげわすれ
231:nobodyさん
07/11/14 13:37:57
>>230
次回からはまずマニュアル嫁
PHPマニュアルより引用
string ereg_replace ( string pattern, string replacement, string string )
pattern の中に括弧でくくられた部分 文字列が含まれている場合、
replacement の中に \\数字 のような部分文字列を埋め込むことも
できます。この部分は、 「数字」番目の括弧でくくられた部分文字列に
マッチする文字列に 置き換えられます。また、\\0 は文字列全体を
指します。9 個までの部分文字列を使うことができます。括弧は
入れ子になっていても構いません。この場合は開き括弧 '(' が
最大 9 個まで使用可能です。
232:nobodyさん
07/11/23 11:29:24 OIbrK2sw
正規表現を先輩から教えてもらったのですが、
文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出
すことができますが、
文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。
233:nobodyさん
07/11/23 15:30:11
>>5
234:nobodyさん
07/11/23 20:53:35 tvqFA7ba
それは無理ですよ
すべての文字
を取り出す事は
235:nobodyさん
07/11/27 18:05:34 fIXcwnBh
Dカップ以上の25歳以下で抽出したいです
PHP5です
236:nobodyさん
07/11/27 19:15:14
[D-Z]カップ.*(1?[0-9]|2[0-5])歳
237:nobodyさん
07/11/28 13:29:18 fpWBgokp
PHPで正規表現であれやこれやと苦戦してます。
で、正規表現チェッカー
URLリンク(www.asterworld.com)
という物をみつけて、こりゃ便利だ!と思ってたのですが
作成した正規表現を preg_replace に設定してもマッチしてくれません。
そんなに方言があるとも思えないのですが...
C#2005の正規表現のようなのですがPerlの正規表現と何がちがうのでしょうか。
C#2005の正規表現をPerlの正規表現に変更するには無理なのでしょうか。
Perlの正規表現を作成するようなソフトはあるのでしょうか?
恐れ入りますがどなたか教えてください 頭がゴチャゴチャしてきて..
238:nobodyさん
07/11/28 15:10:44
もっとかなり基本的なところで勘違いしているんではないかと想像。
まずは、これ以上ないってくらい単純な正規表現で挙動を比較してみて、
そこから順次複雑な正規表現にしていって差異を見てみては。
239:237
07/11/28 15:41:05
ネットで調べても、どの言語の正規表現なのか今ひとつ判らないので
取り合えずアマゾンで本を注文しました。
言語ごとの差が判るようなものがあれば...
240:238
07/11/28 15:48:56
C# なら .NET なんだろうけど、「詳説 正規表現 (第2版)」には差異などが載ってる。
それで、ぱっと見で、基本的なところは Perl と .NET とで大した差は無いと思う。
241:237
07/11/29 13:36:57
「正規表現の達人」って本を手にして今、読んでますが、
お昼食べた後なんで眠くて眠くて フワァァ(/ 0 ̄)~゜
がんばってみます。。
242:nobodyさん
07/12/11 20:35:33
すみません、ヘルプをお願いします。
PHPにて、特定の画像ファイル名を持つ<IMG>タグを抽出するという正規表現を作りたいのですが
上手く行かなくて困っております。
どなたか、お助けください。。。
243:nobodyさん
07/12/12 01:18:37
>>242
もちっとくわしく。src属性以外に属性をもつのかとか。
多分alt属性がついていそうだけど。
preg_match('/<img .*?src=(["¥'])特定のファイル名を表す正規表現¥¥1 .*?>/', src);
とかか。今適当に作ったのでうまく動くかどうかはわからんけど
244:nobodyさん
07/12/19 16:38:31 H15tWjcK
PHPのpreg_replaceなんですが、おたたすけ願います。
特定の文字列で囲まれた文字列を変換しない正規表現を教えてください。
たとえば
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]" という結果を取得したいんですが
思うように出来ません。
答えを直接出なくてもいいのでヒントだけでも教えてください。
245:nobodyさん
07/12/19 18:16:44
>>244
後読み表明は量指定子を含められないから、もしpreg_replaceだけでやろうとするなら、
それ以外の部分を食わせておいて置き直すという、やや気持ち悪いことになると思う。
例えばこんなふうに
preg_replace('/(.*?(?:\\Q{{{\\E.*?\\Q}}}\\E.*?)*)(aaa)/', '$1[$2]', "aaa{{{aaa aaa aaa}}}aaa");
分解してから対象の部分だけ処理する等の方法も検討した方が宜しいかと。
246:nobodyさん
07/12/19 18:44:19
大田区ホームページ:職員の不祥事について(処分の公表)
URLリンク(www.city.ota.tokyo.jp)
当区職員が傷害の容疑で逮捕されるという事件につきましては、新聞等での報道やホームーページで公表したところですが、今回、事実関係が明らかになり、以下のとおり懲戒処分を行いましたので公表いたします。
区民の皆様の信頼を裏切ることとなり、誠に申し訳ありません。あらためて、お詫びいたします。
懲戒処分とは
職員が一定の義務違反を犯した場合に、公務の規律と秩序を維持することを目的として、その責任を追及するために制裁として行う処分です。
大田区では懲戒処分の公表基準に基づき、免職処分をした場合や特に区民の関心が大きい事案又は社会的影響が大きい事案について、個別の懲戒処分を公表します。
(懲戒処分の制度の詳細は、大田区人事白書をご参照ください。)
処分発令日
平成19年12月19日
被処分者氏名
建築調整課 吉原 幸光
処分の内容
停職3月
処分の理由
一般非行関係(法令に違反し、全体の奉仕者たるにふさわしくない非行があったため)
事件の概要
この職員は、平成19年11月16日(金曜日)、勤務時間終了後、東神奈川駅周辺で飲食した後、帰宅途中のJR京浜東北線川崎―蒲田間の電車内において、乗客男性に全治4週間の怪我を負わせる暴行を働き、傷害の容疑により蒲田警察署に現行犯逮捕されました。
同職員は、東京簡易裁判所に起訴され、罰金刑を申し渡されています。
247:nobodyさん
07/12/22 08:43:52 KKfYoqPi
すみません、教えてください。
PHPで携帯電話に文字列を表示する際に、
電話番号の部分を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」にはマッチしない正規表現は可能でしょうか?
248:nobodyさん
07/12/22 14:06:28
可能です
249:nobodyさん
07/12/22 16:17:35
/(0¥d+-¥d{1,4}-¥d{4})/
でどうよ
250:nobodyさん
07/12/22 17:39:05 6MoMAQ1+
perlの正規表現について質問です。
>>244の方と同じ様なものなのですが
"test <a href="URLリンク(test.jp)<)">[test]"
という形にしたいのですが、どのようにすれば宜しいでしょうか。
一度置換した後、<>タグ内の物は[]を外す方法も考えてはみたのですが、
思うように動作させる事が出来ず。ご教授の程、宜しくお願い致します。
251:nobodyさん
07/12/22 17:52:18
s/(<.*?>|test)/$1?$1:"[$2]"/ges
252:250
07/12/22 18:04:13
>>251
なるほど、どうも有難う御座いました!
253:nobodyさん
08/01/14 12:16:38 6AXqvVgD
時間(13:00:00~18:00:00)までを正規表現であらわしたいのですが、
1[3-8]:[0-5][0-9]:[0-5][0-9]
という感じに今なっています
誰が見てもわかりやすいしこれでもいいのですが、もっと短い書き方はないものでしょうか?
[0-5][0-9]ここが反復なので、([0-5][0-9]:?){2}とか思いつくのですが、
これだと最後にコロンが入っててもマッチしてしまうので回避できるような書き方はないものかなぁと。
254:nobodyさん
08/01/14 13:51:53
1[3-8](?::[0-5]\d){2}
255:nobodyさん
08/01/15 02:35:00 HyHnFj45
私が小学生の頃、
日本中でノストラダムスの予言が大流行していた。
「1999年の7月に人類は滅亡する!」
という例のお騒がせ終末予言である。
大人になって社会に出て働きだして、
あくせくと忙しく日々を過ごしながら、
1999年は、
ありふれた日常の中であっさりと過ぎていった。
人類は滅ばなかった。
これからここで、
1999年に起こるかもしれなかった人類の壊滅的破局を、
誰にも知られずにこっそりと回避させた人たちがいた...
という設定で、
荒唐無稽なストーリーを描いてみたい。
無論、100%完全なフィクションである。
URLリンク(www5.diary.ne.jp)
256:nobodyさん
08/01/20 11:20:53 TPbCvsXG
/([^>|\+|\s]+)\s*([>|\+]?)\s*/g
この正規表現はどういうことでしょう?
何にマッチさせようとしているのでしょうか。
JavaScriptです。
257:nobodyさん
08/01/20 11:37:26
[]の中で|を使ってOR条件にしてるから書いた人は勘違いしてる
258:nobodyさん
08/01/20 12:50:55 TPbCvsXG
本来なにをしたかったんでしょうか・・・。
259:nobodyさん
08/01/21 16:00:34
PHPの正規表現についての質問です。
2chのdatを各要素毎にキャプチャしたいのですが、
preg_math_all('/((.*)<>)*/', $dat, $match);
と書いて実行すると全体が丸々$matchへ格納されます。
$datへは「 要素1<>要素2<>要素3<>要素4<>要素5 」という形式のデータが入っており要素5は1行目にのみ存在します。
また、各要素は空欄の場合もあります。
初歩的な質問で申し訳ありませんが、よろしくお願いします。
260:nobodyさん
08/01/21 16:01:39
>>258
こちとらお前さんにそれを聞きてえぐらいだよ。
261:nobodyさん
08/01/21 16:03:38
>>259
preg_split で "<>" で配列にばらした方が扱いやすいかも。
262:259
08/01/21 16:15:53
>>261
レスありがとうございます。
確かにphpには要素を分解する為の便利な関数が始めから用意されておりますが、今回はあえてpreg_matchを用いて自身で分解してみたく思います。
自分にはハードルが高い気もするので、手始めに要素5だけを取り出そうと挑戦してみたのですが、
/<>(.+)$/ と書くと要素3<>要素4<>要素5がキャプチャされてしまいます。
やはり当方の正規表現に対する解釈が根本的に間違っているのでしょうか。
連投になり大変申し訳ないのですが、こちらの質問へのみご回答お願いいたします。
(>>259は回答を得ましても自分には理解の範疇を超えていると判断しましたので)
263:nobodyさん
08/01/21 19:42:35
[^<>]
264:259
08/01/21 20:27:24
自己解決しました
265:nobodyさん
08/01/21 22:14:14
>>264
どう解決したかくらいは書いてもバチは当たらなくってよ。
266:nobodyさん
08/01/30 11:50:28
perlのgrepで大文字小文字の区別をつけて検索したいです。
@hitlist = grep(/$search_word/i, @search_list);
これを、
@hitlist = grep(/$search_word/$serch_option, @search_list);
($serch_optionにはiやgを事前に設定)
こんな感じにしたいのですが、なんかいい案はありますか?
if文で分岐させるしかないですか?
267:nobodyさん
08/01/30 13:19:43
大小文字区別つけて検索したいならオプションなしで固定でいいでしょ
そこでgオプション使うケースなんてないでしょ
268:nobodyさん
08/01/30 16:28:40
>>266
質問が要領を得てないんだろうけど、
大文字小文字区別つけるかつけないかを切り替えたい、って話ではないかと。
どうすれば良いのかは知らないけど。
269:266
08/01/30 17:01:36
質問の要領が悪くて申し訳ありません。
正規表現のオプションをうまいこと制御できないかなと思いまして。
特に大文字小文字にこだわってるわけではないです。
270:nobodyさん
08/01/31 03:02:38
>>269
大小文字の違いを無視して検索したいときに、パターンの先頭に (?i) 埋めときゃいい。
$pat = ($icase ? "(?i)" : "") . $search_word;
@hitlist = grep /$pat/, @search_list;
とか
271:nobodyさん
08/01/31 15:56:15
proxomitron の正規表現(?)が独自過ぎて、イライラしてくるんだが…
272:nobodyさん
08/02/25 06:25:28 PeKKba69
2008-03 発売(予定)
「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳)
ISBN 978-4-87311-359-3 定価 5,040円
273:nobodyさん
08/02/25 12:38:04
高いね。今は Web で検索すればいいからねぇ…今更そんなの出して売れるのか。
274:nobodyさん
08/03/03 22:23:33 3LUWkmBW
質問です!
PHP 5.2.5で、<br>以外のタグ削除を下記のようにしたところ
do {
$res = str_replace( $result_tag[1], '', $res );
} while ( mb_ereg( '(<[a/][^>]+>)', $res, $result_tag ) );
所々で効いてません。
前のサーバー(PHP 4.4.4)では正常に動いていました。
よろしく御指南ください。
275:nobodyさん
08/03/03 23:15:55
>>274
初心者なので間違ってたらごめんなさい。
strip_tagsで、タグ除去と除外タグ指定が可能なはずです。
276:nobodyさん
08/03/04 02:59:10
>>275
ありがとう!
思い通りになりました。
感謝です。
277:nobodyさん
08/03/05 17:20:52
<a href="URLリンク(jumpres)">>>1</a>
<a href="URLリンク(jumpres)">>>34</a>
スレッドまとめサイトの作成においてアンカーのタグだけ外したいのです
よろしくお願いします
278:nobodyさん
08/03/05 18:23:39
>>277
実装言語が Perl と仮定して (Perl でなければ >>1 を読んでちょ) 、こんなかんじ?
s/<a href=".+?">(.+?)<\/a>/$1/g;
279:nobodyさん
08/03/05 18:52:35
ありがとうございます
280:nobodyさん
08/03/16 09:40:37
PHPの正規表現はバグバグなのでバージョンが違えば動作が変わる上に、難しいパターンになるとすぐ落ちる。
281:nobodyさん
08/03/16 12:34:04
嘘書くなよ。
282:nobodyさん
08/03/16 20:44:54
パターン修飾子にパラメータを渡して、長い文字列を検索するとボロボロ落ちる。常識だよ。
283:nobodyさん
08/03/17 06:09:10
rubyのutf-8判定とかもやばそうだね
284:nobodyさん
08/03/17 08:59:29
pcreのバグだね。
pcre-devのメーリングリストでもよんどいて損はない
URLリンク(www.exim.org)
285:nobodyさん
08/03/19 14:02:11 6LA3ff9b
初めて書き込みさせていただきます。
たとえば文字列が
{if(a)}
あああ
{if(b)}
いいい
{/if}
{/if}
と入れ子があったときはどのようにマッチさせたらいいでしょうか?
PHPでお願いします。
286:nobodyさん
08/03/19 15:32:59
入れ子のマッチは正規表現 (だけ) では無理。と憶えておくと良いことがあるらしい。
287:ジョアン
08/03/28 16:46:01 FsCFbn2K
perl の正規表現をPHPに書き直しているのですが、どうしてもわかりません。
Perlではマッチした前後を $` $' で取得できますがPHPではどうして取得するのでしょうか?
288:nobodyさん
08/03/29 12:12:17
つマニュアル
289:nobodyさん
08/04/12 11:24:34
見 れる
290:nobodyさん
08/04/13 12:03:16
>>287
括弧
291:nobodyさん
08/04/26 13:57:41
age
292:nobodyさん
08/05/04 23:26:54
オライリーの正規表現三版
ほしいけど高いね
293:nobodyさん
08/05/19 20:19:05
phpでhoge("****","*****");の****と*****を[1][2]に入れたいのですがどうすればいいでしょうか?
294:nobodyさん
08/05/23 20:19:21
AGE
295:nobodyさん
08/05/23 20:19:44
AGE
296:nobodyさん
08/06/05 16:44:59 0yepAPED
すみません、FC2ブログのIPブロック条件のために、正規表現を書かなければならなくなりました。
そこで、合っているか教えてくださいー。
IP 61.78.0.0~61.85.225.225 をブロックしたいのです。
このための表現として、私のつたない知識を使って書いてみると
^61\.[78-85]\.[0-9]+\.[0-9]+
なのかなと思ってますが、あってますか?
どうぞよろしくお願いします。
297:nobodyさん
08/06/05 17:25:51
^61\.(?:7[89]|8[0-5])\.
こうじゃないかな
298:nobodyさん
08/06/05 18:12:26 0yepAPED
>>297
ありがとうございます。
^61\.[78-85]\. のところが、^61\.(?:7[89]|8[0-5])\.
って言う意味ですよね?
なるほど。78-85じゃダメなんですね。ありがとうございます!
299:nobodyさん
08/06/06 03:25:44
これが一番わかりやすい。以上
^61\.(78|79|80|81|82|83|84|85)\..*
300:nobodyさん
08/06/08 17:41:28
PHPで、1ページ分のHTMLのソースが$sに入っているとします。
ここで、この$sから特定のタグだけを削除したいのですが、うまくいきません。
例えば<meta ~~~ />というタグが複数あったとして、これをすべて取り除いたソースを作りたいのです。
$s = eregi_replace("<meta.*?>", "", $s);
とやってみたのですが、$sが空になってしまうのです。
ご指南ください。
301:nobodyさん
08/06/08 22:40:27
2過去ログぐらい嫁という言葉は一見突き放しているように見えて
その質問の答えはこのスレの中にあるよという、ヒントを出しているわけで
まぁ、ツンデレなわけです。
302:nobodyさん
08/06/09 02:40:38
>>300
ereg は最短マッチの芸当はできない。
pregでもつかっとけ。
303:nobodyさん
08/06/09 06:50:27
>>300
'<meta[^>]*>'
304:nobodyさん
08/06/09 23:50:23
300です。
ありがとうございます!
そうなんです、最短マッチが動かないなぁと思っていて、まさかeregが
最短マッチできないとは思いませんでした。
pregでやって解決しました!!
305:nobodyさん
08/06/11 15:58:44
300と似てるかもしれないのですが
<a href="aa">11</a><a href="bb">22</a> こういう文字列があるとき
11と22だけを取り出したいと思い
preg_match_all("/<a(.*)>(.*)<\/a>/", 元, $test)
とやってみたところ、取り出せたのが
href="aa">11</a><a href="bb"と22になってしまいました。
?をつけてみてもうまくいきませんでした。
意図したように取り出したい場合どのように記述すればいいのでしょうか?
使用している言語はphpです。
306:nobodyさん
08/06/11 21:01:33
>>305
色々間違えてる。
まず、Aタグで囲んでる部分だけ抜き出すなら( )のペアは一個でいいはず。
次に?を使ってみたと言うが多分何か勘違いしてる。
300はわかってて最短マッチさせてるが305わかってないだろう?
*を?に置き換えたりしてないか?
307:nobodyさん
08/06/12 00:47:05 Hj50XmAm
JavaScriptで下記のようなデータを取得したいです。
hogehoge[1]→1
hogehoge[123]→123
hogehoge[1243][]→1243
[]の中身を取得したく、[]が2つあった場合は最初の[]の中身を取得します。
(ただし、2個目の[]は常に空です。)
hogehogeは任意の文字列で、[]の中身は何桁か分からない数字の繰り返しです。
以上ご鞭撻の程お願いします。
308:nobodyさん
08/06/12 08:16:53
>>307
スレタイ
309:nobodyさん
08/06/12 14:43:44
/\[([1234]+)\]/
310:nobodyさん
08/06/12 14:53:37
GJ
311:nobodyさん
08/06/28 08:39:36 9QUTsyON
PHP質問スレから誘導されてきました。
使用言語はPHPです。
以下のような変数があります。
$str = <<<EOM
あああ<br />
いいい<br />
ううう<br />
<!--S-->
えええ<br />
おおお<br />
<!--E-->
EOM;
このうち<!--S-->と<!--E-->で囲まれている<br />だけを削除したいのですが、
正規表現を使って綺麗に書けるでしょうか?
以下のように試したのですが、<!--S-->と<!--E-->が消えるだけでした。
$str = preg_replace("/<!--S-->([\W\w]+)<!--E-->/",str_replace("<br />","","\\1"),$str);
また、<!--S(E)-->で囲まれている部分は改行や半角英数字などが含まれる場合があります。
どなたかご教示いただけますでしょうか。よろしくお願いいたします。
312:nobodyさん
08/06/28 10:12:28
substr_replaceとstrposでできそうな気がするが
313:311
08/06/28 12:26:16
>>312
ありがとうございます、おかげで解決しました!
314:nobodyさん
08/07/02 18:58:36
,"/web/sendmail.php","10","10","2000"
こういう感じの文章の
,"2000"
のみ抽出したいんですが、どう書けばいいんでしょうか?
",".*[0-9]"$
だと"10","10","2000"まで拾っちゃうんです・・・。
315:nobodyさん
08/07/02 21:54:01
,\"[0-9]{4}\"
316:314
08/07/03 15:40:28
>>315
ありがとうございます。
確かに、それで例は拾えましたが、10と2000の部分は変動するんです。
桁も4桁だったり5桁だったりと様々なので、どうしたもんかなと・・・。
317:nobodyさん
08/07/03 15:46:05
,\"[1-9][0-9]*\"
318:314
08/07/03 15:53:01
>>317
ありがとうございます。
それだと ,"10","10","2000" まで拾ってしまいます・・・。
書き忘れていましたが、秀丸を使って一括選択しています。
319:nobodyさん
08/07/03 16:04:08
> 10と2000の部分は変動するんです
どう変動するんだよ
とり出したい場所の条件を日本語で書いてみ
>315を5桁にも対応させるだけなら
,\"[0-9]{4,5}\"
320:nobodyさん
08/07/03 16:05:46
>>318
,\"[1-9][0-9]*\"$
321:314
08/07/03 16:14:35
>>320
ありがとうございます!!!出来ました!!!
ありがとうございましたー。
>>319
ありがとうございます。
>>320で解決しましたが、極端な話1~99999999の間で変動します。
322:nobodyさん
08/07/03 16:21:37
>>321
自然数と言え
323:nobodyさん
08/07/03 18:01:39
314 は情報小出し厨という事が解ったから、はやく死ね
324:nobodyさん
08/07/03 19:43:29
そもそも正規表現スレで「こういう感じの文章」なんて質問する時点で(ry
325:nobodyさん
08/07/03 20:01:56
抽象的な表現の質問はスルー
326:PHP
08/07/04 18:37:34 DM0Om0jz
PHP 正規表現
PHPの正規表現を勉強しているのですが、どうもうまくいきません。今回は一番簡単な正規表現をつくったのですが、どうやったらよいのでしょうか。
$h = '(名前)様の会員IDは(abc12)で、(5)番目に偉い方です。';
とあったら、名前、会員ID、番号を抜き出すには、どのようにしたらよいのでしょうか?
実際に()は使用しません。
また、$1 や $2 などを使いたいのですが、解説までできればお願いしたいです。
一応自分なりに考えました。
preg_match('/^*.([a-zA-Z0-9]){2}([0-9]+)','名前$2.ID$1 $3 番目に偉い');
()を使えば、2つマッチさせたいときなどに分けることができるのでしょうか?
(名前)様は(数字)
例:太郎様は5
このとき太郎様という日本語の文字を取得するには/^(+.)([0-9])$/
ここで名前は$1になり、数字は$2になるのでしょうか?
どのような時に$1や$2がどっちがどっちなのかは、どのようにしたらわかるのでしょうか?
長々した質問すいません。わかるかた教えてください。
327:nobodyさん
08/07/04 23:02:41
URLリンク(www.php.net)
取り敢えず、ここを *よく読んで理解* しろ。
328:nobodyさん
08/07/15 00:11:32 PMHjKbcP
質問させて下さい。
PHP5を使っています。
PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません
<INPUT maxLength=20 name=id value="">
このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」
を取得したいのです。
全文に対して繰り返し取得したいのでpreg_match_allを使っています。
preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs )
このように書いたのですがヒットしてくれません。
ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが
文字列に関してはどのようにすればよいのでしょうか?
アドバイス頂ければ幸いです。
宜しくお願い致します。
329:nobodyさん
08/07/15 02:02:18
>>328
悪いこたいわないから二段階で抽出しとけ。
先読みを使えば書けないこともないけど、メンテできなくなるぞw
330:328
08/07/15 03:07:47 PMHjKbcP
>>329
レス有り難う御座います。
一段階目は
preg_match_all( "/(<input 「typeを含まない文字列にマッチするような正規表現」[^<]>)/is", $data, $matchs )
となると思うのですが、この部分はどのようにして書けばよいのでしょうか?
はじめ、二段階抽出も考えたのですが、結局
「typeを含まない文字列にマッチするような正規表現」がどうしてもわからずでした。
331:328
08/07/15 08:05:16
自己レスですが、夜通し色々試していたらいけました。
お騒がせしました。
取りあえず、該当範囲をpreg_match_allで取得後、preg_matchでtypeがあるか判定して二段回抽出しました。
332:nobodyさん
08/07/17 17:35:14 LcfXPY+p
<<が出てきて、その後初めて<br><br>が出るところまでのマッチ方法を教えてください。
pregです。
例えば、
hogehoge<<hogehogeh<br>oge<br><br>hogehoge<br><br>hoge<<hoge の
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ の部分です。
333:nobodyさん
08/07/17 17:53:17
<<.*?<br><br>
334:332
08/07/19 19:22:36
>>333
333おめです
なぜか、
hoge<<hogehog
eh<br>oge<br><br>hoge
だとマッチしないのですが。
335:nobodyさん
08/07/19 19:32:09
<<【¥S¥s】*?<br><br>
336:nobodyさん
08/07/20 09:34:06
できました。スマソ
337:nobodyさん
08/07/20 11:43:35
携帯絵文字をすべて
「絵」に置き換えすることはできないのでしょうか?
preg_replace("/[ - ]/","絵",$hoge);
338:nobodyさん
08/07/20 12:01:15 LU799vx+
>>337
キャリアは?
339:nobodyさん
08/07/20 12:03:54
>>338
SoftBankです。
余裕があればau,DoCoMoもですが。。。
340:nobodyさん
08/07/20 12:18:57
>>337
置き換える事はできるけど、正規表現だけでは無理
341:nobodyさん
08/07/20 12:27:01
>>340では、正規表現以外のものもOKなので、
教えていただきたいです。
342:nobodyさん
08/07/20 13:09:57
絵文字 変換 preg とかでググればいくらでも出てくるだろ。。。
ここで聞くより100倍速い。
343:nobodyさん
08/07/24 00:50:31 /c2OsNI4
example.htmlに書かれた
<table>
344:nobodyさん
08/07/24 00:58:57 /c2OsNI4
>>343
誤爆した。。申し訳ない。。
example.htmlに書かれた
<table>
<tr><th>2ちゃんねる</th><td>WebProg板</td></tr>
</table>
をphpのfopen, fgetsで1行ずつ読み取っています。
<tr>から始まった行の「2ちゃんねる」とWebProg板「WebProg」部分のみ抽出したいので
preg_replace("/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i","$1$2",$str);
としたのですが、うまく抽出できません。
アドバイスをいただければありがたいです
345:nobodyさん
08/07/24 01:43:31
/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i
正規表現が / で始まってるから / で終わることになるわけだけど、途中に</th>ってのがあるわけよ
m#<t[dh][^>]*>(.*?)</t[dh]><t[dh][^>]*>(\w+)#i
こんな感じになるかな
346:nobodyさん
08/07/24 23:33:27
デリミタの問題だけじゃないの?
preg_replace("/^<tr><th>(.*?)<\/th><td>([a-zA-Z])<\/td>/i","$1$2",$str);
347:nobodyさん
08/07/25 08:54:32
これって[a-zA-Z]、[a-zA-Z]+こうしなくてもいいの?
348:nobodyさん
08/07/27 01:11:32 sEx2Pn85
質問させてください。
サクラエディタに鬼車5.9.1を搭載して正規表現の勉強をしているのですが、手元にある詳説正規表現には
(<)?\w+(?(1)>)
このような例があり、<があれば>のマッチを試みる?ということができるみたいです。
ただ、鬼車はこの表現をサポートしていないみたいです。
URLリンク(www.geocities.jp)
同様のことを鬼車でも実現する方法ってあるのでしょうか?
349:nobodyさん
08/07/29 05:43:25
一番最初に出てきた「=」だけ反応するにはどうしたらいいでしょうか。
C#です。
350:nobodyさん
08/07/29 19:46:22
行頭の=という意味なら
/^=/m
だけどC#での正規表現の使い方は知らんので応えられん。
351:nobodyさん
08/08/06 01:01:06 hVakYDWk
PHP5覚えたての初心者です
スレ冒頭に()と(?:)の違いについて質問されてましたが
?:の意味ってなんですか?
わかりやすい解説ページなどもあれば教えてください。
352:nobodyさん
08/08/06 02:34:12
353:nobodyさん
08/08/06 19:40:10
>>351
?:じゃ?と:だよ。
(?:~)で意味をなす。
354:nobodyさん
08/08/21 14:34:46 wSsr/o3s
質問させて下さい。
PHP5を使用しています。
文字列内にマルチバイト文字が一つでも含まれていれば真と言う正規表現を行いたいのですが
どのようにすればよいでしょうか?
ドキュメント等から調べてみて、
mb_ereg("[0-9a-zA-Zあ-んア-ン]", $str )
のようにしてみたのですが、これでは漢字にヒットしません。
アドバイス頂ければ幸いです。
宜しくお願い致します。
355:nobodyさん
08/08/21 14:44:38
単純に先頭ビットがおったってるかどうか見ればよくない?
[\x80-\xff]
356:nobodyさん
08/08/21 15:28:45
>>355
ありがとうございます。
やってみます。
357:nobodyさん
08/08/22 02:32:16
>>354
1バイト文字を列挙したのを否定すれば?
あと、文字コードによっては半角カナがマルチバイトだったり
そうじゃなかったりするんだけど、どうするのかな?
358:nobodyさん
08/08/25 10:35:16 P/JycA8t
htmlのタグを削除するのに、ふつうは
$line =~ s/<\/?[^>]+>//g; ----(1)
だと思うけど、どこかで見た方法では、
$line =~ s/<[^>]*(>|$)//g; ----(2)
となってた。これ動作は同じなのかな?(2)の意味がイマイチ分からない。
359:nobodyさん
08/08/25 20:52:33
(1)の \/? は書いても意味ない(/は[^>]に含まれるから)
(2)の (>|$)は、$lineという変数名から推測するに行単位で読み込んで逐次処理した
場合に、タグの途中で改行されていて>が見つからなくても行末まで削除する為?
でもそうしたら次の行で処理がうまく行われないしよくわからん
行単位だとタグ途中で改行される場合もあるから全部読み込んで一気に処理がいい
s/<.*?>//g;
s/<[^>]*>//g;
などなど・・
360:359
08/08/25 21:09:55
間違った、s/<.*?>//g;だと改行に対応できないから
s/<[\s\S]*?>//;みたいになるね
361:nobodyさん
08/08/25 21:28:12
いや、s使うだろ、普通。
362:nobodyさん
08/08/25 22:34:46
>>358
(2)はSGMLのショートタグの対応とか?
URLリンク(www.asahi-net.or.jp)
開始タグで前のタグを閉じる以外は、メジャーなブラウザは対応してなかったはずなので、
あまりこだわらなくてもいいと思うけど。
363:358
08/08/25 23:08:43
ありがとうございました。
改行文字の件とか、勉強になりました。
プログラム上では、どちらも同じ動作なので、気になってたもので。
364:nobodyさん
08/08/27 15:31:16 j0h2/LpG
正規表現で悩んでいます。
preg_match_all( "/((aaa|bbb|ccc).*?)(aaa|bbb|ccc|$)/is", $str, $maches )
このような形にて以下のような内容の繰り返し文を部分的に抜き出そうとしているのですが一部上手くいきません
---------------------
aaa
あいうえお
bbb
かきくけこ
ccc
さしすせそ
---------------------
上記正規表現では
aaa
あいうえお
bb
かきくけこ
cc
さしすせそ
と言うように一つ目以降のパターンマッチ文字列の先頭がbbやccとして一文字かけてしまいます。
本来はbbb、cccとちゃんとヒットさせたいのですが、これが行えません。
マッチ後の文字列ポインタを「三歩歩いて二歩下がる」のようにずらす事をするか、何か他のパターンマッチ構文を
書けばいけそうだと思うのですが、どうにもよい方法が思いつきません。
お力添え頂ければ幸いです。
365:nobodyさん
08/08/28 12:04:03
テストしてあげるからそのままコピペできるコードに書き換えてここに載せて
366:nobodyさん
08/08/28 18:14:41 Gzy07epa
あいうえお かきくけこ
さしすせ そたちつてと
なに ぬねの はひふへほ
この
「あいうえお」「さしすせ」「なに」
を太字に置き換えるにはどうすればいいですか?
(PHP)
$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);
じゃうまくいきません。。。
367:366
08/08/28 18:25:55
すいません。
自己解決しました。
368:nobodyさん
08/08/28 18:44:08
解決策を書いて下さい。
369:nobodyさん
08/08/28 18:50:35
いやぁ
$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);
$hoge = str_replace("<br>","<br>\n",$hoge);
って書いてましたwww
370:364
08/08/29 11:10:56 rNMP0NTC
>>365
レスありがとうございます。
もう一度考え直してみて書き直すとこのようなコードになりましたPHP5になります。
// 対象文字列
$str = "ABCDaaaEFGaaaaHIJKaaaaa";
// 正規表現
preg_match_all( "/([A-Z]+?aaa.*?)([A-Z]|$)/is", $str, $maches );
// 結果表示
$c = count( $maches[1] );
for ( $i = 0; $i < $c; $i++ ) {
print "=> {$maches[1][$i]}\n";
}
=> ABCDaaa
=> FGaaa
=> HIJKaaa
これを
=> ABCDaaa
=> FGaaaa
=> HIJKaaaaa
と表示させたいのです。
どうか宜しくお願い致します。
371:nobodyさん
08/08/29 11:57:14
以前と仕様変わってるようだけど・・・
詳しい仕様を書いてないからわからんけど
先頭が一つ以上の?英大文字がつづくだけマッチして
次にa小文字が3つ以上?つづくだけマッチ
を繰り返すってこと? isオプションがあるのはどういうことかわからんが
/([A-Z]+aaa+)/
372:364
08/08/29 12:11:28
>>371
・・・!申し訳ありません。
色々考えて試している内に頭が混乱して有らぬ方向になってしまっていたみたいです。
ちゃんともう一度考えて仕様も伝えられるようにしてから書き込ませて頂きます。
お手間をおかけいたしましてすみません><
373:nobodyさん
08/08/29 12:39:10
新入社員の研修みたいでほほえましい。
374:nobodyさん
08/09/01 15:52:31 ME+mffWY
使用言語はPHP4です。
PHPスレから誘導されて来ました。よろしくお願いします。
$str = '<a href="entry-1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3-18.html">パイナップル</a> <br />';
この文字列の中からリンク先の特定の数字とリンクテキストを抽出したく
preg_match_all ( "/"."<a href=\"entry-(.*)-18\.html\">(.*)<\/a>"."/i", $str, $match );
このような正規表現を書いたのですが、実行結果は
[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3-18.html">パイナップル</a>
)
[1] => Array
(
[0] => 1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3
)
[2] => Array
(
[0] => パイナップル
)
となります。
375:nobodyさん
08/09/01 15:53:28 ME+mffWY
下記のような実行結果にしたいのですが、正規表現の書き方を教えて下さい。よろしくお願いします。
[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a> <br /><a href="entry-2-18.html">バナナ</a> <br /><a href="entry-3-18.html">パイナップル</a>
)
[1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[2] => Array
(
[0] => りんご
[1] => バナナ
[2] => パイナップル
)
376:nobodyさん
08/09/02 00:14:52
<a href="entry-(\d+)-18.html">(.*?)</a>
377:nobodyさん
08/09/02 09:20:23 gwaiq/Cc
>>376
うまく動きました
ありがとうございました
378:nobodyさん
08/09/02 17:55:54 IiWNBMxF
バイオインフォマティックスに詳しい方いらっしゃいますか?perlを使って突然変異前後における終止コドンのカウントをしたいんですが、初心者なのでまったく分かりません・・・(涙)
379:nobodyさん
08/09/02 18:31:39
先頭にhttpまたはttpを含まない
という正規表現はどう書けばいいでしょうか
380:nobodyさん
08/09/02 18:35:50
!/^h?ttp/
381:nobodyさん
08/09/02 18:37:44
^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))
382:nobodyさん
08/09/02 19:18:50
>>380
>>381
助かりました
有難うございました
383:nobodyさん
08/09/03 09:02:07
^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))
だとhとかttにマッチしない罠。
^($|[^ht]|h($|[^t]|t($|[^t]|t($|[^p])))|t($|[^t]|t($|[^p]))))
普通は380のようにするけどな。
384:nobodyさん
08/09/04 10:49:47
^p^
385:nobodyさん
08/09/04 10:50:59
^w^
386:nobodyさん
08/09/04 19:48:29 ZxHTo/La
URLリンク(codezine.jp)
こんな問題集を見つけたんだが
正規表現道場に近いな
387:nobodyさん
08/09/04 21:53:09 AVvRqwBM
$が肯定先読みというのは目から鱗。
388:nobodyさん
08/09/17 17:44:57 TGrFERMS
質問させてください。
OSはubuntu8.04で正規表現を勉強し始めの者です。
電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ
抽出するという条件なんですが、
郵便番号はxxx-xxxx(xは0-9の数字)、電話番号はxx-xxxx-xxxx(xは0-9の数字)
で、grep -E [0-9]\{3\}-[0-9]\{4\} とやっても電話番号も全て抽出されてしまいます。
どこが間違っているのでしょうか。
389:nobodyさん
08/09/17 17:54:16
その正規表現だと電話番号にもマッチしちゃうからね。
具体的には、
xx-xXXX-XXXX
の大文字Xであらわしたところ
まあ宿題なんだろうからもうすこし良く考えましょう。
390:nobodyさん
08/09/17 19:24:47
>>389
grep -E ^[0-9]{3}-?[0-9]{4}$
でうまくいきました。ヒント有難うございます。
391:nobodyさん
08/09/22 18:03:26
質問です。
下記のような配列の中から、
(2)~(4)までのみを抽出したいと思っています。
(1) testa@hoge
(2) _testb@hage
(3) _testc@noge
(4) _testd@nage
(5) _teste@n_ge
ルールとしては、
・頭に[_]が付いている事、
・@の後ろに[n_]が付いていない事
です。上記前提で下記のように書いたのですが、
これですと(2)しか抽出されませんでした。
$test =~ /^_.*@[^(n_)]/
@の後ろの正規表現が悪いのだと思うんですが、
この場合どのように書けばいいんでしょうか。
ご教示お願いしますm(_ _)m
392:nobodyさん
08/09/22 18:09:42
>>391
それじゃ文字クラスだよ。こういうときは否定先読みだろ。
393:nobodyさん
08/09/22 18:13:12
/^_\w*\@\w+$/ and !/\@n_/
先頭_と@の間はどんな文字でもいいのか、@以降はどんな文字でもいいのかとか
詳しいルールはわからないが、素直に分けたほうがいいと思う
394:nobodyさん
08/09/22 18:18:30
>>392-393
ありがとうございます!
とりあえず、>>392さんの方法で抽出できました。
$test =~ /^_.*@(?!n_)./
ありがとうございました。
395:nobodyさん
08/09/25 14:22:28 bEreCYy4
使用言語はPHP5です
html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたいと思い
以下の置き換えを行い成功したのですが、
$html = preg_replace('{<img (.*?)>}' ,'<img $1 />' ,$html);
元々imgタグ内にスペースとスラッシュが最後に入っているのもありますので、それ以外ということで
$html = preg_replace('{<img (.*?)^\/>}' ,'<img $1 />' ,$html);
このように記述してみましたが、これですと全部のimgタグに置き換えが効かなくなりました
どういう記述をすればよいのでしょうか?
396:nobodyさん
08/09/25 14:30:11
/<img (.*?[^\/])>/
397:nobodyさん
08/09/25 14:38:21 bEreCYy4
>>396
動きました
素早い回答ありがとうございました
398:nobodyさん
08/10/07 01:09:40
対象が
<a href="test/index.html">あああ</a>
<a href="URLリンク(hogehoge1.com)<)
だけを取り出すにはどうすればよいのでしょうか?
使用言語はPHP5です。
preg_match("/<a href=\"(.*)\"\>.*/",$str,$m);
ではtarget="_blank"が残ってしまい期待通りの結果が得られません。
最短一致というのが原因かとおもい
preg_match("/<a href=\"(.*)\"{1}?\>.*/",$str,$m);
としましたが駄目でした。
アドバイスよろしくお願いいたします。
399:nobodyさん
08/10/07 01:57:33
/<a\s.*?href=\"(.*?)\"/is
400:nobodyさん
08/10/07 21:57:53
>>399
無事期待通りの結果が得られました!
ありがとございました!
401:nobodyさん
08/10/09 19:29:23
PHP5で使います
$numには、
+数字
-数字
数字
というようなパターンの時のみマッチさせたいです
数字のところは 0~999999999までの値が入ってきますが、0以外の時に頭に0がある場合0123とかは除外したいです
試行錯誤して下記のようにしてみましたが、思った結果が得られません。エラー出まくりでなみだ目です
どうかよろしくお願いします
preg_match('/^(([^+]*)*(++[^-][^+]*)*)*?[^0-9]*$/',$num)
402:nobodyさん
08/10/09 19:32:07
[\+\-]?(?:0|[1-9]\d*)
403:402
08/10/09 19:33:52
不十分か。。
^[\+\-]?(?:0|[1-9]\d*)$
404:nobodyさん
08/10/10 00:47:33
>>403
ありがとうございます
動作を確認したところ
0のみの場合と数字の部分が9桁以上でもマッチしてしまうので、
^([^0]|[\+\-]?)(?:0|[1-9]\d{1, 9}?)$
試行錯誤してこのようにしてみましたが、全くもってマッチしなくなってしまいました
どのように書けばよろしいのでしょうか?
405:nobodyさん
08/10/10 00:58:41
^[\+\-]?(?:0|[1-9]\d{0,8})$
406:nobodyさん
08/10/10 07:43:15
>>405
できました
ありがとうございました
407:たまちゃん ◆ExGQrDul2E
08/11/02 16:02:00 wDYsJgfV
URLが、変数$urlにいくつ使われているか調べるために
preg_match_allを使いましたが、動きません。
どのようにしたらよいか教えてください。
<?php
$url = <<< URL
a
URLリンク(x.x)<)
URL;
preg_match_all ("|(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)|",$url,$out, PREG_SET_ORDER);
echo count($out);
?>
実行結果:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'f' in /match.php on line 8
0
408:nobodyさん
08/11/02 16:11:53
別の正規表現構文を探してきてコピペする
409:nobodyさん
08/11/02 17:38:13
デリミタ|で始めたならm|にする必要があるっしょ
で、途中にORの意味で|使ってるから別のデリミタにしちゃいなよ
410:たまちゃん ◆ExGQrDul2E
08/11/02 21:36:24 0rYlog69
>>409
回答ありがとうございます
\(・∀・)/
途中で
https?|ftp
で使っているのですが、
最初を
||
//
以外に、何を使えばよいのでしょうか?
それとも
\(エスケープ)させればよいのでしょうか?
411:nobodyさん
08/11/03 20:39:21 XFsZ1V0e
文字クラス外部の?について。
URLの最短マッチさせる正規表現
(https?)
について、
この場合なら、
http
https
両方にマッチします。
(https)
これなら、
https
にしかマッチしません。
ここで、?の意味を調べたら、『(の意味を拡張。0回または1回の繰り返し最短マッチ』と書いてありました。なぜ
(https?)
これをすることによって、httpとhttpsをマッチさせられるのでしょうか?最短マッチなら、httでもいいのじゃないですか?
412:nobodyさん
08/11/03 21:26:40
https? なら ?は直前のsに対して0回か1回かだからね^^
413:nobodyさん
08/11/04 00:18:26
>>411
最短マッチではなく最長マッチじゃないの。
http までマッチしていることを前提にして、さらに s に対して 0 回または 1 回の
「より長い方」に優先してマッチする。
414:nobodyさん
08/11/08 03:56:35
最短マッチて言葉は*?とか量指定子のあとにくるときの
解説文でよく使われるからそれとごっちゃになっちゃったんじゃないかな
415:nobodyさん
08/11/08 14:37:01 Ln3BC38n
この道場にふさわしい記事だ!!!
URLリンク(codezine.jp)
URLリンク(codezine.jp)
416:nobodyさん
08/11/09 02:37:50
>>415
正規表現がらみのスレにそのリンクはりまくってんな。
関係者?
417:nobodyさん
08/11/15 02:31:51
ヤター
近所の図書館に詳説正規表現が入荷したお
まともなオライリ本は詳説イーサネットしかないとこだから嬉しい
以前は電子メールプロトコルがあったけど、
除籍されてリサイクルコーナーから旅に出てしまったよ
418:nobodyさん
08/11/24 00:38:36
2つの正規表現を1つにまとめる方法はありますか?
A→か
7→イ
という2ステップ手作業でやっていることを1ステップで済ませたいのです。
419:nobodyさん
08/12/08 02:09:36
PHPです。
$search="/^(.+?)<>(.*?)<>(.+)ID:(.+?)<>(.+)<>(.*)/";
preg_match($search,$res[$i],$match);
$id[$i]=$match[4];
$resは2chのdatファイルを一行ごとに配列に入れた物です。
Notice: Undefined offset: 4 (略) on 47
というエラーが出てしまいます。
47行目は$id[$i]=$match[4];です。
420:nobodyさん
08/12/08 02:21:41
>>419ですが、自己解決しました。
1001の場合には、IDがないからでした。
421:nobodyさん
08/12/19 23:54:16
正規表現の先生方、phpで質問させて頂きます。
$str = '[db]name[/db] たべたり [db]email[/db]';
preg_match_all('/\[db\].*?\[\/db\]/s',$str,$match);
print_r($match);
で
[db]name[/db] と
[db]email[/db] が抜き出されるのですが、
この [db] [/db] を無しで
name と email だけを抜き出すにはどう書けばよいでしょうか。
ご教示のほどよろしくお願いします。
422:nobodyさん
08/12/19 23:58:55
\](.*?)\[\/
423:nobodyさん
08/12/20 00:04:41
>>422
ありがとうございます!
このご恩忘れません。
424:nobodyさん
08/12/20 14:46:40
もう忘れてるだろw
425:nobodyさん
08/12/22 00:30:52 EdTiga+3
Jeditで
【あいう】を【6あいう】
【かき】を【4かき】
のように【 】でははさまれた文字列の頭に文字数×2の数値を追加したいのですが
どのように検索してどのように置換すればよいでしょうか?
【 】ではさまれた文字数はまちまちです。
よろしくお願いします。
426:nobodyさん
08/12/22 03:02:21
>>425
無理だろ。
マッチした部分の長さを得る手段がない。
427:425
08/12/22 15:22:20
orz
428:nobodyさん
08/12/22 15:42:49
マクロ組み合わせれば
429:425
08/12/22 17:01:35
>>427
マクロですね!
ありがとうございます。
430:nobodyさん
08/12/23 02:31:08
マクロ使ってよかったのかよっ!w
431:nobodyさん
08/12/28 04:14:06
失礼します
使用言語はperl5です
配列に、前からマッチしたところまでの文字列を繰り返し入れようとしています
($str = 'hogehugahage';
という文字列があって、hでマッチさせたら
@data = ['h', 'hogeh', 'hogehugah']
という配列になることを想定しています)
@data = $str =~ m/h/g;
のときは予想どおり
@data = ['h', 'h', 'h']
となったのですが、
@data = $str =~ m/^.*h/g
の場合は
@data = ['hogehugah']
となって1回最大マッチするだけのようです
どうすれば予想通りの結果になるでしょうか?
432:nobodyさん
08/12/28 08:21:40
$str = 'hogehugahage';
$c= substr($str, 0, 1);
while ($str=~ /$c/go){
push(@data, substr($str, 0, pos($str)));
}
for (@data){print $_,"\n";}
正規表現使わないとダメなの?
433:431
08/12/28 13:37:57
>>432
ありがとうございます
それでいけそうです
実は正規表現を必ず使わなきゃいけないというわけではなく、
もっと簡潔にかけるならなんでも大丈夫です
434:nobodyさん
09/01/01 19:19:28
先達のみなさま、Perl5+EUC環境で質問させてください
文字列の中で、漢字をのぞいた全角文字(全角数字、全角アルファベット、全角カタカナ)と
一部記号(丸括弧や全角スペースなど)以外が入っていたらマッチさせる、という処理をやろうとしています
文字クラスに許可する文字コードを細かく書いて、その否定で取れるかと思ったんですが
$txt =~ /[^xA3\xB0-\xB9]/
のような書き方まで来て、詰まってしまいました
$txt =~ /[^a-zA-Z0-1!#$ @]/
みたいな感じで、複数の文字コードを書くにはどうしたらいいんでしょうか?
ご教示お願いいたします
435:nobodyさん
09/01/02 02:24:41
>>434
どうしたらいいってがんばって列挙するよりないと思うよ。
2byteのならびのあるパターンを除外したいという話だろうから、^ を使った形では
そう簡単にはかけないと思うけど。
436:434
09/01/03 20:08:16
>>435
ありがとうございます
何とか地道にがんばります
437:nobodyさん
09/01/15 22:57:08
PHP5を使用しています。
<pre>タグで囲まれた文字列の中の<br />を削除したいのですが、どのようになりますでしょうか。
例)
置換前
<pre>
aaa<br />
bbbb<br />
</pre>
置換後
<pre>
aaa
bbbb
</pre>
宜しくお願いします。
438:nobodyさん
09/01/15 23:33:28
$s= <<<EOT
置換前
<pre>
aaa<br />
bbbb<br />
</pre>
置換後
<pre>
aaa
bbbb
</pre>
EOT;
echo preg_replace("#(<pre>.*?</pre>)#es", "str_replace('<br />', '', '$1')", $s);
439:438
09/01/15 23:45:12
preg_replace("#<pre>.*?</pre>#es", "str_replace('<br />', '', '$0')", $s);
括弧は要らないか
440:437
09/01/16 00:04:22
出来ました!すっげ。
441:nobodyさん
09/01/19 01:18:40
Irvine書式のURL展開アルゴリズムを教えてください。
・[?-?]表記による数値・アルファベットの連番
・[]内1コめの?の桁数に応じて0埋め
・[]内の展開箇所は複数可
といったところです。
言語は出来ればperl、次点でjsやvbsですが特に問いません。
以下のよう変換されるかんじです。よろしくお願いします。
>URLリンク(abc[1-2].jpg)<)
URLリンク(abc2.jpg)<)
URLリンク(abc09.jpg)<)
>URLリンク(abc[1-2]de[099-101].jpg)<)
URLリンク(abc1de100.jpg)<)
URLリンク(abc2de99.jpg)<)
URLリンク(abc2de101.jpg)<)
URLリンク(a014.jpg)<)
URLリンク(a024.jpg)<)
URLリンク(b014.jpg)<)
URLリンク(b024.jpg)<)
442:nobodyさん
09/01/19 03:14:04
>>441
回答とは全然関係ないですけど、
hからhttp://とつなげて書くと、
検索エンジン等のクローラがそれら>>441のリンクを全てなめるので、
ネットワークリソース的にあまりよろしくないです…
今後そのように例示される際には
hを抜いたり大文字にしたり等、
リンクにならないよう工夫をご検討いただけると、
一インターネット利用者としては嬉しい限りです
443:nobodyさん
09/01/19 03:23:29
あまりよろしくないって数字で言うとどれくらい?
444:nobodyさん
09/01/19 03:24:54
サァン!
445:nobodyさん
09/01/19 04:50:02 cs1ls7yv
ググったのですが、分からなかったので質問させてください。
align=left>1234567891011121345
上記を
align=left>1011121345
こう置換したいのですが
left>.*?1011121345
こうしてみたのですが、出来ませんでした。
どう置換すれば、良いのでしょうか、よろしくお願いします。
446:nobodyさん
09/01/19 05:23:37
>>445
left>.*1011121345
447:nobodyさん
09/01/19 09:02:38
s/>\d*1011121345//
448:441
09/01/19 14:17:19
なんだかオープンソースだったようで自己解決しました。
>>442
いまだにh抜きを強要する人っているんだね。
見ず知らずの他人一人一人を啓蒙していくよりも
管理者へ[http://」をNGワードに追加してくれるよう説得した方がいいんじゃないの?
有益であれば受け入れてくれるはず。
449:nobodyさん
09/01/19 14:46:18
キミは自分さえよければ他はどうでもいいんだね。
まあがんばってよ。
450:nobodyさん
09/01/20 02:49:36
>>442が強要に見えるようじゃ苦労しそうだな
451:nobodyさん
09/01/20 03:53:44 TjAtrikI
ざっと眺めた感じだと
http~リンクを見るたび指摘(要望)してしまう442
その指摘(要望)が強要に見えてしまう441
どちらも2chに向かないタイプではあるが
頻度の度合いからして苦労するのは441の方が上だな
公衆便所のトイレットペーパーが三角に折れてなかったらイラっとしちゃうタイプでそ
452:nobodyさん
09/01/20 04:11:05
あ~ハイハイ自治厨vs爆笑田中の構図ね
スレ違いだから他でやってくれ
453:nobodyさん
09/01/22 00:53:40 2qACQkO/
正規表現で$文字を含む検索や置換ってど~してます?
454:nobodyさん
09/01/22 01:00:03
お前は何を言ってるんだ
455:nobodyさん
09/01/22 02:57:05
>>453
$は海外の通貨記号なのでうまくいかない。
\$のようにローカルな通貨記号を重ねればうまくいく。
456:nobodyさん
09/01/22 03:22:48
>>455
何言ってんだこいつ
457:nobodyさん
09/01/22 17:35:54
<br>***********
-----
上記のような文字列で「*」には日本語と英語が混ざっています。
そこで、、<br>から-までの間から、英語文字だけを削除するような正規表現って無いでしょうか?
<br>から-の部分は改行が入ってます。
ご存知の方居られましたら、よろしくお願いします。
458:nobodyさん
09/01/22 17:45:32
>>457
>無いでしょうか?
そりゃつくりゃあるだろ
459:nobodyさん
09/01/22 17:56:19
>>458
すみません。言葉足らずでした。
普段Speeeeedをいうソフトを使っているのですが、これで>>457は可能でしょうか?
460:nobodyさん
09/02/01 00:44:32
>>459
ここ正規表現のスレ
ソフトの使い方はスレ違い、ソフトウェア板へどうぞ
461:OraOra
09/02/01 01:57:15 2VNzjYUZ
検索文字の中であるパターンの検索の仕方が
分からず困っています。
どなたか御教授お願いします。
プラットフォームはOracleのPL/SQLです。
検索対象は以下の日付書式の文字です。
'yyyymmdd hh24:mi:ss'
以下のように正規表現の結果を関数で受取り
その結果をチェックしています。
bool_result := regexp_like('20080230 11:20:22','(20)[0-9]{2}(0[1-9])|1[0-2])(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9])');
if bool_result then
dbms_output.put_line('OK');
else
dbms_output.put_line('NG');
end if;
現状では上記の正規表現で'0230'、'0231'のチェックが出来ず困っています。
上記の正規表現の中で'0230'、'0231'も含めてチェックする方法を
ご存知の方いましたらどなたか御教授お願いします。
462:nobodyさん
09/02/02 21:43:16 H9hEncfV
「id="72157612930889935" primary="3224910389" secret="be0cf48b4f" server="3468" farm="4" photos="131" videos="0"」という文字列から、
「id=""」の数字を抜きたいのですが(この例であれば「72157612930889935」が欲しいです)
$patern = 'id="(.*)" ?';
ereg($patern,$line,$id);
echo $id[1]."<br />\n";
では最後のvideosの終わりのダブルコーテーションまで入ってしまいました。
>>421に近いと思うのですが?で最短マッチ?になるような気もしますし
>>412にあるように?は0か1回の繰り返しのようにも思うし…。
OSはCent4系、PHP4.1.3、関数はeregを使いました。どなたか助けて下さい
463:nobodyさん
09/02/02 21:51:38
id="([0-9]*) とか・・
464:462
09/02/02 21:55:09 H9hEncfV
>>463
神!ありがとうございました。
?は結局使わず終いでしたが?とか難しいのを使うよかよっぽどスマートす。
465:nobodyさん
09/02/05 13:33:36
?と*の意味を知ってたら難しいとかの発言にはならない
466:nobodyさん
09/02/06 11:54:32
だよね。
{0,1}か{0,1,2,3...}かの違いだけだ。
467:nobodyさん
09/02/06 16:00:49
質問する人は最低限基本は知ってて欲しいと思う今日この頃
468:nobodyさん
09/02/10 00:16:26
F, f, t, S, P が正規表現のとき、
FtSPPP または FfSPPPP は
F(tS|fSP)P{3} より短くなりますか?
PPP と PPPP ではなく X と Y (Fの直後に来るものによってSの後に来るべきものがまったく違う場合) には応用可能でしょうか?
469:nobodyさん
09/02/10 00:53:38
F(tS|fSP)PPP
470:nobodyさん
09/02/23 09:51:32 0L52Pp6H
.*?
これの意味を教えて下さい。
471:nobodyさん
09/02/23 10:49:52
「.」はカニだな
「*」は0匹以上の生息してるやつ最後まで
つまり、「.*」でカニがいるだけ全部を捕り尽くすという意味(昨今の乱獲問題)
そこで捕り尽くしたら絶滅するという問題を受けて「.*?」という思想が考え出された
意味は、最初にカニがいたらその一匹を捕まえて漁を止めるということ
472:nobodyさん
09/02/23 15:41:23 0L52Pp6H
>>471
では、 .*? と .? の違いを教えて下さい。
473:nobodyさん
09/02/23 17:58:21
>>472
「.」はカニだな
「?」は捕れるかとれないか分らないがとりあえず努力するという意味
つまり、「.?」で幻のカニ探索するという意味
474:nobodyさん
09/03/02 19:46:41 /g2x4kDh
phpです。
たとえば普通に
URLリンク(google.co.jp)<)">test</a>と書いてある文字列があります。
この文字列内のタグになってないUrlをAタグでリンクを張りたいんですがどうしたらいいでしょうか。
475:nobodyさん
09/03/02 21:22:30
httpから始まり、半角英数字と.?&%が含んでるか見ればおk
476:nobodyさん
09/03/05 18:30:50
>>471
先生 ノシ
「.*?」で最初の一匹目のカニも取れませんでした。
でも幻のカニは取れたみたいです。
477:nobodyさん
09/03/11 00:46:27
URLリンク(*.2ch.net)
これを正規表現にすると、どうなりますか?
478:nobodyさん
09/03/11 01:27:39
URLリンク(*.2ch.net)
479:nobodyさん
09/03/11 11:15:58
>>477
"{^https?://[0-9a-zA-Z]*\.2ch\.net/[0-9a-zA-Z]*/test/bbs\.cgi[0-9a-zA-Z/_-]*$}"
480:nobodyさん
09/03/20 02:34:11
phpのクラスファイルの特定の関数を正規表現で抜き出したいのですが可能でしょうか?
例 class.test.php から public function test($a){ 本文 }
スケルトンコードの場合簡単に抜き出せるのですが、
本文中にif,swichなどで } が存在した場合どうすれば良いのか悩んでいます。
481:nobodyさん
09/03/20 04:11:43
{が出たら探す}を1つ増やせばいいじゃん
482:nobodyさん
09/03/20 22:15:43
言語は
BoostライブラリBoost.Xpressiveか、Boost.Regexか、Boost.Spirit
です。(標準C++,コンパイラg++。)
括弧の対応のバランスがとれているならマッチさせるという正規表現はどう書けますか?
boost::xpressive::sregex parens;
parens = *( '(' >> by_ref(parens) >> ')' );
だと
()→マッチ
()()→マッチ
()(()((()))())→マッチ
(()))))→マッチしない
です。
私としては(1+3)*(4+(8-9))の様に括弧以外の文字が含まれていても括弧のバランスがとれているか判定できるようにしたいのですが。
ただし括弧としては ( か ) だけを想定し、{}[]などは判定の対象にはせず、数式として成り立っているかどうかなども判定せず、あくまで ( と ) のバランスだけを見たいです。
483:nobodyさん
09/03/20 22:25:59
>>481
できました、ありがとうございました。
こんな感じで、簡単でしたね、、、
/function test.*?\{.*? (\{.*?\}.*?)*? \}/s
484:nobodyさん
09/03/20 23:13:32
echo内の { } にも対応してみました。
これでほぼ完璧かなぁ、、、
/public\sfunction\stest_if_text.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
485:nobodyさん
09/03/20 23:18:29
センスねえな
ムダがおおい
486:nobodyさん
09/03/20 23:28:45
関数名だけで対応すると
/[public|private|protected]+\s+[static]?\s?function\s+関数名.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
こんな感じかなw
読みやすさ優先で記述してるからセンスは勘弁してくださいw
487:nobodyさん
09/03/24 08:12:11
>>482
正規表現だけじゃ無理じゃね?
488:nobodyさん
09/03/24 09:59:04
>>482
正規表現じゃ数学的に不可能。有限状態オートマトンなので閉じられてない
開きカッコの数を高々状態数までしか憶えられないからそれを越えた時点で
アウト。
Perlの正規表現みたいに再帰的なパターンが書けるように拡張されてると
別だけどね。
489:487
09/03/24 10:07:28
>>482
BoostのXpressiveならby_ref()があるから再帰的に書けないこともないハズ。
でもよーわからん。
Spiritが使えるならそっちのが楽そうじゃね?
490:nobodyさん
09/03/24 10:20:21
「高々状態数」の意味がわかりません。
491:nobodyさん
09/03/24 10:38:59
数学じゃよくでてくるけどね、「高々」とか「状態数」とか
492:nobodyさん
09/03/24 10:40:15
>>491
俺は初めて聞いたぞ。
たかだかはよく出て来るけど(例:たかだかn次の~)
状態数は物理学の用語じゃね?
493:nobodyさん
09/03/24 12:16:31
お前ら正規表現スレにいて有限状態オートマトンもわからんのか...
いくらなんでもゆとりすぎるだろ
494:nobodyさん
09/03/25 10:08:36
文字xが10個以上である場合にマッチさせるのに
x{9}x+
と
x{10}x*
は共に等価でOKだとおもうが、
一般論で言うとどちらが速い動作になる?
495:nobodyさん
09/03/25 10:43:53
どっちも同じ動作なんだから同じじゃね
それよりももう少し改良できると思うんだがな
496:nobodyさん
09/03/25 12:38:18
実装次第で一般論ではなんともいえないと思われる。
どっちを食わせても全く同じオートマトンに変換してから実行するの
でぴったり同じになる実装、なんてのもあるかもしれないし、
逆になぜか+が不得意な実装とか*が不得意な実装とかあるかも
しれない。モノによっては{..}が不得意でxを並べたほうがいいと
いうことも考えられるな。
497:494
09/03/25 15:11:33
>>495-496
なるほど。
ありがとう。。。
498:中山
09/03/29 09:39:01 MqxV8vA3
PHP 正規表現について
$str = 'test1?test2/test3;test4';
この文字の
test1
test2
test3
test4
を取り出すにはどうしたらよいでしょうか?
この価を
data1=test1&data2=test2&data3=test3&data4=test4
と変換したいです
preg_replaceを使っています
$str = preg_replace("・^([a-zA-Z0-9]+\?+[a-zA-Z0-9]+)\/+[a-zA-Z0-9];+[a-zA-Z0-9)$・","data1=$1&data2=$2&data3=$3&data4=$4",$str));
これではダメみたいです
499:nobodyさん
09/03/29 09:49:02
どーゆークエリだそりゃ
500:nobodyさん
09/03/29 09:54:22
$str = 'test1?test2/test3;test4';
この内容がどういうパターンで変動し得るかがわからん
書かれている正規表現見てみると ? / ; の順に区切り文字があることは固定で決まってる?
501:中山
09/03/29 19:51:10 MqxV8vA3
はい。固定できまってます。
ただし、
test1
などの文字列は半角英数字限定です。
502:nobodyさん
09/03/31 12:09:46
>>498
data1,data2,data3・・・きめえwww
503:nobodyさん
09/04/14 19:16:36
以下のような文字列を置換ですべて削除したいのですが
どうかけばいいのでしょうか
onMouseOver="refPopUp(1,event)" onMouseOut="hidePop()"
onMouseOver="refPopUp(23,event)" onMouseOut="hidePop()"
onMouseOver="refPopUp(345,event)" onMouseOut="hidePop()"
↓
3行すべて削除
試した正規表現
onMouseOver="refPopUp(\d+{1,3}.,event)" onMouseOut="hidePop()"
504:nobodyさん
09/04/14 19:24:30
3}.,の.ってなによ
505:nobodyさん
09/04/14 19:31:15
>>504
すまんこ
一応自力解決しました。さくらエディタの正規表現オンで動作確認
onMouseOver="refPopUp\(\d{1,3},event\)" onMouseOut="hidePop\(\)"
506:nobodyさん
09/04/14 20:09:33
下記の2文にあるfontタグを消したいです。
正規表現を用いた1度の置換で消せますか?
<dd><font style="font-size:;color:;"> テスト <br> テスト </font><br><br></dd>
<dd><font style="font-size:;color:;"> テスト2 <br> テスト2 </font><br><br></dd>
考え方として
<dd><font style="font-size:;color:;">がある行のうち</font>を削除し、そのあと<font style="font-size:;color:;">を削除
これで行けそうかと思ったのですが、●●がある行のうち○○を削除、という正規表現がわかりませんでした・・・
507:nobodyさん
09/04/16 23:48:40
>>506
(.*)<font style="font-size:;color:;">(.*)<\/font>(.*)
$1$2$3
とすればいいんじゃない。
どこの正規表現を使うかによりできないかもしれないけど。
$nはn番目の括弧に該当するから<font style="font-size:;color:;">と</font>が消える。
<font></font>がネスとしているなど複数あったら駄目かもしれないけど。
508:nobodyさん
09/04/17 04:08:26
>>507
サクラエディタで正常に動作することを確認しました。
ありがとうございます!
509:nobodyさん
09/04/25 21:30:02
ヽ('A`)ノ ○○表現!
( )
ノω|
510:nobodyさん
09/04/29 05:47:07
チカンしまくり
511:nobodyさん
09/05/12 06:32:22
12?34
12??34
違いが出るときはどんなときか答えなさい
512:nobodyさん
09/05/18 16:49:08
$txt = aaa(’12165;
のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、
この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません
妙案ないでしょうか
php5 or 4
513:nobodyさん
09/05/18 22:40:33
aaaの後ろにうじゃうじゃって
$txt = aaa(’12165;
$txt = aaa(’5445;
$txt = aba(’13;
$txt = aaa(’99999;
こうなんか?
結果 = preg_replace('/’(\d+);/', '$1', 入力);
結果
$txt = 12165
$txt = 5445
$txt = aba(’13;
$txt = 99999
514:nobodyさん
09/05/21 08:03:14 bdo2M1uu
すみません、質問させてください。
曲名のリストを一括置換しようとしています。具体的には"~ by"が
入る丸括弧だけ四角括弧"[ ]"に置き換えたいのです。
例
This is me (talk) (Composed by Johan)
↓
This is me (talk) [Composed by Johan]
どのような書式にすればいいかご教示お願いします。
515:nobodyさん
09/05/21 08:25:36
正規表現と一言に言ってもね、正規表現にもいろいろあってね、どの正規表現かで
書き方も全然違ってくるからね、その質問だけじゃなんとも言えないのね。
初心者用のサイトにいってらっしゃいなのね。
図解でみる正規表現入門
URLリンク(funcchan.blog16.fc2.com)
516:nobodyさん
09/05/21 08:34:21
$s= "This is me (talk) (Composed by Johan)";
$s=~ s/\(([^\)]*\bby\b[^\)]*)\)/[$1]/gi;
517:nobodyさん
09/05/21 09:43:06
>>515-516
ありがとうございます。
STEPというタグエディタで100曲ほど一括置換しようと
目論んでます。
教えていただいたサイトとスクリプトを手がかりに
現在悪戦苦闘中です。ちょっと頑張ってみます。
518:nobodyさん
09/05/23 22:18:11
こういうときにこまるわけか
special days(arranged by hor version.) (Composed by Ellic)
519:nobodyさん
09/05/27 00:18:24
質問させて下さい。
ABC
…LMNO………
……LMNO……
………LMNO…
XYZ
というような文章があったとします。
「LMNO」の前後(「…」)には文字(日本語や英数字)があります。
Perl5互換の正規表現が使えるテキストエディタや、BREGEXP.DLLが使える置換えソフトを使用し、
「ABC」から「XYZ」までにある「LMNO」を「OOOO」に置換えすることは可能でしょうか?
特定の範囲内の文字だけを置換えする正規表現がわからず、検索文字列と置換え文字列の指定で困っています。
どのようにすれば良いのか教えて頂けると助かります。よろしくお願いします。
520:nobodyさん
09/05/27 22:50:49
s/(ABC.*)LMNO(.*XYZ)/$1OOOO$2/g
ってことか?
521:519
09/05/29 23:05:57
>>520
具体的な指定を教えて頂いてありがとうございました。
早速試したのですが置換えできませんでした。
「Speeeeed」という置換えソフトではBREGEXP.DLLも使えるのですが、それでも置換え結果がゼロのままです。
こちらのスレをもう一度読み返してもっと正規表現を勉強したいと思います。
522:nobodyさん
09/06/07 21:54:50
s/(?>ABC)(.*)LMNO(.*)(?<=XYZ)/${1}0000$2/
これを何回もかけるとか?
なんか知らんけどgオプションつけても無駄だったんだよなぁ
523:nobodyさん
09/06/11 09:11:23
>>521
>>520にsパターン修飾子つけて再帰させるしかねーよ
524:nobodyさん
09/06/12 11:14:20
sed でも使えばー?
525:nobodyさん
09/06/13 23:07:31 56/XckFT
Perlの正規表現で質問させて下さい。
yyyy/mm/entry-basename/index.php
↑はどのように記述すればいいのか、お手数ですがご教授願います<(_ _)>
526:nobodyさん
09/06/14 09:14:31
正規表現で表すには前提条件がないと答えられない
yyyy部分が4桁数字の西暦?
mm部分が2桁数字の月(ゼロサプレス)?
m#^\d{4}/\d\d/entry-basename/index\.php$#
527:525
09/06/14 17:21:47 Ycy68Wtw
>>526さん解凍有り難う御座います。
素人で質問が下手くそで申し訳有りません
↓の場合だと
"/diary/archives/yyyy/mm/entry_basename.php"
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"
↑のように置き換えるみたいなのですが、
同様に↓の場合だと
"yyyy/mm/entry-basename/index.php"
どのように置き換えるのかが分からなくて、お手数ですがご教授下さい。
分かりにくくて申し訳ないです。
528:nobodyさん
09/06/14 21:15:28
ちなみにゼロで桁を埋めるのは「ゼロパディング」ね。
> ↑のように置き換えるみたいなのですが、
「置き換える」って、いわゆる正規表現による置換処理の意味じゃなくて
「検索表現に翻訳する」って意味なのか。凄まじく紛らわしい。
さておき…、
で、どの単語が可変部分なのかがさっぱり分かんないんだよね。
"index.php" は固定なの?
それと、上の置き換え例では "entry_basename" になっているけど
お尋ねの件は "entry-basename" だよね。単なる typo かな?
"\w" を使う上では、検索対象文字列の "_" と "-" との違いは本質的だよ。
要するに、質問するにしては不備が多過ぎます。
529:525
09/06/14 23:33:00 Ycy68Wtw
>>525です
「検索表現に翻訳する」という意味です。失礼しました
そして"index.php"は固定で、"entry-basename"が正解です。
URLリンク(www.magicvox.net)
ここのページにあるランキングが利用したいのですが、
「ランキング集計したいファイル名にマッチするよう Perl の正規表現
を修正してください。」
ここの意味が分からなくて困っています。他のサイトなどを見てみると、
当方の個別エントリーパスは"/diary/archives/yyyy/mm/entry_basename.php"なわけですので、
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"としました。
とあります。
私の場合、エントリーパスは"yyyy/mm/entry-basename/index.php"です。
これを"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"のように記述
するにはどうすればいいのでしょうか?
長文失礼しました。
530:nobodyさん
09/06/15 00:03:48
'/\d{4}\/\d{2}\/(\w+)\/index\.php/'
謎すぎるけど PHP の preg 使って entry_basename を $1 に入れるんだと
思い込んでみた
531:nobodyさん
09/06/15 00:06:02
で、その "entry-basename" ってのはその文字列そのものではなくて
「ここにいろんな文字列が入ります」っつーダミーなんだろうけど、
どういった文字で構成されるの?
532:nobodyさん
09/07/05 16:07:10
perlでテキストデータ内の日付部分を、
2009/1/1
↓
2009/01/01
に一行で置換したいのですが。
s|/([0-9][^0-9])|/0$1|gm;
だと、2回同じ処理が必要になってしまいます。
いい方法ありますか?
533:nobodyさん
09/07/05 16:12:40
splitとsprintf
534:nobodyさん
09/07/05 17:05:36
>>532
後ろの1文字ってマッチする?
マッチするなら
1 while $str =~ s|/([0-9][^0-9])|/0$1|gm;
でいけるんじゃない
535:nobodyさん
09/07/05 17:40:16
m はなくてもよさそうに見える
536:nobodyさん
09/07/05 18:26:28
>>534
できました。ありがとうございます!
>>535
おっしゃる通りでした。
537:nobodyさん
09/07/05 18:27:53
たぶんgもいらないよ
538:nobodyさん
09/07/08 01:27:46
$str =~ s{/([0-9])(?![0-9])}{/0$1}g;
539:nobodyさん
09/07/15 09:40:19
秀丸で、CSSの : までの部分を強調表示したいのですが、
どう表現すればいいのでしょうか。
以下の例だと、font-size:の部分です。
h1 {
font-size: 150% !important;
}
540:nobodyさん
09/07/15 13:56:52
>>539
CSSに数字って出るんだっけ?
[\-a-za-z0-9]+[ \t]*:
541:nobodyさん
09/07/15 14:47:39
ありがとうございます。
見やすくなりました!
:first-childや:notのセレクタで誤爆していたので
[\-a-za-z0-9]+[ \t]*:(?!\first|last|not)
としました。
また以下のようなものだと誤爆するみたいですが
これはほとんど使わないので目をつむろうと思いますw
BODY[style="width: 100%; height: 100%;"] {
font-size: 150% !important;
}
542:nobodyさん
09/07/15 15:14:34
良く考えたらもっと一杯あった
[\-a-za-z0-9]+[ \t]*:(?!first|last|not|hover|focas|active|visited|link|lang|after|before)
543:nobodyさん
09/07/15 23:25:43 2a7dmfqp
/(^-^;)/w(^o^)vv(-_-;)vv[^-^](^_^;)/
544:nobodyさん
09/07/22 16:01:40
すみません質問させてください。
正規表現初心者です。
秀丸で、正規表現を使って文字列の置換をしようとしています。
例)
abcd,efag),
これを最初の[,]だけを[',]に置換したいと思っています。
検索文字列: [^)],
置換文字列: ',
とすると、
abc',efag),
のように文字列の後ろの1文字まで消えてしまいます。
文字列が消えないように、最後尾でない[,]だけを置換するにはどのように指定すればいいでしょうか。
教えてください。
545:nobodyさん
09/07/24 05:32:15
秀丸でサポートされている正規表現の機能がどれだけのものか分からんからなあ。
候補 1(質問者の方針参考)
検索文字列: ([^)]),
置換文字列: $1',
候補 2
検索文字列: ,(?!$)
置換文字列: ',
無理なら一旦「,\n」を「,」を含まない別の適当な文字列に変換して、
全ての「,」を「',」に変換してから元に戻すとか。
546:nobodyさん
09/08/01 13:06:24
候補 3
検索文字列: |-^)v!!
置換文字列: (^o^)/~~
547:nobodyさん
09/09/01 17:17:50
PHP5で、$txtに格納された
<a href="javascript:userid('123456');">テキスト</a>
※「123456」と「テキスト」は変化します
といった並びの文字列からタグをぬいて
123456,テキスト,
とカンマ区切りにしたいのですが、何か良い方法はないでしょうか
548:nobodyさん
09/09/01 17:51:35
自己解決しました
お騒がせして申し訳ありますん
549:nobodyさん
09/09/03 10:54:41
>>548はだれ?
550:nobodyさん
09/09/03 12:19:35 54RqrMPZ
301でサイト移動をする場合に関数に色々な値があるのをそれぞれリダイレクトさせたい場合は
一挙に書くにはどうすればいいでしょうか?
1つ1つ書くと下記のようなのを1つにしたいです。
Redirect 301 /index.php?a=1 "URLリンク(www.sample.jp)"
Redirect 301 /index.php?a=2 "URLリンク(www.sample.jp)"
Redirect 301 /index.php?a=3 "URLリンク(www.sample.jp)"
・
・
・
Redirect 301 /index.php?a=a1 "URLリンク(www.sample.jp)"
Redirect 301 /index.php?a=b2 "URLリンク(www.sample.jp)"
Redirect 301 /index.php?a=c3 "URLリンク(www.sample.jp)"
・
・
・
551:nobodyさん
09/09/03 12:27:59
>>550
誘導元で礼も無しとか失礼な人だな
552:nobodyさん
09/09/03 12:47:58 54RqrMPZ
率直に言って「スレ違い」って程のことか?
と思ったので礼などは書かなかった。
どっちかというとこっちの方が適切とは思うが、
【.htaccessファイル(「分散設定ファイル」)の書き方・使い方などに関するスレです。 】
って説明のスレに書いても別に間違ってないと思う。
553:nobodyさん
09/09/03 15:52:56
>>550
スレ違い。
【Apache】mod_rewriteについて語るスレ
スレリンク(php板)
個人的には礼とかどうでもいいと思うけど、
マルチ質問扱いされて厄介なことになる可能性があるので、
「向こうで質問し直します」とかひとこと言っておいた方が無難とは思う。
あと、ドメインの例示に使えるのは "example.jp" ね。
554:nobodyさん
09/09/13 17:57:11
PHPでPerl互換のpreg_replace関数を使った置換を行おうとしているのですが、
やりたいことがうまく実現できません。
やりたいことは、
・<tagA>という文字列と</tagA>のあいだに<tagInsert>という文字列を挿入したい
・ただし、<tagA>の中に<tagB>という文字列がある場合は、その<tagB>の下に挿入したい
<失敗した正規表現>
$new_str = preg_replace("/<tagA(.*?)>(.*?)(<(?!tagB).)*/", '<tagA\\1>\\2<tagInsert>\\3', $str);
<実現したい例>
<tagA>
<tagB>
<tagB>
<tagC>
</tagA>
↓置換実行
<tagA>
<tagB>
<tagB>
<tagInsert>
<tagC>
</tagA>