正規表現道場at PHP
正規表現道場 - 暇つぶし2ch328: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
google

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>

555:nobodyさん
09/09/27 12:15:08
 /身長:(\d+)\n体重:(\d+)/
という正規表現に対し、例えば
 "身長:175\n体重:67"
という文字列がきたら
 "身長:<font color="red">175</font>\n体重:<font color="blue">67</font>"
のようにHTMLタグを追加したい。

ただし
 "身長:100\n体重:100"
のように身長と体重が同じ場合も身長は赤、体重は青にしたい。

もっと欲をいえば正規表現は身長・体重だけでなく
 /年齢:(\d+)\n好きな食べ物:(\S+)/
のように可変にしたい。


556:nobodyさん
09/09/27 13:11:58
そうですか

557:555
09/09/27 15:20:08
どうやればいいか知恵を貸してください

558:nobodyさん
09/09/27 16:41:20
環境は?

559:nobodyさん
09/09/27 16:49:26
perlでもrubyでも
できるだけトリッキーでなくて普通の正規表現のパターンマッチと置換でできる範囲で

560:nobodyさん
09/09/27 23:10:15
絶対正規表現だけで書かなきゃだめなの?
普通に関数作る方が現実的だと思うけど

561:nobodyさん
09/09/28 01:47:40
if使って分岐させれば

562:nobodyさん
09/09/28 08:53:02
正規表現をかじったけどちゃんと理解するにいたってない人は
正規表現でやるとかえって面倒な事までさせようとしていらない
苦労をする傾向があるね。理解しちゃえば使った方がいいかどうか
判断つくようになるんだが。

563:nobodyさん
09/09/28 10:18:45
>>555
こんなのとか?

html = str.sub(/(.+?)(:)(\d+)\n(.+?)(:)(\S+)/) {
"#{$1}#{$2}<font color=\"red\">#{$3}</font>\n#{$4}#{$5}<font color=\"blue\">#{$6}</font>"
}

564:nobodyさん
09/10/06 22:32:03
phpのpreg_matchなのですが
文字列の中のURLからホストを取得するのは解るのですが
ホスト名とその後に続くディレクトリ名を取得する方法を教えて下さい。

$url = "URLリンク(hogehoge.com)";

これならば
URLリンク(hogehoge.com)の部分です。

お願いいたします。



565:nobodyさん
09/10/13 11:08:03 8X+N74J6
phpで、いくつか特定の拡張子を持つファイルをマッチさせたいのですが、
最後を意味する$は下記のように最終的に1つでよいですか

if (preg_match("/\.html|\.php|\.txt$/",$value)) {
$chk = 1;
}

それともこのように全部に$が必要ですか?

if (preg_match("/\.html$|\.php$|\.txt$/",$value)) {
$chk = 1;
}

566:nobodyさん
09/10/13 11:28:58
>>564
parse_url使うか"/(.*)\//"

>>565
やってみればわかることだけど当然全部に必要
だから\.(html|php|txt)$みたいに括弧でくくるのが常套だけどマッチした値を取得する必要ないなら
\.(?:html|php|txt)$と書いて少し軽くできる

567:565
09/10/13 12:34:51 8X+N74J6
>>566
ありがとうございました( ^ω^)

568:nobodyさん
09/10/14 08:58:15
perl で,
「<と>で囲まれた文字列内の abc を def に全て置換する」
というのは正規表現でどう書けばよいでしょうか。

マッチだけならば
"<asaabcasalaabca>" =~ /\<(.*?)(abc(.*?))*?\>/
のようにしてマッチさせられるのですが,繰り返しがあるので後方参照で取得できません。

569:nobodyさん
09/10/14 09:18:20
>>568
せっかくperlでプログラム書けるんだから、

1. 「<」と「>」に囲まれた文字列を取り出す
2. 1で取り出した文字列のabcをdefに置換
3. 2の結果を「<」「>」で挟む

とやれば難しいことは何もない。

570:568
09/10/14 10:26:28 6OWMkMrw
>>569
いや,確かにおっしゃるとおりなのですが,
Perl互換の正規表現を採用しているエディタで文章を打っているときに,
いちいち使い捨てのPerlスクリプトを作るのが面倒で,
せっかくエディタに内蔵されている正規表現置換機能で置換できれば便利なのにな……と思った次第です。

571:nobodyさん
09/10/14 10:46:05
そりゃそのエディタの説明書に書いてあるだろ

572:nobodyさん
09/10/14 16:45:59
「< と > で囲まれた文字列内のある一つの abc を def に置換する」を、
そのエディタのキーボードマクロ機能で繰り返し適用すればよくね?

573:nobodyさん
09/10/14 17:59:48
いや、そのエディタに正規表現での置換機能もあるだろ、普通

574:nobodyさん
09/10/14 18:10:49
置換というか補完じゃね?

575:572
09/10/14 18:34:24
>>573
エディタの置換機能だと複雑なことができない (この場合 < と > の間を繰り返し置換)
からどうすればいいの?っていう質問だと思ったんだが、違うのかな?

どのエディタ使ってるとか晒してくれるともっと的確に答えれる香具師がいそうだが。

576:568
09/10/14 23:09:15
>>571-574
いえ,ですから,エディタ(Mac OS X の Jedit X です)に正規表現置換機能が備わっていることは分かっています。
その正規表現の書き方を知りたいのです。

「< と > の間の繰り返し置換」は正規表現では実現不可能,ということであれば,
やむを得ずスクリプトを組みます(Perl あるいは Jedit X のマクロ言語である AppleScript)が,
可能であれば正規表現置換で実現したいのです。
やはりエディタウィンドウ内で完結するのは手軽ですので。

先読み・後読みや再帰を利用した超絶技巧的正規表現でも構いません。アイデアを求めています。


577:nobodyさん
09/10/15 00:24:07
>>568=570=576
テキストエディタの実装する正規表現には方言がある。
ここで尋ねても埒が明かない可能性が大なので、新Mac板の専用スレッドに引っ越すことを推奨。

Mac用テキストエディタ Jedit X / 1.0~4.0
スレリンク(mac板)

578:nobodyさん
09/10/15 13:12:35
>>576
Perlでしてみた。
そのエディタは後方参照はできるんかな?

my $str = "<asaabcasalaabca>";
print $str, "\n";

$str =~ s/((?:<|\G).*?)abc(?=.*?>)/\1def/g;

print $str, "\n";

579:578
09/10/15 13:19:37
>>568のケースだけなら大丈夫だけど、汎用的には不具合がありそうなので取り消し

580:578
09/10/15 13:37:10
試行錯誤した結果、以下でいけそうな感じだけど、どうだろう?

$str =~ s/((?:<|\G)[^<>]*?)abc(?=[^<>]*>)/\1def/g;


581:nobodyさん
09/10/15 13:51:05
utf-8の文字コード内にない文字を探すにはどんな感じにすればいいんでしょうか?
javascriptです。


582:nobodyさん
09/10/15 20:38:57
>>568
Perlだったら。
s/<(.*?)>/(my $s = $1) =~ s{abc}{def}g; "<$s>"/ges;

エディタのマクロでやるのがいいかなと思うけど、ちょっと面倒。

583:nobodyさん
09/10/19 23:25:42 /Zspq1xO
PHPでとあるファイルを読み込んで、読み込んだファイルの中に下記の記述
があれば正規表現(preg_replace等)で空白に置き換えたいと考えています。
正規表現で正規表現を消す記述の仕方がわかりませんorz
どのような正規表現を記載すればよいでしょうか。
すみませんがお分かりになられる方が居られましたらご教授よろしくお願いいたします。


↓↓↓消したい記述その1↓↓↓
if ( /^(To|Cc): admin@admin\.com$/:h || /^(To|Cc): .*\<admin@admin\.com\>/:h )
{
cc \"| /usr/bin/nextbb -c ISO-2022-JP -s 'xxxxx' -A 'From:yyyyy <admin@admin.com>' -t
/home/sendmail -t\"
}


↓↓↓消したい記述その2↓↓↓
/^[a-zA-Z0-9\-\.\/\[\]\(\)\{\}\|@`:<>,!?\"'#\$%&*+;\\=^_~ ]*?$/"




584:nobodyさん
09/10/19 23:36:46
Linuxコマンドが入力されるインプットボックスの入力チェック処理を
正規表現でやりたいのですが、どのようなチェックを行えばいいでしょうか?

585:nobodyさん
09/10/20 09:19:58
それはキミがどのような入力を許可したいかがわからないから答えようがない

586:nobodyさん
09/10/23 15:06:47
それを聞いているんじゃないのか

587:nobodyさん
09/10/23 17:07:26
Linuxコマンドとか、インプットボックスって何?

588:nobodyさん
09/10/24 13:30:39
<input>で何か入れてsubmitすると、それが実行されるのか?
なんか巧妙にうまくごまかして危険なコマンド実行されそうだな。

正直俺の知識では知らん。
どんなコマンドも受け付けたくないな。
そもそもコマンドによってチェック内容は変わるんじゃないの?

589:nobodyさん
09/10/24 18:23:59
<input name="cmd" type="text" value="rm -rf ." />

590:nobodyさん
09/10/25 08:12:45
>>584
俺はこれからどのように生きていけばいいでしょうか?
くらいに漠然とした質問だなこりゃ。

構文的に shell が受理可能かどうかなら Perl なら shellwords.pl 使うとかな。

591:nobodyさん
09/12/09 19:11:48
まだ正規表現が素人なので教えてください。
たとえば以下のように四行の文章があって
それら文章の最初(一番目)の空白文字だけを検索するには
どうすればいいのですか?

The environment of contents industries is so drastically changing,
though Japan has not fully.
taken advantage of the changes to develop.
its presence in the global market.

The とenvironmentの間の空白文字 、though と Japanの間
taken とadvantage の間の空白文などなどです

592:nobodyさん
09/12/09 21:08:56
Perlで関数の括弧をドンドン入れ子にしていく正規表現書いてるだけと
(\([^()]*(((\([^()]*\)[^()]*))*\)[^()]*)*)*\)
↑これに穴は無いよな!?
どんなに入れ子にしても、エラーはでないかな
初めて作った正規表現なんだが。ご指南、よろ

593:nobodyさん
09/12/20 20:33:27 fe9ijwb+
0*(\d+)

これの意味を教えてください

()の中はわかるのですが前がよくわかりません

594:nobodyさん
09/12/20 20:38:26
数字の並びから先頭の0を取り除いてる

595:nobodyさん
09/12/20 20:44:43 fe9ijwb+
なるほど
00200 とかの前の0を無視して検索できるという感じですか

596:nobodyさん
09/12/21 08:18:48
>> 0*(\d+)
0が0個以上並んだ後に、0~9が1個以上並ぶ。

597:nobodyさん
09/12/21 20:42:38
>>592
見てないけど無理
(??{})あたり使えばいける

598:nobodyさん
09/12/23 22:25:52 Hajqsr0G
HTMLタグの <ul> <li> について、入れ子構造になっていた場合も考慮しつつ Pukiwiki等の記法に変換しようと考えています

<ul>
  <li>1行目@1段目
  <li>2行目@1段目
  <ul>
    <li>3行目@2段目
    <li>4行目@2段目
  </ul>
  <li>5行目@1段目
</ul>

これを

- 1行目@1段目
- 2行目@1段目
-- 3行目@2段目
-- 4行目@2段目
- 5行目@1段目

こんな感じにしようと四苦八苦しているのですがどうにも難しく…
ヒントだけでも良いのでアドバイスをお願いします。

今は、<ul>が存在する限り
<ul>( <ul>以外 )<\/ul> を抜き出して
その中を /<li>(.*?)<\/li>/s で置き換えて、抜き出し元と差し替えて
最初に見つかった<ul>(.*?)<\/ul>について <ul> と </ul>を削除、と考えていますが
最初の <ul>以外 の時点で既につまづいている始末です。

599:nobodyさん
09/12/23 23:13:19
$head= '';
$s=~ s/(<ul>)\s*|(<\/ul>)\s*|<li>(.*)(?:<\/li>)?\s*/$1?scalar($head.='-',''):$2?scalar(($head=substr($head,1)),''):"$head $3\n"/gei;
print $s;

600:nobodyさん
09/12/29 00:08:08 F3P1tBWB
文字列の中にある¥を除去したかったのですが、preg_replace('/¥/')や
preg_replace('/¥¥/')では削除できなかったのですが、preg_replace('/¥¥¥/')だと削除できました・・・
これはなぜでしょうか。
¥は次に有る文字をエスケープするわけですから、preg_replace('/¥¥/')でいけそうな気がするのですが。。。
正規表現初心者につき、低レベルですがご教授よろしくお願いいたします。
(上記は、あえて半角ではなく、全角の¥で説明しています。)



601:nobodyさん
09/12/29 12:06:00
やりたいこと自体はstr_replaceでできるだろうけどphpの正規表現がなんかおかしいな。
perlならそれで通るはずだけど。

602:nobodyさん
09/12/29 12:38:00
文字列としてのエスケープと正規表現としてのエスケープは別。
'/\\/' は /\/ '/\\\/' は  /\\/ '/\\\\/' も /\\/  



603:600
09/12/29 22:52:30 F3P1tBWB
>>601-602
なるほど!!
そういうことでしたか。
ありがとうございます!

604:nobodyさん
09/12/30 09:01:55
ああそうか、phpだとシングルクオートで囲んでも\はエスケープに解釈されるのか。

605:nobodyさん
10/01/24 19:36:14
<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さん
10/01/24 20:12:18
複数ならpreg_match_all()使うけど一つならpreg_match()で以下のように

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

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

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

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

609:nobodyさん
10/02/03 12:34:08
先生質問です
Rewriteで動的URLを静的URLにしたいのです

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

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

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

610:nobodyさん
10/02/03 13:22:42
ちょw

611:nobodyさん
10/03/02 21:59:18
 

612:nobodyさん
10/03/02 22:11:34
test

613:nobodyさん
10/03/08 15:33:08
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さん
10/03/08 18:01:54
たぶんs/`(\w+)`/`\U$1`/g

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

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

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

616:nobodyさん
10/04/11 02:49:42
>>615
ereg って多バイト文字に対応してないんじゃないか?


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

618:nobodyさん
10/05/02 00:32:33
: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さん
10/05/02 04:08:13
>>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さん
10/05/02 04:53:21
>>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さん
10/05/02 10:16:16
>>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さん
10/05/02 11:44:31
>>619-621
そうか、未来の拡張を考えて緩くしたけど、
2バイト文字以外のブログじゃ広くマッチしすぎるって事か。。。
それじゃスマイリーコードの方に厳格なルールを...
なんって考えるのもユーザーに優しくないし。
折り合いつけるの難しいね :|



623:nobodyさん
10/05/02 19:52:37
>>622
厳格さが必要でない処理が行われるというのがイメージできんのだけど、
マッチさせてどうしたいんだ?

624:nobodyさん
10/05/02 20:21:19
>>623
とあるCMSで、
引用表示の時は、リンクとか画像とか取っ払う追加プログラム書いてるから。

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

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

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

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


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

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

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

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

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

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


630:nobodyさん
10/05/19 16:47:15 t/z/xcK5
質問させてください!

ああああああ @ ABCD @ abcd

という文字を

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

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

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

631:nobodyさん
10/05/19 17:44:20
その例にするための条件って何?
スペース @ スペース が区切りとか?

632:nobodyさん
10/05/20 19:43:15 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
10/05/20 19:44:24
途中で投稿してしまいました。

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

634:nobodyさん
10/05/20 19:54:06
<th>名称1</th><td>(.*?)</td>

635:nobodyさん
10/05/20 20:40:36 a5arSWsA
URLリンク(www19.atpages.jp)
URLリンク(ukiya.sakura.ne.jp)
URLリンク(ukiya.sakura.ne.jp)


636:nobodyさん
10/05/20 21:13:11
<th>名称1</th><td>(値1|<img>)</td>

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

638:nobodyさん
10/05/24 12:25:48
便乗だけど
<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さん
10/05/24 14:40:31
<th>名称1</th><td .*?>(.*?)</td>


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch