正規表現道場
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2007/01/11(木) 02:40:43ID:uW7xEbZY・言語不問
・質問も大歓迎。使用言語を書くのを忘れずに。
正規表現と関係ない話・質問は他スレへどうぞ。
0002nobodyさん
2007/01/11(木) 03:10:51ID:???終了
00031
2007/01/15(月) 00:57:08ID:/DToo9Jnここはここでやればいい
再開あげ
0005nobodyさん
2007/01/15(月) 22:01:26ID:???過去スレ
正規表現道場@2ch
http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
http://pc5.2ch.net/test/read.cgi/php/1038146241/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
過去スレのテンプレにあった参考サイトたち
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門
http://web.archive.org/web/20021219021503/http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
ほとんどは↓のリンク集にまとまっています。
正規表現/文字コード最新リンク2005
http://www2.famille.ne.jp/~akio1998/l_grep.html
0007()と(?:)の違い
2007/01/21(日) 14:23:29ID:HARdTCVv正規表現 ^(/([a-z]*))*$ → マッチ
正規表現 ^(/(?:[a-z]*))*$ → マッチしない
後方参照を許す括弧かそうでないかで結果が違うのはなぜでしょうか?
処理系は PHP 5.2.0-8、OS は Debian GNU/Linux etch
使用した関数は preg_match() です。
具体的には
preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
var_dump($m);
とすると $m[0] が空文字列になります。
すなわちマッチしません。
0008nobodyさん
2007/01/21(日) 15:16:09ID:???preg_matchに与える正規表現は/で括る必要があるけど、原因はそれじゃない?
正規表現reをpreg_matchに与えるときは
preg_match("/re/", $baka);
とかやるんだけども。
0009()と(?:)の違い
2007/01/21(日) 15:25:20ID:HARdTCVvいちおう '@^(/(?:[a-z]*))*$@' などとして区切り文字を
@ にするなど気をつけているのですが・・・
()と(?:)により挙動が違うというのが解せません・・・
もう少し実験してみます。ereg 系で試すとまた
結果が違ってくるかも知れないので。
0010nobodyさん
2007/01/21(日) 20:27:33ID:???echo preg_match('{^(?:/(?:[a-z]*))*$}', "//abca");
=> 0
Perl互換正規表現と言うくらいなのでPerlとの比較をしてみても勿論このとおり
$ perl -e 'print scalar "//abca" =~ m{^(?:/(?:[a-z]*))*$};'
=> 1
後で念のためPCRE直接叩いてみよう
0011()と(?:)の違い
2007/01/21(日) 21:20:40ID:HARdTCVvふぅむ、バグの可能性もあるんですか〜
//abca じゃなくて /abca/abca とかならマッチするんですよね。
実はパスをディレクトリに分解しようとおもいまして、
その途中に // が入っているようなケースで挙動がおかしいので調べてました。
//abcde は / と /abcde に分解したかったんです。
001210
2007/01/21(日) 23:05:47ID:???[PCRE version 6.6 06-Feb-2006]
re> /^(?:a(?:b*))*$/
data> aa
0: aa
[PCRE version 6.7 04-Jul-2006]
re> /^(?:a(?:b*))*$/
data> aa
No match
[PCRE version 7.0 18-Dec-2006]
re> /^(?:a(?:b*))*$/
data> aa
0: aa
ver6.7のみ上手くマッチしないと言う結果になった。
changelogの7.0をみてもそれっぽいのが見つけられないけれど、38辺りかなぁ…
ちなみにPHPで使ってるPCREのバージョンは、
phpinfoのpcreのPCRE Library Versionで確認できる
0013nobodyさん
2007/01/22(月) 00:49:01ID:???>>12 の結果に疑問はないのだけど、
>>7 の
> preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
は空文字列にマッチで正解じゃないの?
だって、対象文字列には // と行頭に二つスラッシュが並んでいるけど、
正規表現は ^/ と一個しかないよ?
後ろに $ が置かれちゃってるから、
//hogehoge というパターンには空以外マッチしようがないと思うんだけど
俺、何か勘違いしてる?
0014nobodyさん
2007/01/22(月) 01:56:13ID:???多分、中のアルファベットに対する量指定子を考慮に入れてないんでないかい?
^ # 文字列の最初
(
/(?:[a-z]*) # /の後に[a-z]が0文字以上
)* # の0回以上繰り返し
$ # 文字列(行)の最後
//abcaは、<スラッシュ、[a-z]が"0文字"、スラッシュ、[a-z]が4文字>となってマッチしなければならない。はず。
>>11
その目的だとpreg_matchじゃ駄目だと思う。
一個目のキャプチャが繰り返しを全て記録することを期待したんだと思うが、毎回上書きされてしまう。
パス文字列が妥当なものかをマッチングで検証するためにpreg_matchを用いて、
実際の切り分けはexplode等を使ったほうがいいんじゃないかな。スレ違いになるが。
マッチングで切り分けるとするならpreg_match_allを用いて
preg_match_all('{\G/[a-z]*}', "//abca", $m)
といった感じか
0015()と(?:)の違い
2007/01/22(月) 04:08:40ID:???ビンゴのようです。
手元の二つのLinuxマシンで試してみました。
preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
Debian GNU/Linux etch
PHP 5.2.0-8 PCRE 6.7 04-Jul-2006
マッチしない。
Fedora Core 4
PHP 5.1.6 PCRE 6.3 15-Aug-2005
マッチする。
0016()と(?:)の違い
2007/01/22(月) 07:00:19ID:???TurboLinux Server 8.0 (Viper) での挙動も調べてみました。
preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
preg_match('"^(/(?:[a-z]*))*$"', "/a/abca", &$m);
いずれもマッチします。
PHP 4.2.3 PCRE 3.4 22-Aug-2000 です。
やはり Debian GNU/Linux etch の PHP5 5.2.0-8 だけが
PCRE 6.7 04-Jul-2006 を使っていて挙動が変みたいなんで、
Debian GNU/Linux の BTS (バグ報告)に挙げようとおもうんですが、
>>12 の結果も引用させてもらって構いませんでしょうか?
001713
2007/01/22(月) 11:21:28ID:???ありがとう。指摘通り誤読していた。
拡張表記をみてわかったよ。
やっぱLarryは偉いな。
ところでかっこの内と外で繰り返し指定が
連続するパターンは組み合わせの爆発が
怖くて自分はできるなら使わないように
しているんだけど、みんなはそんなこと
気にしない?
0018()と(?:)の違い
2007/01/22(月) 12:31:13ID:???DFAだからとりあえずえらいことにならないうちに停止するだろう、
とか自分では思い込んでるんですが、NFAなら延々とバックトラック
しながらはまり込むとかあるんですかね。
0020()と(?:)の違い
2007/01/22(月) 21:51:33ID:???ありがとうございます。
むしろ PHP のバージョンごとあげてもらえればと。
って、最新バージョンのソースに入ってるのか orz
ちょっと PHP のソース眺めながら思案してみます。
002120
2007/01/23(火) 00:05:58ID:???I've reported this issue to PHP bug report.
http://bugs.php.net/bug.php?id=40195
Complete report and examination results are in
http://geeklog.windy.cx/article.php/20070122224722545
I'm in my Linux box without Japanese environment :-p
002220
2007/01/23(火) 07:47:35ID:???[22 Jan 9:43pm UTC] [email protected]
I confirm this is a bug in pcre. so let's ask Andrei to
upgrade PCRE to version 7, maybe for PHP 5.2.2
(assign back to me if you want me to do it).
0024nobodyさん
2007/01/23(火) 21:15:28ID:EGIjqz4P@array = split(/(hoge(.))\2/, $line);
この2番目の括弧だけ@arrayに含めないことはできますか?
'----hoge11-----'
↓
('----', 'hoge1', '-----')
という風に取り出したいのです。
0025nobodyさん
2007/01/23(火) 22:31:38ID:???0026nobodyさん
2007/02/01(木) 17:35:44ID:???終了
002720
2007/02/14(水) 08:22:19ID:???bundled pcre upgrade to version 7.0.
0028nobodyさん
2007/02/17(土) 11:34:20ID:???http://www.pahoo.org/e-soul/webtech/php05/
0029nobodyさん
2007/02/18(日) 02:46:46ID:???0030nobodyさん
2007/02/20(火) 02:12:09ID:???ABCと続く場合を除くABという文字列を指定したい場合は
どのように書いたらよいでしょうか・・・
0031nobodyさん
2007/02/20(火) 02:21:35ID:???覚えなくても良いんでしょ?
よく、書く行数が減る⇒デバッグの時に楽って言うけど、
ロジック設計を完璧にするほうが大事じゃないかなーなどと思ってしまいます(ドシロウトですが)
そんなのとうに完璧って人がチャレンジすることなんですかねー
0033nobodyさん
2007/02/20(火) 02:26:48ID:???文字列のパターンを記述するために特化した言語なので、
覚えれば非常に楽ができる。
ロジックで100行とか費やすようなパターンを、
正規表現では1行で表すことも可能(かもしれない)。
覚えなくてもいいが、覚えた方がはるかに楽ができるよ。
0034nobodyさん
2007/02/20(火) 07:20:03ID:???ロジック組めないやつが楽をするためだよ
文字列から数字の部分だけ抜き出して表示とか正規表現なら簡単に出来るが
使わないでやれとかいわれたら時間がかかる。おまけにバグる。
0035nobodyさん
2007/02/20(火) 08:24:42ID:???0036nobodyさん
2007/02/20(火) 08:27:41ID:???0037nobodyさん
2007/02/20(火) 08:35:59ID:???http://human6.2ch.net/test/read.cgi/ms/1168957905/
7 名前:可愛い奥様[] 投稿日:2007/01/18(木) 03:03:54 ID:iE8GVdnP
援交10回、中絶2回、デリヘル、ソープ1年、整形2か所
12 名前:可愛い奥様[] 投稿日:2007/01/19(金) 22:43:01 ID:s7dkuHKN0
高校生の頃から喫煙。不倫経験あり。
旦那は私にとって7人目の彼氏。(旦那には3人目と嘘ついた)
酒に酔った勢いでワンナイトラブの経験あり。
25 名前:可愛い奥様[] 投稿日:2007/01/26(金) 04:08:25 ID:IfNo5kNWO
中絶4回、イメクラ一年、二重整形、大学中退、性病2回、同棲3回。
45 名前:可愛い奥様[sage] 投稿日:2007/02/04(日) 14:24:40 ID:PBhJa6V+0
自分の預金が旦那の年収の7倍くらいあること。
学生のとき、ちょっとした事業起こして大成功w そのことも話してない。
47 名前:可愛い奥様[] 投稿日:2007/02/04(日) 17:16:59 ID:CaAW9Ko50
うーん。堕胎。母子手帳に記載しないといけないから…そこは糊で貼付けた。
義母にはバレているだろう。でも回数が…1回多いとは…永遠の秘密。
92 名前:可愛い奥様[] 投稿日:2007/02/09(金) 23:46:04 ID:QRXcETQYO
セクキャバでバイト経験あり。援交しまくり時代もあり。ヤッた数は100人くらい。
私バツイチで今の旦那には元夫の浮気が原因で離婚したの。とか言ったけどほんとは逆。
好きな人できて夫捨ててのりかえた。浮気しまくりだった。
すごくいい夫だったのにすごく最低な事したって思う。
106 名前:可愛い奥様[] 投稿日:2007/02/18(日) 09:56:13 ID:wIf/65Md0
半年前、万引きして捕まった事。嘘泣きして逃がしてもらった(^^v
0038nobodyさん
2007/02/20(火) 19:16:13ID:W7lgDSO2と言う文字列があって/から/までの検出をするにはどう書けばよいでしょうか?
/と/も含めて12文字を検出したいのです。
超初歩的ですがよろしくお願いします。
0040nobodyさん
2007/02/20(火) 19:56:10ID:???バックスラッシュを前置してエスケープする。
/\/tatakanamk\//
0043nobodyさん
2007/02/21(水) 03:35:33ID:???004440
2007/02/21(水) 10:00:30ID:???と言い訳。
004542
2007/02/22(木) 01:40:37ID:???そりゃ確かにそうだね。
必要のないところまでエスケープしているような正規表現見てると
腹が立ってくるんだよw
>>44
わかった、わかったw
0046nobodyさん
2007/03/02(金) 01:04:13ID:???0047nobodyさん
2007/03/10(土) 16:03:45ID:VXyj5Dh3$str = "/get/data/&country=2&url=http://www.example.com/?url=http://www.example.com";
このデータの中ではじめの url= 以降の文字列を取得するにはどうすればいいのでしょうか?ちなみにurl=以降の文字列にも再度url=が含まれていますが、これを無視してすべて取得したいです。
どうぞよろしくお願いします。
0048nobodyさん
2007/03/11(日) 04:44:19ID:???url=http://www.example.com/?url=http://www.example.com
がとれりゃあいいのか?
url=.*$
で何か不都合ある?
0049nobodyさん
2007/03/12(月) 12:20:51ID:DmSqMrCU文字列中の?を抽出するにはどう記述したらいいのでしょう?
¥?
じゃだめなことはわかりましたorz
0050nobodyさん
2007/03/12(月) 12:48:47ID:???0051nobodyさん
2007/03/12(月) 14:27:04ID:DmSqMrCU0052nobodyさん
2007/03/18(日) 21:25:07ID:7HFdTRo7$in=ユーザーからの入力
$str='abc%ghi';
$str=preg_replace('/(\w+)%(\w+)/',"\1$in\2",$str);
ユーザーからの入力を'def'にしておくと、abcdefghiになります。
ですがユーザーからの入力が'123'の場合、ghiになります。
たぶん、置換後の文字列が「\1123\2」と、繋がって解釈されているからだと思います。
{\1}のように囲むとか、なにか繋がらないように解釈してもらう方法はないですか?
二段階に分けて置換するとかすれば回避できなくはないですがスマートではなさそうなので。
005352
2007/03/18(日) 21:25:46ID:???0054nobodyさん
2007/03/18(日) 22:00:48ID:???0055nobodyさん
2007/03/19(月) 08:43:07ID:???"\\1" . $in . "\\2"
"\\1{$in}\\2"
というか普通に\\1と\1を間違えてるだけじゃない?
005652
2007/03/20(火) 00:34:39ID:???>普通に\\1と\1を
すいません間違いでした。(ここに貼ったあと直しましたが動作変わらず。)
そのうえ↓を書いてて解決しました。手間取らせてすいません。
$in='123';
$str=preg_replace('/(abc)%(def)/',"\\1$in\\2",$str); //これが
$str=preg_replace('/(abc)%(def)/',"\\1123\\2",$str); //こうなってしまうので
$str=preg_replace('/(abc)%(def)/',"def",$str); //\\1123はないので消えて\\2だけ置換され
print $str; //defが出力される
と思うので、{$in}でくくっても結果は同じでした。
一番いいのは\\1側を{\\1}くくる方法だと思うのですが。
→phpだと\\1は\$1でもいいので、"\${1}$in\$2"で解決しますた。ほんとすいません。
0057nobodyさん
2007/03/23(金) 00:39:31ID:P+rVOV8A$str = preg_replace('/foo.*(=)bar/', "a\\1b", $str);
を実行した場合の結果をa=ba=bにしたいのですが、
実際はa=bになってしまいます。
どこが間違っているのでしょうか?
005957
2007/03/23(金) 10:16:39ID:P+rVOV8A.*を bar と続く文字列以外の任意の文字列に変えればいいというのはわかるのですが、
$str = preg_replace('/foo[^(bar)]*(=)bar/', "a\\2b", $str);
としてもうまくいきません。
エロイ人よろしくお願いします。
0060nobodyさん
2007/03/23(金) 10:45:01ID:???0062nobodyさん
2007/03/24(土) 01:11:05ID:???foo[^(bar)]*(=)bar
ブラケットの中とかどこでこんな書き方覚えてくるんだよ…
今回の場合、barまで見ないでも = までみりゃあいいんじゃないの?
不用意に最短マッチ使ってるとパフォーマンスで泣くよ?
foo[^=]*=bar を a=b に置換でいいじゃん。
=をキャプチャするのも意図がわからん。
0063nobodyさん
2007/03/24(土) 12:15:47ID:yU007f6l<head>
<title>テスト</title>
</head>
<body>
<!-- ここから -->
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ
<!-- ここまで -->
</body>
</html>
このようなhtmlをPHP5のfile_get_contentsで読み込んで
<!-- ここから -->〜<!-- ここまで -->を取得したいのですが
どうすれば良いですか?
"/<!-- ここから -->(.*)<!-- ここまで -->/"
で読めませんでした
0065nobodyさん
2007/03/24(土) 16:11:22ID:???mb_ereg("<!-- ここから -->(.*)<!-- ここまで -->", $text, $data);
echo $data[1];
改行に邪魔されてるんだろう
0067nobodyさん
2007/04/07(土) 00:58:14ID:YCq54Nw2C#で、正規表現でyyyy/mm/dd書式をどう表現するのでしょうか?
ちなみに、.NETの正規表現はPerl互換だそうです。
0068nobodyさん
2007/04/07(土) 04:03:00ID:???Datteクラスかなんかに文字列食わせて、例外飛ぶかどうかで
判定したら?
正規表現でやると 9999年13月35日をうけつけてもいいってのなら
\d{4}/\d{2}/\d{2}
かな。
月と日は頑張ればなんとかできるけどめんどくさいからやらない。
0069nobodyさん
2007/04/08(日) 02:12:40ID:EVMLEL7fありがとうございます。
実は、正規表現Validatorを使っているのです。
0070nobodyさん
2007/04/08(日) 16:37:48ID:???ああ、そういうことなのね。
一応注意しておくけど、C#の文字列のエスケープも\を使うので
プログラムに書くときは
"\\d{4}..."
のように\を重ねるか、
@"\d{4}.."
のような\が特別扱いされない形式にしてね。
0071nobodyさん
2007/04/15(日) 02:12:22ID:v7Ys668x$pattern1 = '`^(.*)(?:[/\\\](.*)){1}$`';
preg_match($pattern1, $fullpath, $match1);
$pos = strpos($match1[2], '.');
if($pos === false){
return array($match1[1], $match1[2]);
}else{
$pattern2='`^(.*?)\.(.*)$`';
preg_match($pattern2, $match1[2], $match2);
return array($match1[1], $match2[1], $match2[2]);
}
必ず拡張子があるなら一度のpreg_matchでキャプチャ出来たのですが
拡張子無しファイル混じりだった場合の正規表現がうまく思いつかずに二段階(三段階?)になってしまいました
でもpreg_matchやってその中で'.'探して、あったらさらにpreg_matchというのはまわりくどいように思います
この処理を一度にこなす正規表現の考え方のヒントをください
0072nobodyさん
2007/04/15(日) 02:14:51ID:???0073nobodyさん
2007/04/15(日) 03:03:32ID:???http://jp.php.net/manual/ja/function.dirname.php
及び関連項目を参照。
007473
2007/04/15(日) 03:04:35ID:???007573
2007/04/15(日) 03:10:35ID:???$path = '/abc/def.g/eee.txt';
preg_match('/(.*?)¥/([^¥/]*)¥.([^¥/.]*$)/', $path, $match);
print_r($match);
こんな感じでどう?
007673
2007/04/15(日) 03:17:28ID:???/(.*?)¥/([^¥/]*?)(¥.[^¥/.]*)?$/
でどうかな。スレを汚してしまってすまん。
0077nobodyさん
2007/04/15(日) 09:05:07ID:???007971
2007/04/15(日) 11:28:41ID:???$p = pathinfo($fullpath);
$temp = explode('.',$p['basename'],2);
$p['name'] = $temp[0];
if(isset($temp[1])){
$p['ext'] = $temp[1];
}
>>76を参考にして正規表現で書けました
$pattern = '`^(.*)[/\\\]([^.]*?)(?:\.(.*))?$`';
preg_match($pattern, $fullpath, $match);
ありがとうございました
0080nobodyさん
2007/05/03(木) 19:11:49ID:meD6A7ah絵文字が複数含まれた文字列?などでうまく取り除けません。
こんな感じにしているのですが原因やおかしな点などご教示ください。お願いします。
$str = '絵文字が含まれる文字列';
$emojiSjisChars = '(?:[\x00-\x7F\xA1-\xDF]|(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]))';
#DoCoMoの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])|(?:\xF9[\xB1-\xFC])/', '$1', $str);
#AUの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:[\xf3\xf6\xf7][\x40-\xfc]|\xf4[\x40-\x8d])/', '$1', $str);
#Softbankの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)\x1B\x24[E-G].*?\x0F/', '$1', $str);
008180
2007/05/03(木) 19:17:55ID:meD6A7ah0082nobodyさん
2007/05/03(木) 19:26:15ID:???(?:絵文字のコード) な部分を (?:絵文字のコード)+ にするだけではないの?
008380
2007/05/03(木) 20:24:41ID:meD6A7ahレスありがとうございます。
下のように+を入れましたがダメでした。
色々考えているとどんどん分からなくなってきました...
おかしな点があれば引き続きご教示お願いします。
#DoCoMoの場合 ※見にくいので表示上改行します。
$str = preg_replace(
'/\G(' .$emojiSjisChars.'*?)
(?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])+|
(?:\xF9[\xB1-\xFC])+/', '$1', $str);
0084nobodyさん
2007/05/04(金) 00:29:52ID:???通常のと第2版ってのがあるけどどっちがいいのよ?
0085nobodyさん
2007/05/04(金) 03:16:56ID:???通常のって初版のことかい?
そりゃあ新しい方が。
具体的にどう変わったか覚えてないのでオライリーのサイトを見たけど、
Perlの対象が5.8にあがっているのと、.JAVAとNETの説明が増えたとからしい。
0086nobodyさん
2007/05/10(木) 19:57:43ID:???---------------------------------
$str = <<< DOC_END
あああああ
いいいいい
<html_start>
ううううう
えええええ
<html_end>
おおおおお
DOC_END;
$pattern = "/<html_start>(.*)<html_end>/";
$replacement = 'aaaabbbb';
$res = preg_replace($pattern, $replacement, $str);
print_r($res);
---------------------------------
と出力してみましたが何も表示されませんでした。
ホントは「あああああいいいいいaaaabbbbおおおおお」と出て欲しかったのですが…。
最終的には<html_start><html_end>で囲まれた範囲に
PHPのhtmlspecialchars()やnl2br()関数を適用して出力したいです。
0087nobodyさん
2007/05/10(木) 20:35:51ID:???> $pattern = "/<html_start>(.*)<html_end>/";
「 ^ や $ があるってことは正規表現って行単位?複数行の場合は?」とか思いながら
$pattern = "/<html_start>(.*)<html_end>/s";
にして試す。で、「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。
うちのPHP5さんでは元のコードでも「何も表示されない」にはならなかったな。
ブラウザ出力: あああああいいいいい うううううえええええ おおおおお
ソース: print_r($str) な感じ
0088nobodyさん
2007/05/10(木) 20:51:04ID:???s修飾子で動作しました!ありがとうございます。
>「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。
関数のページばかりみて
http://jp.php.net/manual/ja/ref.pcre.php
http://jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php
のページの存在に気がつきませんでした…。
あとは関数を適用する方法を探してみますっ!
0089nobodyさん
2007/05/10(木) 21:18:19ID:???009086
2007/05/14(月) 15:45:03ID:???>>87の「S修飾子」と同時に使おうと
$pattern = "/(.*?)<html_start>(.*)<html_end>(.*?)/se";
$replacement = "'\\2''\\1''\\3'";
こんなコードを書いてみた所
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
Failed evaluating code:
といった感じで怒られます
修飾子2個は同時に使えないのでしょうか…?
009186
2007/05/14(月) 17:55:10ID:???自分で見返してたらこれは既に正規表現でなくPHPの質問な気がしてきましたので該当スレに
移動しますです。
スレ違、申し訳ありませんでした。
0092nobodyさん
2007/05/17(木) 13:08:20ID:???210.000.111.1〜210.000.111.255
215.100.000.1〜215.100.000.255
の2つに当てはまる場合、TRUE(int1)をかえすにはどうすればいいでしょうか?
以下のようにやってみたのですが他のIPでもint(1)がかえってきます。
preg_match('/^210\.000\.111\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ || ^215\.100\.000\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $_SERVER['REMOTE_ADDR'])
0093nobodyさん
2007/05/17(木) 13:53:20ID:???正規表現で foo || bar みたいなのはないっしょ。
/^(210...(中略)...|215...(中略)...)$/ みたいな。
アドレスの範囲のチェックをするなら正規表現使わない方が良いと思うけどね。
0094おながいします
2007/06/06(水) 13:28:10ID:iKhV2zih例
\1,000,000,000
\12,345
\1,230
\200
\10
数字3つごとに、カンマが入り、先頭に円マーク(\)のくるものです。
判らないためググッたのですが、正規表現に関する本ばかり検索結果として出てきまして…。
0095おながいします
2007/06/06(水) 13:29:35ID:iKhV2zih0096nobodyさん
2007/06/06(水) 13:41:59ID:???0097nobodyさん
2007/06/06(水) 13:49:54ID:???0098nobodyさん
2007/06/06(水) 14:54:17ID:???穴だらけだけどこんなんのこと?
$hoge = "\1,000";
if(ereg(".*[0-9,\\]",$hoge)):
echo "ok";
else:
echo "ng";
endif;
0099nobodyさん
2007/06/06(水) 15:08:26ID:???つ[ http://www.google.co.jp/search?hl=ja&q=%E9%87%91%E9%A1%8D%E3%80%80%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&lr= ]
010094
2007/06/06(水) 17:22:28ID:???皆様、ありがとう御座いました。
「価格 正規表現」、「値段 正規表現」でググってました(汗)
0101nobodyさん
2007/06/30(土) 13:42:20ID:???$obj->method();の「method」のみにマッチさせるにはどうすればいいでしょうか。
ちなみに(?=pattern)は使えます。
0102nobodyさん
2007/07/09(月) 23:51:58ID:jN4+J6ks条件としては、「A0123」のように、先頭がアルファベットのAでその他が数字4桁という正規表現と、
「01234」のような数字5桁という二種類のどちらかにマッチする正規表現を作っています。
正規表現は苦手で困っています。
どなたかご教授下さい。
よろしくお願いします。
0104nobodyさん
2007/07/13(金) 17:31:53ID:lsKPRG81電話番号(携帯など)も引っかかってしまいます
どのように直せばいいのでしょうか?
mb_ereg_replace('([0-90-9]{3}[\-−ー‐]+[0-90-9]{4}|[0-90-9]{7})',"郵便番号",$data)
0105nobodyさん
2007/07/14(土) 04:11:15ID:???(\D)\d{3}-\d{4}(\d{3})?(?!\D) を \1郵便番号 で置換。でどう?
面倒くさいので全角数字とかハイフンの類は自分で調整して。
0106nobodyさん
2007/07/20(金) 05:15:36ID:wp5plGkY<>外部の< > " をそれぞれ < > " に置換したい(<>内部はそのまま)
のです。以下のように、まず全ての<>"を置換し、HTMLタグの<>だけを
元に戻してみましたが、うまくいきません。どなたかご教授願います。
言語はあとでPHPでも同様のものを作成する予定ですが、今はPerlです。
$text = "tt\"tt<3bbb\nst<a gg&tg;gg href=\"aaa\">bbb<\n";
print "before=\n";
print $text."\n\n";
$text =~ s/</</g; $text =~ s/>/>/g; $text =~ s/\"/"/g;
$text =~ s/<([^(>)]*)>/<$1>/g;
while ($text =~ /<([^>]*)\"\;([^>]*)>/) {
$text =~ s/<([^>]*)\"\;([^>]*)>/<$1\"$2>/g;
}
print "after=\n";
print $text."\n";
↓このように置換されることを想定しています。
tt"tt<3bbb
st<a gg&tg;gg href="aaa">bbb<
0107nobodyさん
2007/07/20(金) 05:26:31ID:???0108106
2007/07/20(金) 05:38:28ID:wp5plGkY実体参照の部分がそのまま表示されてしまったので全角で修正します。
よろしくお願いします。
tt&quot;tt&lt;3bbb
st<a gg&tg;gg href="aaa">bbb&lt;
0109nobodyさん
2007/07/20(金) 08:47:21ID:???どこまでがタグか解析してタグ以外のタグ文字を実体参照化したいということ?
それ元のテキストを生成してる時点で何か間違ってるだろ
0110nobodyさん
2007/07/20(金) 12:57:58ID:???間だけを操作しようと3分考えて、ネストがありえることに気付いて挫折した。
0111nobodyさん
2007/07/20(金) 13:08:08ID:???それじゃあどこからどこまで切れば良いのかわからない。
xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz
の時、何が保証されていて、どこからどこまでをタグと見なせばいいの。
0112106
2007/07/21(土) 01:21:27ID:VYWED9XA掲示板で投稿された書き込みに対して、上記のような処理をしたいと考えています。
>>106のスクリプトは処理を掲示板に組み込む前に処理の部分だけテストするために作成したものです。
$textは書き込み内容と想定しています。
一番内側の<>をタグと見なしたいです。
xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz
この場合ですと、<fhg>と<qq>をタグとみなし、他は実体参照化したいと考えています。
0113nobodyさん
2007/07/21(土) 02:45:37ID:???<[^>]*>
ということですね。
0114106
2007/07/21(土) 08:55:35ID:VYWED9XA左様です。
0115nobodyさん
2007/07/21(土) 09:30:47ID:???それ以前に106はエスケープ、エンコード、サニタイズ処理で何か間違ってる
use HTML::Entities;
$tag_re = qr/<[^<]*?>/;
$text =~ s/($tag_re)|(.)/$1||encode_entities($2)/eg;
print $text;
0116nobodyさん
2007/07/21(土) 13:10:23ID:7GHIEbSOhttp://localhost/index.htm
https://localhost/index.htm
http://test.com/index.htm
から
/index.htm
/index.htm
/index.htm
これを出力したい場合
ereg_replace('^https?://(localhost|test.com)' ,'' ,$line);
これでは間違ってるでしょうか?
どなたか教えて下さい。お願いします
0117たけもー
2007/07/27(金) 23:18:07ID:boPeFaxI就職率−6月(この全角−を)半角に変えたいです。
$a = ereg_replace("[−]", "-", $a);
どうしたらいいでしょうか?
0118nobodyさん
2007/07/28(土) 02:31:21ID:k6nESKD8mb_ereg_* か preg_* を使うといい。
ただしpreg_*のほうはUTF-8でないとダメだったと思う。
0119たけもー
2007/07/28(土) 15:25:04ID:9w1k0jgB就職率−6月(この全角−を)半角に変えたいです。
$a = mb_ereg_replace("[−]", "-", $a);
mb_でもだめでした。
どうしたらいいでしょうか?
0120nobodyさん
2007/07/28(土) 15:37:30ID:???0121たけもー
2007/07/28(土) 16:32:13ID:9w1k0jgBShift-JISです、
0122名無しさん@そうだ選挙に行こう
2007/07/29(日) 01:50:43ID:???エンコーディングを持っていて、何も指定しないとそれ使うはずだから、
自分がSJIS指定しているつもりでも、そうでない可能性があるってこと。
<?php
echo mb_internal_encoding() . "\n";
echo mb_regex_encoding() . "\n";
$v = "就職率−6月";
mb_regex_encoding("sjis");
echo mb_regex_encoding() . "\n";
$v = mb_ereg_replace("[−]", "-", $v);
echo $v;
こんなんで置換はできたっぽい。
echo しているのは確認のためなんで気にしないでいい。
いずれにしろ mb_regex_encodingで設定しないとダメだった。
0123たけもー
2007/07/30(月) 07:40:51ID:DqqhKvmnありがとうございますw
0124たけもー
2007/07/30(月) 21:23:25ID:TD8Lc2Idfile(http://)で取得した文字列がUTF-8で
UTF-8からsjisにしたら全角マイナスが消えてしまいます。
消えて、改行されています・・・
テストソースですので
mb_ereg_replace
などで置き換えなどは一切してません。
どうしてでしょうか?
0125nobodyさん
2007/07/30(月) 23:11:52ID:???0127nobodyさん
2007/07/31(火) 01:38:26ID:???0128nobodyさん
2007/07/31(火) 02:17:21ID:???変換に使っている変換表の問題(なので正規表現の問題じゃない)。
PHPで使っている変換表の素性はわからん。
ぐぐれば「波ダッシュ問題」あたりとならんで見つかると思うけど
どっかのスレで話題になったか、これ?
http://www.google.com/search?sourceid=mozclient&ie=utf-8&oe=utf-8&q=utf8+%E5%A4%89%E6%8F%9B+%E5%85%A8%E8%A7%92%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9+%E5%8C%96%E3%81%91%E3%82%8B
ま、がんがって調べてくれ >たけもー
0129nobodyさん
2007/07/31(火) 02:24:36ID:???http://pc11.2ch.net/test/read.cgi/php/1169725490/
ここ、かなあ。
つーか、元の要件でもこのスレと無関係な str_replace で済むじゃん。
0130nobodyさん
2007/08/10(金) 10:21:28ID:dRcI3VfS正規表現で指定しろと言うんです。勿論正規表現は知らないどころか初めて耳にしました。
a00abcd1.kngwnt01.ap.so-net.ne.jp
123.123.123.123.ap.yournet.ne.jp
前者のIPが何らかのコード1つに変換されるタイプと後者のIPがそのまま出るタイプの
リモホをそれぞれホスト単位で全て「正規表現で指定」するとずばりどういう表記になるのでしょう?
0131nobodyさん
2007/08/10(金) 10:29:11ID:???(xxx.example1.jp|xxx.example2.jp|xxx.example3.jp)
0132nobodyさん
2007/08/10(金) 13:25:55ID:???なるほど…ひとつをピンポイントで指定する場合は
正規表現というのを使わなくても良いという事なのでしょうか…
130の前者だけなら
a00abcd1.kngwnt01.ap.so-net.ne.jp
と、そのまま指定、両方の二つなら
(a00abcd1.kngwnt01.ap.so-net.ne.jp|123.123.123.123.ap.yournet.ne.jp)
となるんでしょうか?
0133nobodyさん
2007/08/10(金) 18:16:54ID:???そのものずばりというのも正規表現の一種だよ。
a00abcd1.kngwnt01.ap.so-net.ne.jp
というのも正規表現だよ。
あと細かい話を言うと、ピリオド「.」は正規表現において任意の1文字にマッチするメタ文字なので、
ピリオドそのものにマッチさせたい(他の文字にはマッチさせたくない)ときには「.」の代わりに「¥.」を使う。
a00abcd1¥.kngwnt01¥.ap.so-net¥.ne¥.jp
んでも、この場合はそこまでしなくても問題はなさそうだけどね。
0134nobodyさん
2007/08/10(金) 22:15:38ID:???どうもありがとうございました!大変参考になりました
というかこれを機会にちょっと勉強してみます…
ありがとうございました
0135nobodyさん
2007/08/11(土) 01:30:22ID:2Sf3pkhNと
.+
は、完全に同じ意味と考えてもOKですか?
それとも、何か挙動が変わってくることはありえますか?
0136nobodyさん
2007/08/11(土) 02:02:02ID:???.* 0文字以上の任意の文字列
で最初から違ってましたね
ナハハ…
0138nobodyさん
2007/08/14(火) 22:01:22ID:???3.3以上に該当するの文字列っていうのは、できますでしょうか?
たとえば3.3.4や3.5、9.0などです。
バージョンのようなものです。
やはり数値型でないと難しいのでしょうか。
0139nobodyさん
2007/08/14(火) 22:20:59ID:???3.10.0 とかね、真面目にやろうとすると、
'.' で split して、上の桁から順に整数値として比較していく、
みたいにやらないといけなかったりして。
0141nobodyさん
2007/08/15(水) 00:01:44ID:???0142nobodyさん
2007/08/15(水) 00:28:29ID:???0143141
2007/08/15(水) 01:17:11ID:???/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:(?:[1-9]\d+|[3-9])(?:\.(?:[1-9]\d*|0))*))\z/
0144nobodyさん
2007/08/15(水) 22:05:09ID:???ありがとー!ちょっと見てみます!
>>142
厳密にどういった値があり得るのかも分からないのでそこまで細かくしなくてもいいかなという感じです。
バージョンというか、ユーザーエージェントの後によくついている数値なんですが。
0145nobodyさん
2007/09/01(土) 14:16:44ID:tMwZKBAJUNIXで
% ls
a0/ a1/ a2/
のとき
% cd *1
ができるけど*は何の繰り返し???
*は何でもマッチと思っていたのは間違いですか???
0146nobodyさん
2007/09/01(土) 15:26:18ID:epTGamb+Perl互換の正規表現では 「*」 は量指定子というものの一種でありまして、 文字、 文字クラス、 グループの直後に付き、
それらに0回以上の繰り返しという意味を持たせるのですが、 正規表現体系が違えば 「*」 が違うことを意味することもありましょう。
0147nobodyさん
2007/09/01(土) 15:34:18ID:epTGamb+0149nobodyさん
2007/09/01(土) 16:54:59ID:fGUplrri一瞬、ハーバーライフと間違えるところだった。。
違うよ、コレは。
ヤフオク関連の最強情報
これを知らずして、ヤフオクで稼ぐことは出来ない。(キッパリ)
http://2ch2.net/.l?=jd2e
0152nobodyさん
2007/09/02(日) 09:50:38ID:RtluGpKC192.168.*.* //OK
1000.1000.1000.1000/OK
*.168.50.5 //NG
(\d+)(\.([*(\d+)])){3}
なぜこれでダメ?
0153nobodyさん
2007/09/02(日) 11:04:51ID:tGLa/mAn正規表現とは文字列の集合を表現する手段でありますから、
ワイルドカードを用いた表現も正規表現の一種であります。
0154nobodyさん
2007/09/02(日) 11:20:25ID:tGLa/mAn> (\d+)(\.([*(\d+)])){3}
これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。
> *.168.50.5
これは数字の後、 ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が2回しか繰り返していないので、
先ほどの正規表現にマッチしません。
0155nobodyさん
2007/09/02(日) 11:40:01ID:tGLa/mAn> (\d+)(\.([*(\d+)])){3}
だと、
> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5
のすべてにマッチしないはずです。 先ほど
> これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。
と申しましたが、 より正確には、
・ 数字が1つ以上あり、 その後ピリオドと 「*」、 「(」、 数字1つ、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現
でありまして、
> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5
のどれもそのような文字列ではないからです。
0156nobodyさん
2007/09/02(日) 12:28:15ID:???0157nobodyさん
2007/09/02(日) 13:10:37ID:???数字だけがマッチする正規表現ってむずくね?
[0-9]|[12][0-2]?[0-9]|[12]?[34][0-9]|1?[5-9][0-9]|25[0-5]
とか
[0-9]|1[0-9][0-9]?|2[0-4]?[0-9]|[3-9][0-9]|25[0-5]
とか
0158nobodyさん
2007/09/02(日) 19:09:05ID:???次のような文章があったとします。
左のは行番号で、実際の文章中にはありません。
01.<div>
02.text
03.<img>
04.</div>
05.
06.<div>
07.text1
08.text2
09.</div>
10.
11.<div>
12.hoge
13.<img>
14.</div>
ちなみにドットは改行にもマッチするようにしておきます。
これに対してパターン「<div>\n(.+)\n</div>」を最小マッチさせると、
サブパターンで02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれるんですが、
今度は<img>を含むdivだけをマッチさせようとして、「<div>\n(.+\n<img>)\n<div>」で最小マッチをさせると、
02,03と07,08,09,10,11,12,13行目にマッチしてしまいます。
ここで02,03と12,13行目だけにマッチさせるにはどうすればいいのでしょうか?
いろいろ考えたのですがよくわかりません。
どなたかよろしくお願いします。
0159nobodyさん
2007/09/02(日) 19:35:53ID:/HflMMhVすいません
「02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれる」は
02,03と07,08と12,13の間違いですね
0160nobodyさん
2007/09/02(日) 20:08:53ID:???「<div>\n((?:[^<]|<(?!div))+\n<img>)\n<div>」
これでいけるんですね
0161nobodyさん
2007/09/04(火) 05:14:07ID:p30GnV0e2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
192.168.50.*
192.168.*.*
192.*.*.*
192.168.50.5
1000.1000.1000.1000
これらはすべてOKとします。
0162nobodyさん
2007/09/04(火) 09:42:52ID:???> 2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
それ先に言えよ!
どういう結果が欲しくて、どう書いたら、どうダメだったか、を具体的に書かんと。
あと、使用してる処理系 (言語やソフトウェア) も。
で、ダメだった正規表現中の [*(\d+)] だけど、
[] は「文字クラス」の正規表現なので、
>>154 の言っているように * ( 数字 + ) のいずれかの「文字」を表す。
「* または数字」を表現したいのであれば、 (\*|\d+) みたいにする。
ので、こうかな。
(\d+)(\.(\*|\d+)){3}
0163nobodyさん
2007/09/04(火) 11:21:03ID:/G1gxUUQ↑これの使い方を教えてください。言語はPerlです。
0164nobodyさん
2007/09/04(火) 11:29:12ID:???"hoge" =~ /og/;
print join(",", $`, $&, $'), "\n";
↑こんな感じで、この場合は "hoge" に対して "og" がマッチするので、
$`, $&, $' にはそれぞれ "og" の前の "h", "og", "og" の後ろの "e" が格納される。
0165nobodyさん
2007/09/04(火) 11:54:02ID:/G1gxUUQできました。ありがとうございます。
0166nobodyさん
2007/09/09(日) 01:04:12ID:???0167nobodyさん
2007/09/10(月) 21:26:12ID:lrmAiBXNPerl互換の正規表現だと
[0-9a-z]{3}\.com
0169nobodyさん
2007/09/12(水) 11:22:48ID:DkIOyoGeそれだと大文字とアンダースコアにもマッチしてしまいます。
0170nobodyさん
2007/09/15(土) 15:32:58ID:???の「ほげほげ」だけを抜き出すのにはどう表記すればいいのでしょうか?
0171nobodyさん
2007/09/15(土) 16:48:18ID:???0173nobodyさん
2007/09/16(日) 01:35:56ID:6P4HpCmYhoge
hage
123.txt
の中から 123 を抜き出したいんだけど
"/^(.+?).txt/"
だと当然
hoge
hage
123
がマッチしてしまう。
hoge や hage は任意の文字列で数字が入る可能性もあるのだけど、どうやって抽出したらいいんでしょう。
0174173
2007/09/16(日) 02:11:14ID:???strrev()
で逆順にして、今度は
txt. で再度マッチングさせたらとりあえず抽出できました。それをもう一度逆順に。
こんな力業じゃなくて他に方法があるんだろうな……。
0175nobodyさん
2007/09/16(日) 02:19:07ID:???0176nobodyさん
2007/09/16(日) 03:52:16ID:vOvwrq99前後にデリミタ (「/」) が付いているという事はPerl互換の正規表現関数を使うのでありましょうが、
そうであれば 「.」 はs修飾子がない限り改行にマッチせず、 よって
/^(.+?).txt/
は
hoge
hage
123.txt
にマッチせず、 したがって
hoge
hage
123
がキャプチャされることはないはずです。
0178nobodyさん
2007/09/16(日) 13:59:22ID:G/qusHMmheight:244pt を height:122pt…
height:244pt を height="150"に
といった具合にheight:●●ptやheight="●●"の数値部分を
$bairitsu倍して置換するにはどのようにすればいいですかね?
やろうとしてることは、エクセルで作ってHTMLで保存したものを、
A4サイズの用紙に合うようにHTMLの中にあるサイズ指定を変更したいです。
使用言語はPerlです。よろしくお願いします。
0179173
2007/09/16(日) 15:18:36ID:6P4HpCmYそれは……ヒント? それともAA?
>>176
失礼。パターンを行頭にしたり行末にしたり改行文字にしたりしてるうちにこんがらかってしまったみたい。
正確には
"/^(.+?).txt/"
でマッチしました。
>>177
コード的にはこんな感じ。
$string = "
hoge
hage
123.txt
";
preg_match("/^(.+?).txt/", $string, $matches);
preg_match("/txt.(.*?)\r/", strrev($matches[0]), $matches);
echo strrev($matches[1]);
// 結果 123
PHPも正規表現も初心者なので変な書き方してるかもだけど……。
0180173
2007/09/16(日) 15:27:38ID:???なんで「マッチしてしまう」のだろう。
0181nobodyさん
2007/09/16(日) 21:38:24ID:YMkvDZNbああ、 改行コードをCRにしているのですね。
私は
> 「.」 はs修飾子がない限り改行にマッチせず
と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。
普通はスクリプトの内部では文字列の改行コードをLFにするものですが、
何か理由があってCRにしているのですか。
0182nobodyさん
2007/09/16(日) 21:48:57ID:YMkvDZNb0183173
2007/09/17(月) 00:37:12ID:/5o1hJUZ> と申しましたが、 正確には 「LFにマッチせず」 でありまして、 CRにはマッチします。
あー、そういう事なのか……。
勉強になります。
> 何か理由があってCRにしているのですか。
実はいつも決まった形式で入稿されるテキスト原稿を決まった形式のHTMLにするだけの仕事が定期で入ってくるんです。
で、毎回毎回コピペにつぐコピペで対応し続けるのもバカくさいので極力自動化しようと思い、PHPでシコシコ書いている次第。
そのプログラムに食わせるお客さんからの入稿原稿を元に作ってたのでCRになってました。
試しに改行コードをLFにしてm修飾子というのを試したらうまくいきました。
なるほどもらった原稿をLFに変換してから使えばいいわけだな。
ありがとーございました!
0184nobodyさん
2007/09/17(月) 01:05:58ID:T68tRmUw0185173
2007/09/17(月) 15:37:44ID:/5o1hJUZおーなるほど。ありがとうございます。
0186nobodyさん
2007/09/18(火) 14:10:13ID:hpuf++fz例)
<!--
コード
・
・
-->
HTMLタグは s/<.*?>//sg; とすれば削除できますが
なぜかコメントタグだけが残ってしまいます。
コメントタグの開始「<」と終了「>」以外の全ての文字列・記号・改行コードを削除したうえで
s/<>//g; としてみましたが削除することができません。
s/<//g;
s/>//g;
とするとなぜか削除できます。
うまく削除できる方法をご存知の方がいたら教えて下さい。
0187nobodyさん
2007/09/18(火) 16:31:55ID:???コメントタグのネストはないだろうし(JavaScriptとかで書き出してたら別だけど・・)
0188nobodyさん
2007/09/19(水) 07:54:55ID:???レスどうもありがとう。
s/<!--.*?-->//gsでもなぜかうまくいかないので
コメント行が現れたらif文でスルーするようにしました。
0189nobodyさん
2007/09/19(水) 21:54:47ID:???もちろん本人の技量にもよると思いますが、Perlをまったく知らない人間がという解釈でお願いします。
逆に文字列処理をしたいなら、Perlを一からやっとけみたいなのもありです。
0190nobodyさん
2007/09/20(木) 00:20:26ID:???preg_.*系関数ならPerl互換なのでふくろう本の記述が使えると思う。
というかね、ふくろう本のキモは処理系にほとんど依存しない3章と4章で、
それ以外はおまけだ。熟読すべし。
0191nobodyさん
2007/09/20(木) 01:57:42ID:???0193nobodyさん
2007/09/20(木) 13:36:17ID:KlmMrt1+<div align="center">F8FA</div>
</TD>
これの
「F8FA」の部分をpreg_match_all取得したいのですが、
'/<TD .*><div .*>(.*)</div><\/TD>/Ums'
としたのですが、何も取得されません。
どのように表記すれば良いのでしょうか?
0194nobodyさん
2007/09/20(木) 13:42:18ID:???こんな感じ?
0195nobodyさん
2007/09/20(木) 13:44:34ID:???'/<TD .*>\s*<div .*>(.*)<\/div>\s*<\/TD>/Ums'
0196nobodyさん
2007/09/20(木) 17:00:54ID:SqIRO2nC0197nobodyさん
2007/09/20(木) 19:58:25ID:???正規表現は二作出てるから次も一年たった今頃出るかなという予想込みだけど出なかったら出ないのもタイミングかなと。
0201nobodyさん
2007/10/02(火) 19:12:55ID:DsttFroaブラウザバージョンとOSのバージョンを取得するため
以下を作成しました
preg_match('/Mozilla\/.*(MSIE [0-9\.]+);.*(Win[^;\)]+|Mac[^;\)]+).*/i', $lua, $match)
ほぼ間違いなく取得できるのですが唯一以下形式のエージェントのみ
失敗します
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; Yahoo! JAPAN Version Windows 95/NT CD-ROM Edition 1.0.; DigExt)
古いバージョンなので切り捨てても良いとは思うのですが悔しいので
どうすれば正しく取得できるか教えていただけないでしょうか?
上記の正規表現では
MSIE 5.0
Windows 95/NT CD-ROM Edition 1.0.
ほしいのは以下
MSIE 5.0
Windows 98
0202nobodyさん
2007/10/02(火) 19:26:37ID:???こんな風でどう?
0203nobodyさん
2007/10/02(火) 19:34:02ID:DsttFroaありがとうございます
おかげ様でできました
比較検証して勉強させてもらいます
0204nobodyさん
2007/10/05(金) 23:08:47ID:ivRnBDKk$text = "第41条 [国会]は、[国権]の最高機関であつて、国の唯一の[立法機関]である。";
というテキストで[]でくくられた部分を検索エンジンに飛ばすためのリンクに書き換えるための置換処理を行いたいと考えています。
そこで下のように組んでみたところ
$text =~ s/\[(.*)\]/(<a href=\/http:\/\/foo.bar?query=\"$1\">$1<\/a>)/;
置換の対象となるカッコは行の先頭の[から行の最後の]までが対象となってしまい。上手く機能しません。
この置換処理はどうかけば、いいのでしょうか?
0205nobodyさん
2007/10/06(土) 00:06:57ID:???* や + は、そのままだと最長の文字列でマッチしてしまうので、
最短マッチにするために .*? みたいにすると良い。
あと、繰り返し処理させるために、 g オプション (/.../g みたいな) を付けるよろし。
0206nobodyさん
2007/10/06(土) 00:07:46ID:???$s=~tr/ /+/;'[<a href="http://foo.bar?query='.$s."\">$r</a>]"#ges;
こんな風でどう?
0207nobodyさん
2007/10/06(土) 00:35:40ID:1+GhnPpXどちらも上手く機能しました。
奥が深いですね
0208nobodyさん
2007/10/06(土) 16:42:21ID:kTx5Crj6C言語風には、'\\'みたいなやつです
0209nobodyさん
2007/10/06(土) 17:45:43ID:???0210nobodyさん
2007/10/06(土) 17:50:21ID:kTx5Crj6\\\ってかいたら一個認識した。
でも\\って連続する文字列は、\\\\\\だと駄目だった。
謎
検索に使ってるエディタは、UnEditorです
0211nobodyさん
2007/10/06(土) 18:29:58ID:C0xnGICK「\\\\」 というエスケープシーケンスが解釈されて文字列 「\\」 になり、 文字列 「\\」 が正規表現として解釈されて 「\」 を表すと見た。
その推測からすると、 「\\」 を表すには 「\\\\\\\\」 と打てばよい。
0212nobodyさん
2007/10/06(土) 18:34:59ID:kTx5Crj6なんという\
いけました。ありがとうございます。
0213nobodyさん
2007/10/07(日) 17:23:56ID:bdyGFUK8>>206のようにしなければならないわけですね。今、気がつきましたよ。
0214nobodyさん
2007/10/25(木) 15:30:25ID:???正規表現で文字制限をかける場合どのように書けばよいでしょうか?
日本語を含まなければ簡単そうですが、、、、
0217nobodyさん
2007/11/05(月) 12:34:21ID:???↑の様にファイルに名前をつけているのですが、これを下のようにリネームしたいのです。
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
[07.07.07]は日付です。2006/10/15なら[06.10.15]となります。
正規表現でどのように表現したら一括変換できるでしょうか?
どなたか御教示ください。
0218nobodyさん
2007/11/05(月) 12:38:12ID:EztAcqYR0220217
2007/11/05(月) 13:09:25ID:EztAcqYR失礼しましたPerl5です。
http://www.hi-ho.ne.jp/~babaq/bregexp.htmlのDLLを使って
Nameryでリネームするつもりです。
的外れなレスだったらすみません
0221nobodyさん
2007/11/05(月) 13:59:05ID:???s/^(\(.+?\))( \[.+?\] .+?)( \[.+?\])/\1\3\2/
空白の処理とか適当なので、あとは自分で調べていろいろいじってみてちょ。
0222nobodyさん
2007/11/05(月) 14:37:50ID:EztAcqYRバッチリできました!ありがとうございました
しかし依頼するカタチを間違えていましたorz
gomennnasaigomennnasaigomennnasai
(愛うえお) [07.07.07] [下記kuけこ] saし素せそ
↑ではなく↓にするにはどうすれば・・・
(愛うえお) [下記kuけこ] [07.07.07] saし素せそ
0223nobodyさん
2007/11/05(月) 14:41:33ID:EztAcqYRはぁゆとりすぎて面目ない
0224nobodyさん
2007/11/12(月) 05:47:51ID:Kg6xKnVX上記の中に、「ABC+16進数x2回」がいくつ含まれているかをPHPの正規表現で表すにはどうかけばよろしいでしょうか?
ご鞭撻よろしくお願いいたします。
0225nobodyさん
2007/11/12(月) 10:41:44ID:???正規表現はいまひとつなのでもっと上手いやり方があるかもしれないが・・・
$input_str = "あいうえおABC+F481ABC+F485かきくけこABC+F7A5さしすせそABC+F3F0ABC+F39EたちつてとABC+F65AなにぬねのABC+F485ABC+F7A5はひふへほABC+F7A5ABC+F39Eまみむめも";
echo preg_match_all("/ABC\+[A-F\d]{4}/",$input_str,$out_ary);
※$out_aryは無いとエラーになるので消さないで
0226nobodyさん
2007/11/13(火) 16:45:36ID:KDxCSN/cPHPスクリプトでpreg_match("/^[^@]+@[^.]+\..+/", $superunkoman))
という正規表現があったのですが
^[^@]+ ←最初の文字が@以外の文字の一回以上の繰り返し
@ ←で、@が入り
[^.] ←この部分が理解できません。
教えてください
0229nobodyさん
2007/11/13(火) 22:44:37ID:???phpスクリプトで
$str = ereg_replace(
"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\">\\1\\2</a>",
$str);
この正規表現の(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)の部分とhref=\"\\1\\2\">\\1\\2</a>この部分は
何を表しているのか教えてくれませんか?
0230nobodyさん
2007/11/14(水) 12:22:47ID:E8xVrSo00231nobodyさん
2007/11/14(水) 13:37:57ID:???次回からはまずマニュアル嫁
PHPマニュアルより引用
string ereg_replace ( string pattern, string replacement, string string )
pattern の中に括弧でくくられた部分 文字列が含まれている場合、
replacement の中に \\数字 のような部分文字列を埋め込むことも
できます。この部分は、 「数字」番目の括弧でくくられた部分文字列に
マッチする文字列に 置き換えられます。また、\\0 は文字列全体を
指します。9 個までの部分文字列を使うことができます。括弧は
入れ子になっていても構いません。この場合は開き括弧 '(' が
最大 9 個まで使用可能です。
0232nobodyさん
2007/11/23(金) 11:29:24ID:OIbrK2sw文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出
すことができますが、
文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。
0234nobodyさん
2007/11/23(金) 20:53:35ID:tvqFA7baすべての文字
を取り出す事は
0235nobodyさん
2007/11/27(火) 18:05:34ID:fIXcwnBhPHP5です
0236nobodyさん
2007/11/27(火) 19:15:14ID:???0237nobodyさん
2007/11/28(水) 13:29:18ID:fpWBgokpで、正規表現チェッカー
ttp://www.asterworld.com/ja/soft/regexchk.html
という物をみつけて、こりゃ便利だ!と思ってたのですが
作成した正規表現を preg_replace に設定してもマッチしてくれません。
そんなに方言があるとも思えないのですが...
C#2005の正規表現のようなのですがPerlの正規表現と何がちがうのでしょうか。
C#2005の正規表現をPerlの正規表現に変更するには無理なのでしょうか。
Perlの正規表現を作成するようなソフトはあるのでしょうか?
恐れ入りますがどなたか教えてください 頭がゴチャゴチャしてきて..
0238nobodyさん
2007/11/28(水) 15:10:44ID:???まずは、これ以上ないってくらい単純な正規表現で挙動を比較してみて、
そこから順次複雑な正規表現にしていって差異を見てみては。
0239237
2007/11/28(水) 15:41:05ID:???取り合えずアマゾンで本を注文しました。
言語ごとの差が判るようなものがあれば...
0240238
2007/11/28(水) 15:48:56ID:???それで、ぱっと見で、基本的なところは Perl と .NET とで大した差は無いと思う。
0241237
2007/11/29(木) 13:36:57ID:???お昼食べた後なんで眠くて眠くて フワァァ(/ 0 ̄)~゜
がんばってみます。。
0242nobodyさん
2007/12/11(火) 20:35:33ID:???PHPにて、特定の画像ファイル名を持つ<IMG>タグを抽出するという正規表現を作りたいのですが
上手く行かなくて困っております。
どなたか、お助けください。。。
0243nobodyさん
2007/12/12(水) 01:18:37ID:???もちっとくわしく。src属性以外に属性をもつのかとか。
多分alt属性がついていそうだけど。
preg_match('/<img .*?src=(["¥'])特定のファイル名を表す正規表現¥¥1 .*?>/', src);
とかか。今適当に作ったのでうまく動くかどうかはわからんけど
0244nobodyさん
2007/12/19(水) 16:38:31ID:H15tWjcK特定の文字列で囲まれた文字列を変換しない正規表現を教えてください。
たとえば
preg_replace("/aaa/", "[\1]", "aaa aaa aaa aaa aaa")
だと結果は "[aaa] [aaa] [aaa] [aaa] [aaa]" になりますが
preg_replace("/aaa/", "[\1]", "aaa{{{aaa aaa aaa}}}aaa")
となっていたときに
"[aaa]{{{aaa aaa aaa}}}[aaa]" という結果を取得したいんですが
思うように出来ません。
答えを直接出なくてもいいのでヒントだけでも教えてください。
0245nobodyさん
2007/12/19(水) 18:16:44ID:???後読み表明は量指定子を含められないから、もしpreg_replaceだけでやろうとするなら、
それ以外の部分を食わせておいて置き直すという、やや気持ち悪いことになると思う。
例えばこんなふうに
preg_replace('/(.*?(?:\\Q{{{\\E.*?\\Q}}}\\E.*?)*)(aaa)/', '$1[$2]', "aaa{{{aaa aaa aaa}}}aaa");
分解してから対象の部分だけ処理する等の方法も検討した方が宜しいかと。
0246nobodyさん
2007/12/19(水) 18:44:19ID:???http://www.city.ota.tokyo.jp/oshirase/mokutekibetsu/other/fusyouji_syobun/index.html
当区職員が傷害の容疑で逮捕されるという事件につきましては、新聞等での報道やホームーページで公表したところですが、今回、事実関係が明らかになり、以下のとおり懲戒処分を行いましたので公表いたします。
区民の皆様の信頼を裏切ることとなり、誠に申し訳ありません。あらためて、お詫びいたします。
懲戒処分とは
職員が一定の義務違反を犯した場合に、公務の規律と秩序を維持することを目的として、その責任を追及するために制裁として行う処分です。
大田区では懲戒処分の公表基準に基づき、免職処分をした場合や特に区民の関心が大きい事案又は社会的影響が大きい事案について、個別の懲戒処分を公表します。
(懲戒処分の制度の詳細は、大田区人事白書をご参照ください。)
処分発令日
平成19年12月19日
被処分者氏名
建築調整課 吉原 幸光
処分の内容
停職3月
処分の理由
一般非行関係(法令に違反し、全体の奉仕者たるにふさわしくない非行があったため)
事件の概要
この職員は、平成19年11月16日(金曜日)、勤務時間終了後、東神奈川駅周辺で飲食した後、帰宅途中のJR京浜東北線川崎―蒲田間の電車内において、乗客男性に全治4週間の怪我を負わせる暴行を働き、傷害の容疑により蒲田警察署に現行犯逮捕されました。
同職員は、東京簡易裁判所に起訴され、罰金刑を申し渡されています。
0247nobodyさん
2007/12/22(土) 08:43:52ID:KKfYoqPiPHPで携帯電話に文字列を表示する際に、
電話番号の部分をteltoリンクにしたいと思い以下のように書きました。
$bodySTR = preg_replace('/([-0123456789]+)/', '<a href="tel:\\1">\\1</a>',$bodySTR);
当然ながらこれだと、「100円」や「〒123-4567」にも反応してしまいます。
そこで、
「03-1234-5678」「090-1234-5678」「03−1234−5678」等にマッチして
「100」や「123-4567」にはマッチしない正規表現は可能でしょうか?
0248nobodyさん
2007/12/22(土) 14:06:28ID:???0249nobodyさん
2007/12/22(土) 16:17:35ID:???でどうよ
0250nobodyさん
2007/12/22(土) 17:39:05ID:6MoMAQ1+>>244の方と同じ様なものなのですが
"test <a href="http://test.jp"> test"
の様な文字列があった場合、タグ内のtestは変更せずに
"[test]<a href="http://test.jp">[test]"
という形にしたいのですが、どのようにすれば宜しいでしょうか。
一度置換した後、<>タグ内の物は[]を外す方法も考えてはみたのですが、
思うように動作させる事が出来ず。ご教授の程、宜しくお願い致します。
0251nobodyさん
2007/12/22(土) 17:52:18ID:???0253nobodyさん
2008/01/14(月) 12:16:38ID:6AXqvVgD1[3-8]:[0-5][0-9]:[0-5][0-9]
という感じに今なっています
誰が見てもわかりやすいしこれでもいいのですが、もっと短い書き方はないものでしょうか?
[0-5][0-9]ここが反復なので、([0-5][0-9]:?){2}とか思いつくのですが、
これだと最後にコロンが入っててもマッチしてしまうので回避できるような書き方はないものかなぁと。
0254nobodyさん
2008/01/14(月) 13:51:53ID:???0255nobodyさん
2008/01/15(火) 02:35:00ID:HyHnFj45私が小学生の頃、
日本中でノストラダムスの予言が大流行していた。
「1999年の7月に人類は滅亡する!」
という例のお騒がせ終末予言である。
大人になって社会に出て働きだして、
あくせくと忙しく日々を過ごしながら、
1999年は、
ありふれた日常の中であっさりと過ぎていった。
人類は滅ばなかった。
これからここで、
1999年に起こるかもしれなかった人類の壊滅的破局を、
誰にも知られずにこっそりと回避させた人たちがいた...
という設定で、
荒唐無稽なストーリーを描いてみたい。
無論、100%完全なフィクションである。
http://www5.diary.ne.jp/logdisp.cgi?user=532063&log=200705
0256nobodyさん
2008/01/20(日) 11:20:53ID:TPbCvsXGこの正規表現はどういうことでしょう?
何にマッチさせようとしているのでしょうか。
JavaScriptです。
0257nobodyさん
2008/01/20(日) 11:37:26ID:???0258nobodyさん
2008/01/20(日) 12:50:55ID:TPbCvsXG0259nobodyさん
2008/01/21(月) 16:00:34ID:???2chのdatを各要素毎にキャプチャしたいのですが、
preg_math_all('/((.*)<>)*/', $dat, $match);
と書いて実行すると全体が丸々$matchへ格納されます。
$datへは「 要素1<>要素2<>要素3<>要素4<>要素5 」という形式のデータが入っており要素5は1行目にのみ存在します。
また、各要素は空欄の場合もあります。
初歩的な質問で申し訳ありませんが、よろしくお願いします。
0262259
2008/01/21(月) 16:15:53ID:???レスありがとうございます。
確かにphpには要素を分解する為の便利な関数が始めから用意されておりますが、今回はあえてpreg_matchを用いて自身で分解してみたく思います。
自分にはハードルが高い気もするので、手始めに要素5だけを取り出そうと挑戦してみたのですが、
/<>(.+)$/ と書くと要素3<>要素4<>要素5がキャプチャされてしまいます。
やはり当方の正規表現に対する解釈が根本的に間違っているのでしょうか。
連投になり大変申し訳ないのですが、こちらの質問へのみご回答お願いいたします。
(>>259は回答を得ましても自分には理解の範疇を超えていると判断しましたので)
0263nobodyさん
2008/01/21(月) 19:42:35ID:???0264259
2008/01/21(月) 20:27:24ID:???0266nobodyさん
2008/01/30(水) 11:50:28ID:???@hitlist = grep(/$search_word/i, @search_list);
これを、
@hitlist = grep(/$search_word/$serch_option, @search_list);
($serch_optionにはiやgを事前に設定)
こんな感じにしたいのですが、なんかいい案はありますか?
if文で分岐させるしかないですか?
0267nobodyさん
2008/01/30(水) 13:19:43ID:???そこでgオプション使うケースなんてないでしょ
0268nobodyさん
2008/01/30(水) 16:28:40ID:???質問が要領を得てないんだろうけど、
大文字小文字区別つけるかつけないかを切り替えたい、って話ではないかと。
どうすれば良いのかは知らないけど。
0269266
2008/01/30(水) 17:01:36ID:???正規表現のオプションをうまいこと制御できないかなと思いまして。
特に大文字小文字にこだわってるわけではないです。
0270nobodyさん
2008/01/31(木) 03:02:38ID:???大小文字の違いを無視して検索したいときに、パターンの先頭に (?i) 埋めときゃいい。
$pat = ($icase ? "(?i)" : "") . $search_word;
@hitlist = grep /$pat/, @search_list;
とか
0271nobodyさん
2008/01/31(木) 15:56:15ID:???0272nobodyさん
2008/02/25(月) 06:25:28ID:PeKKba69「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳)
ISBN 978-4-87311-359-3 定価 5,040円
0273nobodyさん
2008/02/25(月) 12:38:04ID:???0274nobodyさん
2008/03/03(月) 22:23:33ID:3LUWkmBWPHP 5.2.5で、<br>以外のタグ削除を下記のようにしたところ
do {
$res = str_replace( $result_tag[1], '', $res );
} while ( mb_ereg( '(<[a/][^>]+>)', $res, $result_tag ) );
所々で効いてません。
前のサーバー(PHP 4.4.4)では正常に動いていました。
よろしく御指南ください。
0277nobodyさん
2008/03/05(水) 17:20:52ID:???<a href="http://jumpres/read.cgi/dqnplus/22043905235/34">>>34</a>
スレッドまとめサイトの作成においてアンカーのタグだけ外したいのです
よろしくお願いします
0278nobodyさん
2008/03/05(水) 18:23:39ID:???実装言語が Perl と仮定して (Perl でなければ >>1 を読んでちょ) 、こんなかんじ?
s/<a href=".+?">(.+?)<\/a>/$1/g;
0279nobodyさん
2008/03/05(水) 18:52:35ID:???0280nobodyさん
2008/03/16(日) 09:40:37ID:???0281nobodyさん
2008/03/16(日) 12:34:04ID:???0282nobodyさん
2008/03/16(日) 20:44:54ID:???0283nobodyさん
2008/03/17(月) 06:09:10ID:???0284nobodyさん
2008/03/17(月) 08:59:29ID:???pcre-devのメーリングリストでもよんどいて損はない
ttp://www.exim.org/lurker/list/pcre-dev.ja.html
0285nobodyさん
2008/03/19(水) 14:02:11ID:6LA3ff9bたとえば文字列が
{if(a)}
あああ
{if(b)}
いいい
{/if}
{/if}
と入れ子があったときはどのようにマッチさせたらいいでしょうか?
PHPでお願いします。
0286nobodyさん
2008/03/19(水) 15:32:59ID:???0287ジョアン
2008/03/28(金) 16:46:01ID:FsCFbn2KPerlではマッチした前後を $` $' で取得できますがPHPではどうして取得するのでしょうか?
0288nobodyさん
2008/03/29(土) 12:12:17ID:???0289nobodyさん
2008/04/12(土) 11:24:34ID:???0291nobodyさん
2008/04/26(土) 13:57:41ID:???0292nobodyさん
2008/05/04(日) 23:26:54ID:???ほしいけど高いね
0293nobodyさん
2008/05/19(月) 20:19:05ID:???0294nobodyさん
2008/05/23(金) 20:19:21ID:???0295nobodyさん
2008/05/23(金) 20:19:44ID:???0296nobodyさん
2008/06/05(木) 16:44:59ID:0yepAPEDそこで、合っているか教えてくださいー。
IP 61.78.0.0〜61.85.225.225 をブロックしたいのです。
このための表現として、私のつたない知識を使って書いてみると
^61\.[78-85]\.[0-9]+\.[0-9]+
なのかなと思ってますが、あってますか?
どうぞよろしくお願いします。
0297nobodyさん
2008/06/05(木) 17:25:51ID:???こうじゃないかな
0298nobodyさん
2008/06/05(木) 18:12:26ID:0yepAPEDありがとうございます。
^61\.[78-85]\. のところが、^61\.(?:7[89]|8[0-5])\.
って言う意味ですよね?
なるほど。78-85じゃダメなんですね。ありがとうございます!
0299nobodyさん
2008/06/06(金) 03:25:44ID:???^61\.(78|79|80|81|82|83|84|85)\..*
0300nobodyさん
2008/06/08(日) 17:41:28ID:???ここで、この$sから特定のタグだけを削除したいのですが、うまくいきません。
例えば<meta 〜〜〜 />というタグが複数あったとして、これをすべて取り除いたソースを作りたいのです。
$s = eregi_replace("<meta.*?>", "", $s);
とやってみたのですが、$sが空になってしまうのです。
ご指南ください。
0301nobodyさん
2008/06/08(日) 22:40:27ID:???その質問の答えはこのスレの中にあるよという、ヒントを出しているわけで
まぁ、ツンデレなわけです。
0304nobodyさん
2008/06/09(月) 23:50:23ID:???ありがとうございます!
そうなんです、最短マッチが動かないなぁと思っていて、まさかeregが
最短マッチできないとは思いませんでした。
pregでやって解決しました!!
0305nobodyさん
2008/06/11(水) 15:58:44ID:???<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です。
0306nobodyさん
2008/06/11(水) 21:01:33ID:???色々間違えてる。
まず、Aタグで囲んでる部分だけ抜き出すなら( )のペアは一個でいいはず。
次に?を使ってみたと言うが多分何か勘違いしてる。
300はわかってて最短マッチさせてるが305わかってないだろう?
*を?に置き換えたりしてないか?
0307nobodyさん
2008/06/12(木) 00:47:05ID:Hj50XmAmhogehoge[1]→1
hogehoge[123]→123
hogehoge[1243][]→1243
[]の中身を取得したく、[]が2つあった場合は最初の[]の中身を取得します。
(ただし、2個目の[]は常に空です。)
hogehogeは任意の文字列で、[]の中身は何桁か分からない数字の繰り返しです。
以上ご鞭撻の程お願いします。
0309nobodyさん
2008/06/12(木) 14:43:44ID:???0310nobodyさん
2008/06/12(木) 14:53:37ID:???0311nobodyさん
2008/06/28(土) 08:39:36ID:9QUTsyON使用言語は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)-->で囲まれている部分は改行や半角英数字などが含まれる場合があります。
どなたかご教示いただけますでしょうか。よろしくお願いいたします。
0312nobodyさん
2008/06/28(土) 10:12:28ID:???0314nobodyさん
2008/07/02(水) 18:58:36ID:???こういう感じの文章の
,"2000"
のみ抽出したいんですが、どう書けばいいんでしょうか?
",".*[0-9]"$
だと"10","10","2000"まで拾っちゃうんです・・・。
0315nobodyさん
2008/07/02(水) 21:54:01ID:???0316314
2008/07/03(木) 15:40:28ID:???ありがとうございます。
確かに、それで例は拾えましたが、10と2000の部分は変動するんです。
桁も4桁だったり5桁だったりと様々なので、どうしたもんかなと・・・。
0317nobodyさん
2008/07/03(木) 15:46:05ID:???0318314
2008/07/03(木) 15:53:01ID:???ありがとうございます。
それだと ,"10","10","2000" まで拾ってしまいます・・・。
書き忘れていましたが、秀丸を使って一括選択しています。
0319nobodyさん
2008/07/03(木) 16:04:08ID:???どう変動するんだよ
とり出したい場所の条件を日本語で書いてみ
>315を5桁にも対応させるだけなら
,\"[0-9]{4,5}\"
0321314
2008/07/03(木) 16:14:35ID:???ありがとうございます!!!出来ました!!!
ありがとうございましたー。
>>319
ありがとうございます。
>>320で解決しましたが、極端な話1〜99999999の間で変動します。
0323nobodyさん
2008/07/03(木) 18:01:39ID:???0324nobodyさん
2008/07/03(木) 19:43:29ID:???0325nobodyさん
2008/07/03(木) 20:01:56ID:???0326PHP
2008/07/04(金) 18:37:34ID:DM0Om0jzPHPの正規表現を勉強しているのですが、どうもうまくいきません。今回は一番簡単な正規表現をつくったのですが、どうやったらよいのでしょうか。
$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がどっちがどっちなのかは、どのようにしたらわかるのでしょうか?
長々した質問すいません。わかるかた教えてください。
0327nobodyさん
2008/07/04(金) 23:02:41ID:???取り敢えず、ここを *よく読んで理解* しろ。
0328nobodyさん
2008/07/15(火) 00:11:32ID:PMHjKbcPPHP5を使っています。
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]のような書き方で対応できるのですが
文字列に関してはどのようにすればよいのでしょうか?
アドバイス頂ければ幸いです。
宜しくお願い致します。
0330328
2008/07/15(火) 03:07:47ID:PMHjKbcPレス有り難う御座います。
一段階目は
preg_match_all( "/(<input 「typeを含まない文字列にマッチするような正規表現」[^<]>)/is", $data, $matchs )
となると思うのですが、この部分はどのようにして書けばよいのでしょうか?
はじめ、二段階抽出も考えたのですが、結局
「typeを含まない文字列にマッチするような正規表現」がどうしてもわからずでした。
0331328
2008/07/15(火) 08:05:16ID:???お騒がせしました。
取りあえず、該当範囲をpreg_match_allで取得後、preg_matchでtypeがあるか判定して二段回抽出しました。
0332nobodyさん
2008/07/17(木) 17:35:14ID:LcfXPY+ppregです。
例えば、
hogehoge<<hogehogeh<br>oge<br><br>hogehoge<br><br>hoge<<hoge の
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ の部分です。
0333nobodyさん
2008/07/17(木) 17:53:17ID:???0334332
2008/07/19(土) 19:22:36ID:???333おめです
なぜか、
hoge<<hogehog
eh<br>oge<br><br>hoge
だとマッチしないのですが。
0335nobodyさん
2008/07/19(土) 19:32:09ID:???0336nobodyさん
2008/07/20(日) 09:34:06ID:???0337nobodyさん
2008/07/20(日) 11:43:35ID:???「絵」に置き換えすることはできないのでしょうか?
preg_replace("/[ - ]/","絵",$hoge);
0338nobodyさん
2008/07/20(日) 12:01:15ID:LU799vx+キャリアは?
0342nobodyさん
2008/07/20(日) 13:09:57ID:???ここで聞くより100倍速い。
0343nobodyさん
2008/07/24(木) 00:50:31ID:/c2OsNI4<table>
0344nobodyさん
2008/07/24(木) 00:58:57ID:/c2OsNI4誤爆した。。申し訳ない。。
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);
としたのですが、うまく抽出できません。
アドバイスをいただければありがたいです
0345nobodyさん
2008/07/24(木) 01:43:31ID:???正規表現が / で始まってるから / で終わることになるわけだけど、途中に</th>ってのがあるわけよ
m#<t[dh][^>]*>(.*?)</t[dh]><t[dh][^>]*>(\w+)#i
こんな感じになるかな
0346nobodyさん
2008/07/24(木) 23:33:27ID:???preg_replace("/^<tr><th>(.*?)<\/th><td>([a-zA-Z])<\/td>/i","$1$2",$str);
0347nobodyさん
2008/07/25(金) 08:54:32ID:???0348nobodyさん
2008/07/27(日) 01:11:32ID:sEx2Pn85サクラエディタに鬼車5.9.1を搭載して正規表現の勉強をしているのですが、手元にある詳説正規表現には
(<)?\w+(?(1)>)
このような例があり、<があれば>のマッチを試みる?ということができるみたいです。
ただ、鬼車はこの表現をサポートしていないみたいです。
http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
同様のことを鬼車でも実現する方法ってあるのでしょうか?
0349nobodyさん
2008/07/29(火) 05:43:25ID:???C#です。
0350nobodyさん
2008/07/29(火) 19:46:22ID:???/^=/m
だけどC#での正規表現の使い方は知らんので応えられん。
0351nobodyさん
2008/08/06(水) 01:01:06ID:hVakYDWkスレ冒頭に()と(?:)の違いについて質問されてましたが
?:の意味ってなんですか?
わかりやすい解説ページなどもあれば教えてください。
0352nobodyさん
2008/08/06(水) 02:34:12ID:???0354nobodyさん
2008/08/21(木) 14:34:46ID:wSsr/o3sPHP5を使用しています。
文字列内にマルチバイト文字が一つでも含まれていれば真と言う正規表現を行いたいのですが
どのようにすればよいでしょうか?
ドキュメント等から調べてみて、
mb_ereg("[0-9a−zA−Zあ−んア−ン]", $str )
のようにしてみたのですが、これでは漢字にヒットしません。
アドバイス頂ければ幸いです。
宜しくお願い致します。
0355nobodyさん
2008/08/21(木) 14:44:38ID:???[\x80-\xff]
0357nobodyさん
2008/08/22(金) 02:32:16ID:???1バイト文字を列挙したのを否定すれば?
あと、文字コードによっては半角カナがマルチバイトだったり
そうじゃなかったりするんだけど、どうするのかな?
0358nobodyさん
2008/08/25(月) 10:35:16ID:P/JycA8t$line =~ s/<\/?[^>]+>//g; ----(1)
だと思うけど、どこかで見た方法では、
$line =~ s/<[^>]*(>|$)//g; ----(2)
となってた。これ動作は同じなのかな?(2)の意味がイマイチ分からない。
0359nobodyさん
2008/08/25(月) 20:52:33ID:???(2)の (>|$)は、$lineという変数名から推測するに行単位で読み込んで逐次処理した
場合に、タグの途中で改行されていて>が見つからなくても行末まで削除する為?
でもそうしたら次の行で処理がうまく行われないしよくわからん
行単位だとタグ途中で改行される場合もあるから全部読み込んで一気に処理がいい
s/<.*?>//g;
s/<[^>]*>//g;
などなど・・
0360359
2008/08/25(月) 21:09:55ID:???s/<[\s\S]*?>//;みたいになるね
0361nobodyさん
2008/08/25(月) 21:28:12ID:???0362nobodyさん
2008/08/25(月) 22:34:46ID:???(2)はSGMLのショートタグの対応とか?
ttp://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/appendix/notes.html#h-B.3.7
開始タグで前のタグを閉じる以外は、メジャーなブラウザは対応してなかったはずなので、
あまりこだわらなくてもいいと思うけど。
0363358
2008/08/25(月) 23:08:43ID:???改行文字の件とか、勉強になりました。
プログラム上では、どちらも同じ動作なので、気になってたもので。
0364nobodyさん
2008/08/27(水) 15:31:16ID:j0h2/LpGpreg_match_all( "/((aaa|bbb|ccc).*?)(aaa|bbb|ccc|$)/is", $str, $maches )
このような形にて以下のような内容の繰り返し文を部分的に抜き出そうとしているのですが一部上手くいきません
---------------------
aaa
あいうえお
bbb
かきくけこ
ccc
さしすせそ
---------------------
上記正規表現では
aaa
あいうえお
bb
かきくけこ
cc
さしすせそ
と言うように一つ目以降のパターンマッチ文字列の先頭がbbやccとして一文字かけてしまいます。
本来はbbb、cccとちゃんとヒットさせたいのですが、これが行えません。
マッチ後の文字列ポインタを「三歩歩いて二歩下がる」のようにずらす事をするか、何か他のパターンマッチ構文を
書けばいけそうだと思うのですが、どうにもよい方法が思いつきません。
お力添え頂ければ幸いです。
0365nobodyさん
2008/08/28(木) 12:04:03ID:???0366nobodyさん
2008/08/28(木) 18:14:41ID:Gzy07epaさしすせ そたちつてと
なに ぬねの はひふへほ
この
「あいうえお」「さしすせ」「なに」
を太字に置き換えるにはどうすればいいですか?
(PHP)
$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);
じゃうまくいきません。。。
0367366
2008/08/28(木) 18:25:55ID:???自己解決しました。
0368nobodyさん
2008/08/28(木) 18:44:08ID:???0369nobodyさん
2008/08/28(木) 18:50:35ID:???$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);
$hoge = str_replace("<br>","<br>\n",$hoge);
って書いてましたwww
0370364
2008/08/29(金) 11:10:56ID:rNMP0NTCレスありがとうございます。
もう一度考え直してみて書き直すとこのようなコードになりました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
と表示させたいのです。
どうか宜しくお願い致します。
0371nobodyさん
2008/08/29(金) 11:57:14ID:???詳しい仕様を書いてないからわからんけど
先頭が一つ以上の?英大文字がつづくだけマッチして
次にa小文字が3つ以上?つづくだけマッチ
を繰り返すってこと? isオプションがあるのはどういうことかわからんが
/([A-Z]+aaa+)/
0372364
2008/08/29(金) 12:11:28ID:???・・・!申し訳ありません。
色々考えて試している内に頭が混乱して有らぬ方向になってしまっていたみたいです。
ちゃんともう一度考えて仕様も伝えられるようにしてから書き込ませて頂きます。
お手間をおかけいたしましてすみません><
0373nobodyさん
2008/08/29(金) 12:39:10ID:???0374nobodyさん
2008/09/01(月) 15:52:31ID:ME+mffWYPHPスレから誘導されて来ました。よろしくお願いします。
$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] => パイナップル
)
となります。
0375nobodyさん
2008/09/01(月) 15:53:28ID: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] => パイナップル
)
0376nobodyさん
2008/09/02(火) 00:14:52ID:???0377nobodyさん
2008/09/02(火) 09:20:23ID:gwaiq/Ccうまく動きました
ありがとうございました
0378nobodyさん
2008/09/02(火) 17:55:54ID:IiWNBMxF0379nobodyさん
2008/09/02(火) 18:31:39ID:???という正規表現はどう書けばいいでしょうか
0380nobodyさん
2008/09/02(火) 18:35:50ID:???0381nobodyさん
2008/09/02(火) 18:37:44ID:???0383nobodyさん
2008/09/03(水) 09:02:07ID:???だとhとかttにマッチしない罠。
^($|[^ht]|h($|[^t]|t($|[^t]|t($|[^p])))|t($|[^t]|t($|[^p]))))
普通は380のようにするけどな。
0384nobodyさん
2008/09/04(木) 10:49:47ID:???0385nobodyさん
2008/09/04(木) 10:50:59ID:???0386nobodyさん
2008/09/04(木) 19:48:29ID:ZxHTo/Laこんな問題集を見つけたんだが
正規表現道場に近いな
0387nobodyさん
2008/09/04(木) 21:53:09ID:AVvRqwBM0388nobodyさん
2008/09/17(水) 17:44:57ID:TGrFERMSOSはubuntu8.04で正規表現を勉強し始めの者です。
電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ
抽出するという条件なんですが、
郵便番号はxxx-xxxx(xは0-9の数字)、電話番号はxx-xxxx-xxxx(xは0-9の数字)
で、grep -E [0-9]\{3\}-[0-9]\{4\} とやっても電話番号も全て抽出されてしまいます。
どこが間違っているのでしょうか。
0389nobodyさん
2008/09/17(水) 17:54:16ID:???具体的には、
xx-xXXX-XXXX
の大文字Xであらわしたところ
まあ宿題なんだろうからもうすこし良く考えましょう。
0391nobodyさん
2008/09/22(月) 18:03:26ID:???下記のような配列の中から、
(2)〜(4)までのみを抽出したいと思っています。
(1) testa@hoge
(2) _testb@hage
(3) _testc@noge
(4) _testd@nage
(5) _teste@n_ge
ルールとしては、
・頭に[_]が付いている事、
・@の後ろに[n_]が付いていない事
です。上記前提で下記のように書いたのですが、
これですと(2)しか抽出されませんでした。
$test =~ /^_.*@[^(n_)]/
@の後ろの正規表現が悪いのだと思うんですが、
この場合どのように書けばいいんでしょうか。
ご教示お願いしますm(_ _)m
0393nobodyさん
2008/09/22(月) 18:13:12ID:???先頭_と@の間はどんな文字でもいいのか、@以降はどんな文字でもいいのかとか
詳しいルールはわからないが、素直に分けたほうがいいと思う
0394nobodyさん
2008/09/22(月) 18:18:30ID:???ありがとうございます!
とりあえず、>>392さんの方法で抽出できました。
$test =~ /^_.*@(?!n_)./
ありがとうございました。
0395nobodyさん
2008/09/25(木) 14:22:28ID:bEreCYy4html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたいと思い
以下の置き換えを行い成功したのですが、
$html = preg_replace('{<img (.*?)>}' ,'<img $1 />' ,$html);
元々imgタグ内にスペースとスラッシュが最後に入っているのもありますので、それ以外ということで
$html = preg_replace('{<img (.*?)^\/>}' ,'<img $1 />' ,$html);
このように記述してみましたが、これですと全部のimgタグに置き換えが効かなくなりました
どういう記述をすればよいのでしょうか?
0396nobodyさん
2008/09/25(木) 14:30:11ID:???0397nobodyさん
2008/09/25(木) 14:38:21ID:bEreCYy4動きました
素早い回答ありがとうございました
0398nobodyさん
2008/10/07(火) 01:09:40ID:???<a href="test/index.html">あああ</a>
<a href="http://hogehoge1.com" target="_blank">いいい</a>
のような文字列から
test/index.html
http://hogehoge1.com
だけを取り出すにはどうすればよいのでしょうか?
使用言語はPHP5です。
preg_match("/<a href=\"(.*)\"\>.*/",$str,$m);
ではtarget="_blank"が残ってしまい期待通りの結果が得られません。
最短一致というのが原因かとおもい
preg_match("/<a href=\"(.*)\"{1}?\>.*/",$str,$m);
としましたが駄目でした。
アドバイスよろしくお願いいたします。
0399nobodyさん
2008/10/07(火) 01:57:33ID:???0401nobodyさん
2008/10/09(木) 19:29:23ID:???$numには、
+数字
-数字
数字
というようなパターンの時のみマッチさせたいです
数字のところは 0〜999999999までの値が入ってきますが、0以外の時に頭に0がある場合0123とかは除外したいです
試行錯誤して下記のようにしてみましたが、思った結果が得られません。エラー出まくりでなみだ目です
どうかよろしくお願いします
preg_match('/^(([^+]*)*(++[^-][^+]*)*)*?[^0-9]*$/',$num)
0402nobodyさん
2008/10/09(木) 19:32:07ID:???0403402
2008/10/09(木) 19:33:52ID:???^[\+\-]?(?:0|[1-9]\d*)$
0404nobodyさん
2008/10/10(金) 00:47:33ID:???ありがとうございます
動作を確認したところ
0のみの場合と数字の部分が9桁以上でもマッチしてしまうので、
^([^0]|[\+\-]?)(?:0|[1-9]\d{1, 9}?)$
試行錯誤してこのようにしてみましたが、全くもってマッチしなくなってしまいました
どのように書けばよろしいのでしょうか?
0405nobodyさん
2008/10/10(金) 00:58:41ID:???0407たまちゃん ◆ExGQrDul2E
2008/11/02(日) 16:02:00ID:wDYsJgfVpreg_match_allを使いましたが、動きません。
どのようにしたらよいか教えてください。
<?php
$url = <<< URL
a
http://x.x
http://
http://google.jp/
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
0408nobodyさん
2008/11/02(日) 16:11:53ID:???0409nobodyさん
2008/11/02(日) 17:38:13ID:???で、途中にORの意味で|使ってるから別のデリミタにしちゃいなよ
0410たまちゃん ◆ExGQrDul2E
2008/11/02(日) 21:36:24ID:0rYlog69回答ありがとうございます
\(・∀・)/
途中で
https?|ftp
で使っているのですが、
最初を
||
//
以外に、何を使えばよいのでしょうか?
それとも
\(エスケープ)させればよいのでしょうか?
0411nobodyさん
2008/11/03(月) 20:39:21ID:XFsZ1V0eURLの最短マッチさせる正規表現
(https?)
について、
この場合なら、
http
https
両方にマッチします。
(https)
これなら、
https
にしかマッチしません。
ここで、?の意味を調べたら、『(の意味を拡張。0回または1回の繰り返し最短マッチ』と書いてありました。なぜ
(https?)
これをすることによって、httpとhttpsをマッチさせられるのでしょうか?最短マッチなら、httでもいいのじゃないですか?
0412nobodyさん
2008/11/03(月) 21:26:40ID:???0413nobodyさん
2008/11/04(火) 00:18:26ID:???最短マッチではなく最長マッチじゃないの。
http までマッチしていることを前提にして、さらに s に対して 0 回または 1 回の
「より長い方」に優先してマッチする。
0414nobodyさん
2008/11/08(土) 03:56:35ID:???解説文でよく使われるからそれとごっちゃになっちゃったんじゃないかな
0415nobodyさん
2008/11/08(土) 14:37:01ID:Ln3BC38nhttp://codezine.jp/article/detail/3039
http://codezine.jp/article/detail/2676
0417nobodyさん
2008/11/15(土) 02:31:51ID:???近所の図書館に詳説正規表現が入荷したお
まともなオライリ本は詳説イーサネットしかないとこだから嬉しい
以前は電子メールプロトコルがあったけど、
除籍されてリサイクルコーナーから旅に出てしまったよ
0418nobodyさん
2008/11/24(月) 00:38:36ID:???A→か
7→イ
という2ステップ手作業でやっていることを1ステップで済ませたいのです。
0419nobodyさん
2008/12/08(月) 02:09:36ID:???$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];です。
0421nobodyさん
2008/12/19(金) 23:54:16ID:???$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 だけを抜き出すにはどう書けばよいでしょうか。
ご教示のほどよろしくお願いします。
0422nobodyさん
2008/12/19(金) 23:58:55ID:???0424nobodyさん
2008/12/20(土) 14:46:40ID:???0425nobodyさん
2008/12/22(月) 00:30:52ID:EdTiga+3【あいう】を【6あいう】
【かき】を【4かき】
のように【 】でははさまれた文字列の頭に文字数×2の数値を追加したいのですが
どのように検索してどのように置換すればよいでしょうか?
【 】ではさまれた文字数はまちまちです。
よろしくお願いします。
0427425
2008/12/22(月) 15:22:20ID:???0428nobodyさん
2008/12/22(月) 15:42:49ID:???0430nobodyさん
2008/12/23(火) 02:31:08ID:???0431nobodyさん
2008/12/28(日) 04:14:06ID:???使用言語は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回最大マッチするだけのようです
どうすれば予想通りの結果になるでしょうか?
0432nobodyさん
2008/12/28(日) 08:21:40ID:???$c= substr($str, 0, 1);
while ($str=~ /$c/go){
push(@data, substr($str, 0, pos($str)));
}
for (@data){print $_,"\n";}
正規表現使わないとダメなの?
0433431
2008/12/28(日) 13:37:57ID:???ありがとうございます
それでいけそうです
実は正規表現を必ず使わなきゃいけないというわけではなく、
もっと簡潔にかけるならなんでも大丈夫です
0434nobodyさん
2009/01/01(木) 19:19:28ID:???文字列の中で、漢字をのぞいた全角文字(全角数字、全角アルファベット、全角カタカナ)と
一部記号(丸括弧や全角スペースなど)以外が入っていたらマッチさせる、という処理をやろうとしています
文字クラスに許可する文字コードを細かく書いて、その否定で取れるかと思ったんですが
$txt =~ /[^xA3\xB0-\xB9]/
のような書き方まで来て、詰まってしまいました
$txt =~ /[^a-zA-Z0-1!#$ @]/
みたいな感じで、複数の文字コードを書くにはどうしたらいいんでしょうか?
ご教示お願いいたします
0435nobodyさん
2009/01/02(金) 02:24:41ID:???どうしたらいいってがんばって列挙するよりないと思うよ。
2byteのならびのあるパターンを除外したいという話だろうから、^ を使った形では
そう簡単にはかけないと思うけど。
0437nobodyさん
2009/01/15(木) 22:57:08ID:???<pre>タグで囲まれた文字列の中の<br />を削除したいのですが、どのようになりますでしょうか。
例)
置換前
<pre>
aaa<br />
bbbb<br />
</pre>
置換後
<pre>
aaa
bbbb
</pre>
宜しくお願いします。
0438nobodyさん
2009/01/15(木) 23:33:28ID:???置換前
<pre>
aaa<br />
bbbb<br />
</pre>
置換後
<pre>
aaa
bbbb
</pre>
EOT;
echo preg_replace("#(<pre>.*?</pre>)#es", "str_replace('<br />', '', '$1')", $s);
0439438
2009/01/15(木) 23:45:12ID:???括弧は要らないか
0440437
2009/01/16(金) 00:04:22ID:???0441nobodyさん
2009/01/19(月) 01:18:40ID:???・[?-?]表記による数値・アルファベットの連番
・[]内1コめの?の桁数に応じて0埋め
・[]内の展開箇所は複数可
といったところです。
言語は出来ればperl、次点でjsやvbsですが特に問いません。
以下のよう変換されるかんじです。よろしくお願いします。
>http://abc[1-2].jpg
http://abc1.jpg
http://abc2.jpg
>http://abc[09-10].jpg
http://abc09.jpg
http://abc10.jpg
>http://abc[1-2]de[099-101].jpg
http://abc1de099.jpg
http://abc1de100.jpg
http://abc1de101.jpg
http://abc2de99.jpg
http://abc2de100.jpg
http://abc2de101.jpg
>http://[a-b][01-02][4-5].jpg
http://a014.jpg
http://a015.jpg
http://a024.jpg
http://a025.jpg
http://b014.jpg
http://b015.jpg
http://b024.jpg
http://b025.jpg
0442nobodyさん
2009/01/19(月) 03:14:04ID:???回答とは全然関係ないですけど、
hからttp://とつなげて書くと、
検索エンジン等のクローラがそれら>>441のリンクを全てなめるので、
ネットワークリソース的にあまりよろしくないです…
今後そのように例示される際には
hを抜いたり大文字にしたり等、
リンクにならないよう工夫をご検討いただけると、
一インターネット利用者としては嬉しい限りです
0443nobodyさん
2009/01/19(月) 03:23:29ID:???0444nobodyさん
2009/01/19(月) 03:24:54ID:???0445nobodyさん
2009/01/19(月) 04:50:02ID:cs1ls7yvalign=left>1234567891011121345
上記を
align=left>1011121345
こう置換したいのですが
left>.*?1011121345
こうしてみたのですが、出来ませんでした。
どう置換すれば、良いのでしょうか、よろしくお願いします。
0447nobodyさん
2009/01/19(月) 09:02:38ID:???0448441
2009/01/19(月) 14:17:19ID:???>>442
いまだにh抜きを強要する人っているんだね。
見ず知らずの他人一人一人を啓蒙していくよりも
管理者へ[http://」をNGワードに追加してくれるよう説得した方がいいんじゃないの?
有益であれば受け入れてくれるはず。
0449nobodyさん
2009/01/19(月) 14:46:18ID:???まあがんばってよ。
0451nobodyさん
2009/01/20(火) 03:53:44ID:TjAtrikIhttp〜リンクを見るたび指摘(要望)してしまう442
その指摘(要望)が強要に見えてしまう441
どちらも2chに向かないタイプではあるが
頻度の度合いからして苦労するのは441の方が上だな
公衆便所のトイレットペーパーが三角に折れてなかったらイラっとしちゃうタイプでそ
0452nobodyさん
2009/01/20(火) 04:11:05ID:???スレ違いだから他でやってくれ
0453nobodyさん
2009/01/22(木) 00:53:40ID:2qACQkO/0454nobodyさん
2009/01/22(木) 01:00:03ID:???0457nobodyさん
2009/01/22(木) 17:35:54ID:???-----
上記のような文字列で「*」には日本語と英語が混ざっています。
そこで、、<br>から-までの間から、英語文字だけを削除するような正規表現って無いでしょうか?
<br>から-の部分は改行が入ってます。
ご存知の方居られましたら、よろしくお願いします。
0459nobodyさん
2009/01/22(木) 17:56:19ID:???すみません。言葉足らずでした。
普段Speeeeedをいうソフトを使っているのですが、これで>>457は可能でしょうか?
0461OraOra
2009/02/01(日) 01:57:15ID: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'も含めてチェックする方法を
ご存知の方いましたらどなたか御教授お願いします。
0462nobodyさん
2009/02/02(月) 21:43:16ID:H9hEncfV「id=""」の数字を抜きたいのですが(この例であれば「72157612930889935」が欲しいです)
$patern = 'id="(.*)" ?';
ereg($patern,$line,$id);
echo $id[1]."<br />\n";
では最後のvideosの終わりのダブルコーテーションまで入ってしまいました。
>>421に近いと思うのですが?で最短マッチ?になるような気もしますし
>>412にあるように?は0か1回の繰り返しのようにも思うし…。
OSはCent4系、PHP4.1.3、関数はeregを使いました。どなたか助けて下さい
0463nobodyさん
2009/02/02(月) 21:51:38ID:???0464462
2009/02/02(月) 21:55:09ID:H9hEncfV神!ありがとうございました。
?は結局使わず終いでしたが?とか難しいのを使うよかよっぽどスマートす。
0465nobodyさん
2009/02/05(木) 13:33:36ID:???0466nobodyさん
2009/02/06(金) 11:54:32ID:???{0,1}か{0,1,2,3...}かの違いだけだ。
0467nobodyさん
2009/02/06(金) 16:00:49ID:???0468nobodyさん
2009/02/10(火) 00:16:26ID:???FtSPPP または FfSPPPP は
F(tS|fSP)P{3} より短くなりますか?
PPP と PPPP ではなく X と Y (Fの直後に来るものによってSの後に来るべきものがまったく違う場合) には応用可能でしょうか?
0469nobodyさん
2009/02/10(火) 00:53:38ID:???0470nobodyさん
2009/02/23(月) 09:51:32ID:0L52Pp6Hこれの意味を教えて下さい。
0471nobodyさん
2009/02/23(月) 10:49:52ID:???「*」は0匹以上の生息してるやつ最後まで
つまり、「.*」でカニがいるだけ全部を捕り尽くすという意味(昨今の乱獲問題)
そこで捕り尽くしたら絶滅するという問題を受けて「.*?」という思想が考え出された
意味は、最初にカニがいたらその一匹を捕まえて漁を止めるということ
0472nobodyさん
2009/02/23(月) 15:41:23ID:0L52Pp6Hでは、 .*? と .? の違いを教えて下さい。
0473nobodyさん
2009/02/23(月) 17:58:21ID:???「.」はカニだな
「?」は捕れるかとれないか分らないがとりあえず努力するという意味
つまり、「.?」で幻のカニ探索するという意味
0474nobodyさん
2009/03/02(月) 19:46:41ID:/g2x4kDhたとえば普通に
http://google.co.jpと書いてあるものと
<a href="http://google.co.jp">test</a>と書いてある文字列があります。
この文字列内のタグになってないUrlをAタグでリンクを張りたいんですがどうしたらいいでしょうか。
0475nobodyさん
2009/03/02(月) 21:22:30ID:???0477nobodyさん
2009/03/11(水) 00:46:27ID:???これを正規表現にすると、どうなりますか?
0478nobodyさん
2009/03/11(水) 01:27:39ID:???0479nobodyさん
2009/03/11(水) 11:15:58ID:???"{^https?://[0-9a-zA-Z]*\.2ch\.net/[0-9a-zA-Z]*/test/bbs\.cgi[0-9a-zA-Z/_-]*$}"
0480nobodyさん
2009/03/20(金) 02:34:11ID:???例 class.test.php から public function test($a){ 本文 }
スケルトンコードの場合簡単に抜き出せるのですが、
本文中にif,swichなどで } が存在した場合どうすれば良いのか悩んでいます。
0481nobodyさん
2009/03/20(金) 04:11:43ID:???0482nobodyさん
2009/03/20(金) 22:15:43ID:???BoostライブラリBoost.Xpressiveか、Boost.Regexか、Boost.Spirit
です。(標準C++,コンパイラg++。)
括弧の対応のバランスがとれているならマッチさせるという正規表現はどう書けますか?
boost::xpressive::sregex parens;
parens = *( '(' >> by_ref(parens) >> ')' );
だと
()→マッチ
()()→マッチ
()(()((()))())→マッチ
(()))))→マッチしない
です。
私としては(1+3)*(4+(8-9))の様に括弧以外の文字が含まれていても括弧のバランスがとれているか判定できるようにしたいのですが。
ただし括弧としては ( か ) だけを想定し、{}[]などは判定の対象にはせず、数式として成り立っているかどうかなども判定せず、あくまで ( と ) のバランスだけを見たいです。
0483nobodyさん
2009/03/20(金) 22:25:59ID:???できました、ありがとうございました。
こんな感じで、簡単でしたね、、、
/function test.*?\{.*? (\{.*?\}.*?)*? \}/s
0484nobodyさん
2009/03/20(金) 23:13:32ID:???これでほぼ完璧かなぁ、、、
/public\sfunction\stest_if_text.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
0485nobodyさん
2009/03/20(金) 23:18:29ID:???ムダがおおい
0486nobodyさん
2009/03/20(金) 23:28:45ID:???/[public|private|protected]+\s+[static]?\s?function\s+関数名.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
こんな感じかなw
読みやすさ優先で記述してるからセンスは勘弁してくださいw
0488nobodyさん
2009/03/24(火) 09:59:04ID:???正規表現じゃ数学的に不可能。有限状態オートマトンなので閉じられてない
開きカッコの数を高々状態数までしか憶えられないからそれを越えた時点で
アウト。
Perlの正規表現みたいに再帰的なパターンが書けるように拡張されてると
別だけどね。
0489487
2009/03/24(火) 10:07:28ID:???BoostのXpressiveならby_ref()があるから再帰的に書けないこともないハズ。
でもよーわからん。
Spiritが使えるならそっちのが楽そうじゃね?
0490nobodyさん
2009/03/24(火) 10:20:21ID:???0491nobodyさん
2009/03/24(火) 10:38:59ID:???0493nobodyさん
2009/03/24(火) 12:16:31ID:???いくらなんでもゆとりすぎるだろ
0494nobodyさん
2009/03/25(水) 10:08:36ID:???x{9}x+
と
x{10}x*
は共に等価でOKだとおもうが、
一般論で言うとどちらが速い動作になる?
0495nobodyさん
2009/03/25(水) 10:43:53ID:???それよりももう少し改良できると思うんだがな
0496nobodyさん
2009/03/25(水) 12:38:18ID:???どっちを食わせても全く同じオートマトンに変換してから実行するの
でぴったり同じになる実装、なんてのもあるかもしれないし、
逆になぜか+が不得意な実装とか*が不得意な実装とかあるかも
しれない。モノによっては{..}が不得意でxを並べたほうがいいと
いうことも考えられるな。
0498中山
2009/03/29(日) 09:39:01ID:MqxV8vA3$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));
これではダメみたいです
0499nobodyさん
2009/03/29(日) 09:49:02ID:???0500nobodyさん
2009/03/29(日) 09:54:22ID:???この内容がどういうパターンで変動し得るかがわからん
書かれている正規表現見てみると ? / ; の順に区切り文字があることは固定で決まってる?
0501中山
2009/03/29(日) 19:51:10ID:MqxV8vA3ただし、
test1
などの文字列は半角英数字限定です。
0503nobodyさん
2009/04/14(火) 19:16:36ID:???どうかけばいいのでしょうか
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()"
0504nobodyさん
2009/04/14(火) 19:24:30ID:???0505nobodyさん
2009/04/14(火) 19:31:15ID:???すまんこ
一応自力解決しました。さくらエディタの正規表現オンで動作確認
onMouseOver="refPopUp\(\d{1,3},event\)" onMouseOut="hidePop\(\)"
0506nobodyさん
2009/04/14(火) 20:09:33ID:???正規表現を用いた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:;">を削除
これで行けそうかと思ったのですが、●●がある行のうち○○を削除、という正規表現がわかりませんでした・・・
0507nobodyさん
2009/04/16(木) 23:48:40ID:???(.*)<font style="font-size:;color:;">(.*)<\/font>(.*)
$1$2$3
とすればいいんじゃない。
どこの正規表現を使うかによりできないかもしれないけど。
$nはn番目の括弧に該当するから<font style="font-size:;color:;">と</font>が消える。
<font></font>がネスとしているなど複数あったら駄目かもしれないけど。
0509nobodyさん
2009/04/25(土) 21:30:02ID:???( )
ノω|
0510nobodyさん
2009/04/29(水) 05:47:07ID:???0511nobodyさん
2009/05/12(火) 06:32:22ID:???12??34
違いが出るときはどんなときか答えなさい
0512nobodyさん
2009/05/18(月) 16:49:08ID:???のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、
この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません
妙案ないでしょうか
php5 or 4
0513nobodyさん
2009/05/18(月) 22:40:33ID:???$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
0514nobodyさん
2009/05/21(木) 08:03:14ID:bdo2M1uu曲名のリストを一括置換しようとしています。具体的には"〜 by"が
入る丸括弧だけ四角括弧"[ ]"に置き換えたいのです。
例
This is me (talk) (Composed by Johan)
↓
This is me (talk) [Composed by Johan]
どのような書式にすればいいかご教示お願いします。
0515nobodyさん
2009/05/21(木) 08:25:36ID:???書き方も全然違ってくるからね、その質問だけじゃなんとも言えないのね。
初心者用のサイトにいってらっしゃいなのね。
図解でみる正規表現入門
http://funcchan.blog16.fc2.com/
0516nobodyさん
2009/05/21(木) 08:34:21ID:???$s=~ s/\(([^\)]*\bby\b[^\)]*)\)/[$1]/gi;
0517nobodyさん
2009/05/21(木) 09:43:06ID:???ありがとうございます。
STEPというタグエディタで100曲ほど一括置換しようと
目論んでます。
教えていただいたサイトとスクリプトを手がかりに
現在悪戦苦闘中です。ちょっと頑張ってみます。
0518nobodyさん
2009/05/23(土) 22:18:11ID:???special days(arranged by hor version.) (Composed by Ellic)
0519nobodyさん
2009/05/27(水) 00:18:24ID:???ABC
…LMNO………
……LMNO……
………LMNO…
XYZ
というような文章があったとします。
「LMNO」の前後(「…」)には文字(日本語や英数字)があります。
Perl5互換の正規表現が使えるテキストエディタや、BREGEXP.DLLが使える置換えソフトを使用し、
「ABC」から「XYZ」までにある「LMNO」を「OOOO」に置換えすることは可能でしょうか?
特定の範囲内の文字だけを置換えする正規表現がわからず、検索文字列と置換え文字列の指定で困っています。
どのようにすれば良いのか教えて頂けると助かります。よろしくお願いします。
0520nobodyさん
2009/05/27(水) 22:50:49ID:???ってことか?
0521519
2009/05/29(金) 23:05:57ID:???具体的な指定を教えて頂いてありがとうございました。
早速試したのですが置換えできませんでした。
「Speeeeed」という置換えソフトではBREGEXP.DLLも使えるのですが、それでも置換え結果がゼロのままです。
こちらのスレをもう一度読み返してもっと正規表現を勉強したいと思います。
0522nobodyさん
2009/06/07(日) 21:54:50ID:???これを何回もかけるとか?
なんか知らんけどgオプションつけても無駄だったんだよなぁ
0524nobodyさん
2009/06/12(金) 11:14:20ID:???0525nobodyさん
2009/06/13(土) 23:07:31ID:56/XckFTyyyy/mm/entry-basename/index.php
↑はどのように記述すればいいのか、お手数ですがご教授願います<(_ _)>
0526nobodyさん
2009/06/14(日) 09:14:31ID:???yyyy部分が4桁数字の西暦?
mm部分が2桁数字の月(ゼロサプレス)?
m#^\d{4}/\d\d/entry-basename/index\.php$#
0527525
2009/06/14(日) 17:21:47ID:Ycy68Wtw素人で質問が下手くそで申し訳有りません
↓の場合だと
"/diary/archives/yyyy/mm/entry_basename.php"
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"
↑のように置き換えるみたいなのですが、
同様に↓の場合だと
"yyyy/mm/entry-basename/index.php"
どのように置き換えるのかが分からなくて、お手数ですがご教授下さい。
分かりにくくて申し訳ないです。
0528nobodyさん
2009/06/14(日) 21:15:28ID:???> ↑のように置き換えるみたいなのですが、
「置き換える」って、いわゆる正規表現による置換処理の意味じゃなくて
「検索表現に翻訳する」って意味なのか。凄まじく紛らわしい。
さておき…、
で、どの単語が可変部分なのかがさっぱり分かんないんだよね。
"index.php" は固定なの?
それと、上の置き換え例では "entry_basename" になっているけど
お尋ねの件は "entry-basename" だよね。単なる typo かな?
"\w" を使う上では、検索対象文字列の "_" と "-" との違いは本質的だよ。
要するに、質問するにしては不備が多過ぎます。
0529525
2009/06/14(日) 23:33:00ID:Ycy68Wtw「検索表現に翻訳する」という意味です。失礼しました
そして"index.php"は固定で、"entry-basename"が正解です。
http://www.magicvox.net/archive/2005/05261744/
ここのページにあるランキングが利用したいのですが、
「ランキング集計したいファイル名にマッチするよう 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/"のように記述
するにはどうすればいいのでしょうか?
長文失礼しました。
0530nobodyさん
2009/06/15(月) 00:03:48ID:???謎すぎるけど PHP の preg 使って entry_basename を $1 に入れるんだと
思い込んでみた
0531nobodyさん
2009/06/15(月) 00:06:02ID:???「ここにいろんな文字列が入ります」っつーダミーなんだろうけど、
どういった文字で構成されるの?
0532nobodyさん
2009/07/05(日) 16:07:10ID:???2009/1/1
↓
2009/01/01
に一行で置換したいのですが。
s|/([0-9][^0-9])|/0$1|gm;
だと、2回同じ処理が必要になってしまいます。
いい方法ありますか?
0533nobodyさん
2009/07/05(日) 16:12:40ID:???0534nobodyさん
2009/07/05(日) 17:05:36ID:???後ろの1文字ってマッチする?
マッチするなら
1 while $str =~ s|/([0-9][^0-9])|/0$1|gm;
でいけるんじゃない
0535nobodyさん
2009/07/05(日) 17:40:16ID:???0537nobodyさん
2009/07/05(日) 18:27:53ID:???0538nobodyさん
2009/07/08(水) 01:27:46ID:???0539nobodyさん
2009/07/15(水) 09:40:19ID:???どう表現すればいいのでしょうか。
以下の例だと、font-size:の部分です。
h1 {
font-size: 150% !important;
}
0541nobodyさん
2009/07/15(水) 14:47:39ID:???見やすくなりました!
:first-childや:notのセレクタで誤爆していたので
[\-a-za-z0-9]+[ \t]*:(?!\first|last|not)
としました。
また以下のようなものだと誤爆するみたいですが
これはほとんど使わないので目をつむろうと思いますw
BODY[style="width: 100%; height: 100%;"] {
font-size: 150% !important;
}
0542nobodyさん
2009/07/15(水) 15:14:34ID:???[\-a-za-z0-9]+[ \t]*:(?!first|last|not|hover|focas|active|visited|link|lang|after|before)
0543nobodyさん
2009/07/15(水) 23:25:43ID:2a7dmfqp0544nobodyさん
2009/07/22(水) 16:01:40ID:???正規表現初心者です。
秀丸で、正規表現を使って文字列の置換をしようとしています。
例)
abcd,efag),
これを最初の[,]だけを[',]に置換したいと思っています。
検索文字列: [^)],
置換文字列: ',
とすると、
abc',efag),
のように文字列の後ろの1文字まで消えてしまいます。
文字列が消えないように、最後尾でない[,]だけを置換するにはどのように指定すればいいでしょうか。
教えてください。
0545nobodyさん
2009/07/24(金) 05:32:15ID:???候補 1(質問者の方針参考)
検索文字列: ([^)]),
置換文字列: $1',
候補 2
検索文字列: ,(?!$)
置換文字列: ',
無理なら一旦「,\n」を「,」を含まない別の適当な文字列に変換して、
全ての「,」を「',」に変換してから元に戻すとか。
0546nobodyさん
2009/08/01(土) 13:06:24ID:???検索文字列: |-^)v!!
置換文字列: (^o^)/~~
0547nobodyさん
2009/09/01(火) 17:17:50ID:???<a href="javascript:userid('123456');">テキスト</a>
※「123456」と「テキスト」は変化します
といった並びの文字列からタグをぬいて
123456,テキスト,
とカンマ区切りにしたいのですが、何か良い方法はないでしょうか
0548nobodyさん
2009/09/01(火) 17:51:35ID:???お騒がせして申し訳ありますん
0550nobodyさん
2009/09/03(木) 12:19:35ID:54RqrMPZ一挙に書くにはどうすればいいでしょうか?
1つ1つ書くと下記のようなのを1つにしたいです。
Redirect 301 /index.php?a=1 "http://www.sample.jp/index?a=1"
Redirect 301 /index.php?a=2 "http://www.sample.jp/index?a=2"
Redirect 301 /index.php?a=3 "http://www.sample.jp/index?a=3"
・
・
・
Redirect 301 /index.php?a=a1 "http://www.sample.jp/index?a=a1"
Redirect 301 /index.php?a=b2 "http://www.sample.jp/index?a=b2"
Redirect 301 /index.php?a=c3 "http://www.sample.jp/index?a=c3"
・
・
・
0552nobodyさん
2009/09/03(木) 12:47:58ID:54RqrMPZと思ったので礼などは書かなかった。
どっちかというとこっちの方が適切とは思うが、
【.htaccessファイル(「分散設定ファイル」)の書き方・使い方などに関するスレです。 】
って説明のスレに書いても別に間違ってないと思う。
0553nobodyさん
2009/09/03(木) 15:52:56ID:???スレ違い。
【Apache】mod_rewriteについて語るスレ
http://pc11.2ch.net/test/read.cgi/php/1023791370/
個人的には礼とかどうでもいいと思うけど、
マルチ質問扱いされて厄介なことになる可能性があるので、
「向こうで質問し直します」とかひとこと言っておいた方が無難とは思う。
あと、ドメインの例示に使えるのは "example.jp" ね。
0554nobodyさん
2009/09/13(日) 17:57:11ID:???やりたいことがうまく実現できません。
やりたいことは、
・<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>
0555nobodyさん
2009/09/27(日) 12:15:08ID:???という正規表現に対し、例えば
"身長:175\n体重:67"
という文字列がきたら
"身長:<font color="red">175</font>\n体重:<font color="blue">67</font>"
のようにHTMLタグを追加したい。
ただし
"身長:100\n体重:100"
のように身長と体重が同じ場合も身長は赤、体重は青にしたい。
もっと欲をいえば正規表現は身長・体重だけでなく
/年齢:(\d+)\n好きな食べ物:(\S+)/
のように可変にしたい。
0556nobodyさん
2009/09/27(日) 13:11:58ID:???0557555
2009/09/27(日) 15:20:08ID:???0558nobodyさん
2009/09/27(日) 16:41:20ID:???0559nobodyさん
2009/09/27(日) 16:49:26ID:???できるだけトリッキーでなくて普通の正規表現のパターンマッチと置換でできる範囲で
0560nobodyさん
2009/09/27(日) 23:10:15ID:???普通に関数作る方が現実的だと思うけど
0561nobodyさん
2009/09/28(月) 01:47:40ID:???0562nobodyさん
2009/09/28(月) 08:53:02ID:???正規表現でやるとかえって面倒な事までさせようとしていらない
苦労をする傾向があるね。理解しちゃえば使った方がいいかどうか
判断つくようになるんだが。
0563nobodyさん
2009/09/28(月) 10:18:45ID:???こんなのとか?
html = str.sub(/(.+?)(:)(\d+)\n(.+?)(:)(\S+)/) {
"#{$1}#{$2}<font color=\"red\">#{$3}</font>\n#{$4}#{$5}<font color=\"blue\">#{$6}</font>"
}
0564nobodyさん
2009/10/06(火) 22:32:03ID:???文字列の中のURLからホストを取得するのは解るのですが
ホスト名とその後に続くディレクトリ名を取得する方法を教えて下さい。
$url = "http://hogehoge.com/hoge/index.php";
これならば
http://hogehoge.com/hogeの部分です。
お願いいたします。
0565nobodyさん
2009/10/13(火) 11:08:03ID:8X+N74J6最後を意味する$は下記のように最終的に1つでよいですか
if (preg_match("/\.html|\.php|\.txt$/",$value)) {
$chk = 1;
}
それともこのように全部に$が必要ですか?
if (preg_match("/\.html$|\.php$|\.txt$/",$value)) {
$chk = 1;
}
0566nobodyさん
2009/10/13(火) 11:28:58ID:???parse_url使うか"/(.*)\//"
>>565
やってみればわかることだけど当然全部に必要
だから\.(html|php|txt)$みたいに括弧でくくるのが常套だけどマッチした値を取得する必要ないなら
\.(?:html|php|txt)$と書いて少し軽くできる
0567565
2009/10/13(火) 12:34:51ID:8X+N74J6ありがとうございました( ^ω^)
0568nobodyさん
2009/10/14(水) 08:58:15ID:???「<と>で囲まれた文字列内の abc を def に全て置換する」
というのは正規表現でどう書けばよいでしょうか。
マッチだけならば
"<asaabcasalaabca>" =~ /\<(.*?)(abc(.*?))*?\>/
のようにしてマッチさせられるのですが,繰り返しがあるので後方参照で取得できません。
0569nobodyさん
2009/10/14(水) 09:18:20ID:???せっかくperlでプログラム書けるんだから、
1. 「<」と「>」に囲まれた文字列を取り出す
2. 1で取り出した文字列のabcをdefに置換
3. 2の結果を「<」「>」で挟む
とやれば難しいことは何もない。
0570568
2009/10/14(水) 10:26:28ID:6OWMkMrwいや,確かにおっしゃるとおりなのですが,
Perl互換の正規表現を採用しているエディタで文章を打っているときに,
いちいち使い捨てのPerlスクリプトを作るのが面倒で,
せっかくエディタに内蔵されている正規表現置換機能で置換できれば便利なのにな……と思った次第です。
0571nobodyさん
2009/10/14(水) 10:46:05ID:???0572nobodyさん
2009/10/14(水) 16:45:59ID:???そのエディタのキーボードマクロ機能で繰り返し適用すればよくね?
0573nobodyさん
2009/10/14(水) 17:59:48ID:???0574nobodyさん
2009/10/14(水) 18:10:49ID:???0575572
2009/10/14(水) 18:34:24ID:???エディタの置換機能だと複雑なことができない (この場合 < と > の間を繰り返し置換)
からどうすればいいの?っていう質問だと思ったんだが、違うのかな?
どのエディタ使ってるとか晒してくれるともっと的確に答えれる香具師がいそうだが。
0576568
2009/10/14(水) 23:09:15ID:???いえ,ですから,エディタ(Mac OS X の Jedit X です)に正規表現置換機能が備わっていることは分かっています。
その正規表現の書き方を知りたいのです。
「< と > の間の繰り返し置換」は正規表現では実現不可能,ということであれば,
やむを得ずスクリプトを組みます(Perl あるいは Jedit X のマクロ言語である AppleScript)が,
可能であれば正規表現置換で実現したいのです。
やはりエディタウィンドウ内で完結するのは手軽ですので。
先読み・後読みや再帰を利用した超絶技巧的正規表現でも構いません。アイデアを求めています。
0577nobodyさん
2009/10/15(木) 00:24:07ID:???テキストエディタの実装する正規表現には方言がある。
ここで尋ねても埒が明かない可能性が大なので、新Mac板の専用スレッドに引っ越すことを推奨。
Mac用テキストエディタ Jedit X / 1.0〜4.0
http://pc11.2ch.net/test/read.cgi/mac/1248500724/
0578nobodyさん
2009/10/15(木) 13:12:35ID:???Perlでしてみた。
そのエディタは後方参照はできるんかな?
my $str = "<asaabcasalaabca>";
print $str, "\n";
$str =~ s/((?:<|\G).*?)abc(?=.*?>)/\1def/g;
print $str, "\n";
0580578
2009/10/15(木) 13:37:10ID:???$str =~ s/((?:<|\G)[^<>]*?)abc(?=[^<>]*>)/\1def/g;
0581nobodyさん
2009/10/15(木) 13:51:05ID:???javascriptです。
0582nobodyさん
2009/10/15(木) 20:38:57ID:???Perlだったら。
s/<(.*?)>/(my $s = $1) =~ s{abc}{def}g; "<$s>"/ges;
エディタのマクロでやるのがいいかなと思うけど、ちょっと面倒。
0583nobodyさん
2009/10/19(月) 23:25:42ID:/Zspq1xOがあれば正規表現(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 <[email protected]>' -t
/home/sendmail -t\"
}
↓↓↓消したい記述その2↓↓↓
/^[a-zA-Z0-9\-\.\/\[\]\(\)\{\}\|@`:<>,!?\"'#\$%&*+;\\=^_~ ]*?$/"
0584nobodyさん
2009/10/19(月) 23:36:46ID:???正規表現でやりたいのですが、どのようなチェックを行えばいいでしょうか?
0585nobodyさん
2009/10/20(火) 09:19:58ID:???0586nobodyさん
2009/10/23(金) 15:06:47ID:???0587nobodyさん
2009/10/23(金) 17:07:26ID:???0588nobodyさん
2009/10/24(土) 13:30:39ID:???なんか巧妙にうまくごまかして危険なコマンド実行されそうだな。
正直俺の知識では知らん。
どんなコマンドも受け付けたくないな。
そもそもコマンドによってチェック内容は変わるんじゃないの?
0589nobodyさん
2009/10/24(土) 18:23:59ID:???0590nobodyさん
2009/10/25(日) 08:12:45ID:???俺はこれからどのように生きていけばいいでしょうか?
くらいに漠然とした質問だなこりゃ。
構文的に shell が受理可能かどうかなら Perl なら shellwords.pl 使うとかな。
0591nobodyさん
2009/12/09(水) 19:11:48ID:???たとえば以下のように四行の文章があって
それら文章の最初(一番目)の空白文字だけを検索するには
どうすればいいのですか?
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 の間の空白文などなどです
0592nobodyさん
2009/12/09(水) 21:08:56ID:???(\([^()]*(((\([^()]*\)[^()]*))*\)[^()]*)*)*\)
↑これに穴は無いよな!?
どんなに入れ子にしても、エラーはでないかな
初めて作った正規表現なんだが。ご指南、よろ
0593nobodyさん
2009/12/20(日) 20:33:27ID:fe9ijwb+これの意味を教えてください
()の中はわかるのですが前がよくわかりません
0594nobodyさん
2009/12/20(日) 20:38:26ID:???0595nobodyさん
2009/12/20(日) 20:44:43ID:fe9ijwb+00200 とかの前の0を無視して検索できるという感じですか
0596nobodyさん
2009/12/21(月) 08:18:48ID:???0が0個以上並んだ後に、0〜9が1個以上並ぶ。
0598nobodyさん
2009/12/23(水) 22:25:52ID:Hajqsr0G<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>以外 の時点で既につまづいている始末です。
0599nobodyさん
2009/12/23(水) 23:13:19ID:???$s=~ s/(<ul>)\s*|(<\/ul>)\s*|<li>(.*)(?:<\/li>)?\s*/$1?scalar($head.='-',''):$2?scalar(($head=substr($head,1)),''):"$head $3\n"/gei;
print $s;
0600nobodyさん
2009/12/29(火) 00:08:08ID:F3P1tBWBpreg_replace('/¥¥/')では削除できなかったのですが、preg_replace('/¥¥¥/')だと削除できました・・・
これはなぜでしょうか。
¥は次に有る文字をエスケープするわけですから、preg_replace('/¥¥/')でいけそうな気がするのですが。。。
正規表現初心者につき、低レベルですがご教授よろしくお願いいたします。
(上記は、あえて半角ではなく、全角の¥で説明しています。)
0601nobodyさん
2009/12/29(火) 12:06:00ID:???perlならそれで通るはずだけど。
0602nobodyさん
2009/12/29(火) 12:38:00ID:???'/\\/' は /\/ '/\\\/' は /\\/ '/\\\\/' も /\\/
0603600
2009/12/29(火) 22:52:30ID:F3P1tBWBなるほど!!
そういうことでしたか。
ありがとうございます!
0604nobodyさん
2009/12/30(水) 09:01:55ID:???0605nobodyさん
2010/01/24(日) 19:36:14ID:???<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行でつながってるものとして、複数タグの範囲内を取るのは可能なのでしょうか?
0606nobodyさん
2010/01/24(日) 20:12:18ID:???preg_match('/\bid=(\d+)[^>]+>([^<]*)<\/a>.*?"id">\1<.*?"time">(\d+)<.*?"name">([^<]*)<.*?"body">([^<]*)</is', $s, $match);
0607nobodyさん
2010/01/24(日) 21:01:02ID:???IDが0001以外のコメントもひろっちゃっていますが、かなり希望するのに近づいてきました。
もう少し細かく書くべきでしたが、複数のIDがあり、同じIDでのコメントも複数あった場合です。
上記のタグが一つのセットとして、いくつかある中の
<a href="test.php?id=0001">あいうえお</a>のタグとコメント部分をまとめて表示させたいと思っています。
id=の部分を改変して直接0001を指定したらだめだった・・・
0608nobodyさん
2010/01/25(月) 01:28:52ID:???正規表現だけに囚われててプログラムがよろしくなかった…
0609nobodyさん
2010/02/03(水) 12:34:08ID:???Rewriteで動的URLを静的URLにしたいのです
やりたいことは6つのクエリを書き換えたいのですが
6つのうち1つのとき、2つのとき、・・・6つのときというように組み合わせがかなりの数になってしまうと思うのですが
順列で 6P1 + 6P2 + 6P3 + 6P4 + 6P5 + 6P6 と考えてよいのでしょうか?
6つも書き換えなんてやっぱ無理でしょうか?
0610nobodyさん
2010/02/03(水) 13:22:42ID:???0611nobodyさん
2010/03/02(火) 21:59:18ID:???0612nobodyさん
2010/03/02(火) 22:11:34ID:???0613nobodyさん
2010/03/08(月) 15:33:08ID:???/*------------------ここから--------------------*/
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 などでお願いします。。
0614nobodyさん
2010/03/08(月) 18:01:54ID:???0615nobodyさん
2010/04/11(日) 00:10:39ID:???何故か一部の漢字が引っ掛かってしまいます…確認した所では夕焼けの「夕」の
文字などです。
if(ereg ("[[:punct:]]",$_POST['名前']))
こんな感じです。今までは普通に機能していたんですが…
どなたかアドバイス頂けないでしょうか?
0617nobodyさん
2010/04/12(月) 09:23:26ID:???使わないほうがいいよ。perl互換正規表現(PCRE)をお使いください。
0618nobodyさん
2010/05/02(日) 00:32:33ID:???:-(, :!:, :?:, :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\|]};
こんな感じのコードにしてみたけど、もっとスマートに出来ますか?
しかし、正規表現はパズルみたいで面白いね。
0619nobodyさん
2010/05/02(日) 04:08:13ID:???スマートさではこっちのが上だね :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|=:[|:[]|:\|)
0620nobodyさん
2010/05/02(日) 04:53:21ID:???色々バグってた
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;
0621nobodyさん
2010/05/02(日) 10:16:16ID:???((?:\:(?:(?: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\-[|)])|=\:\[)
0622nobodyさん
2010/05/02(日) 11:44:31ID:???そうか、未来の拡張を考えて緩くしたけど、
2バイト文字以外のブログじゃ広くマッチしすぎるって事か。。。
それじゃスマイリーコードの方に厳格なルールを...
なんって考えるのもユーザーに優しくないし。
折り合いつけるの難しいね :|
0625nobodyさん
2010/05/02(日) 22:35:26ID:???文から推測すると、前提として普通の記事の場合はスマイリーコードとやらが画像に変換されるということがあって、
その記事が引用されてる場合はそれらを除去したいということか?
前提が正しいならスマイリーコードを画像に変換する時に使ってるルールを厳格に使うべきだし、
正しくないならリンクでも画像でもないスマイリーコードを除去する必要がないと思うんだが
0626nobodyさん
2010/05/02(日) 23:09:45ID:???正解です。
通常記事ではスマイリーコードが画像に変換されます。
で、引用時には、それら(改行,スペース,タブ,画像,リンク等)を除去して
コンパクトにしたいのです。
引用文にスマイリーが入ってもいいんですが、
記事を丸める過程で<img>タグが邪魔したので、除去するを仕様としました。
0627nobodyさん
2010/05/03(月) 00:05:08ID:???一度img要素に置換したものをベースにするというのがそもそもおかしいのでは?
もしかして表示する直前に置換してるんじゃなくて、DBに突っ込む段階で置換しちゃってるとか?
それだったら設計を見直したほうがいいと思うんだけど
0628nobodyさん
2010/05/03(月) 00:07:04ID:???じゃあやっぱり >スマイリーコードを画像に変換する時に使ってるルールを厳格に使う が一番スマートなんじゃないか
それができないなら一旦引用されていない記事として処理して、そこからimgタグを除去するとか
正規表現の話からはだいぶそれたので俺はこれ以上何も言わないことにするよ :P
0629nobodyさん
2010/05/03(月) 00:36:11ID:???スマイリーコードが置換されるのはDBから引っ張ってからですが、
追加プログラムの導入IDによって優先順位があるので単純ではないんです。。。
で、私も正規表現から脱線しすぎなのでこれが最後。
脱線ついでに、タイムズスクウェアで爆発物を積んでた車って。。。
家の車も正規表現でマッチしちゃうwww
0630nobodyさん
2010/05/19(水) 16:47:15ID:t/z/xcK5ああああああ @ ABCD @ abcd
という文字を
<b>ああああああ</b> @ ABCD @ <em>abcd</em>
のように置換したい時はどういう正規表現を使えばいいのでしょうか?
よろしくお願いいたします
0631nobodyさん
2010/05/19(水) 17:44:20ID:???スペース @ スペース が区切りとか?
0632nobodyさん
2010/05/20(木) 19:43:15ID: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>が入ることはありません。
0633632
2010/05/20(木) 19:44:24ID:???お手数ですがご教授よろしくお願いします。
なお、当方18歳女子になります。
0634nobodyさん
2010/05/20(木) 19:54:06ID:???0635nobodyさん
2010/05/20(木) 20:40:36ID:a5arSWsAhttp://ukiya.sakura.ne.jp/index.php?plugin=ref&amp;page=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F1&src=regex1.png
http://ukiya.sakura.ne.jp/index.php?plugin=ref&amp;page=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F8&src=regex8.png
0636nobodyさん
2010/05/20(木) 21:13:11ID:???0637632
2010/05/21(金) 22:05:20ID:E8tDrX2s無事に解決できました。
これより踊りに行くのでこれにて失礼致します。
0638nobodyさん
2010/05/24(月) 12:25:48ID:???<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です。
0639nobodyさん
2010/05/24(月) 14:40:31ID:???0640nobodyさん
2010/06/10(木) 09:40:35ID:???例)
<img src="/img/jpg/1111.jpg" >
<img src="/img/jpg/mm2222.jpg" >
<img src="/img/jpg/kkkkk3333.jpg" >
これをそれぞれ、以下のように置換したいと考えています。
例)
<a href="http://www.xxxxx.jp/1111.jpg"><img src="/img/jpg/1111.jpg" width="240px"></a>
<a href="http://www.xxxxx.jp/mm2222.jpg"><img src="/img/jpg/mm2222.jpg" width="240px"></a>
<a href="http://www.xxxxx.jp/kkkkk3333.jpg"><img src="/img/jpg/kkkkk3333.jpg" width="240px"></a>
imgタグをリンクタグで囲むのですが、リンク先URLには元々の画像ファイル名が使われています。また、imgタグには「width="240px"」が付加されています。
このような置換をPHP5で行うには、どのような正規表現を使用したらよろしいでしょうか。
宜しくお願い致します。
0641nobodyさん
2010/06/10(木) 16:43:49ID:???s/<img src="\/img\/jpg\/(.+)\.jpg" >/<a href="http:\/\/www\.xxxxx\.jp\/\1\.jpg"><img src="\/img\/jpg\/\1\.jpg" width="240px"><\/a>/;
こんな感じになるのかと思いますがどうでしょうか?
0642nobodyさん
2010/07/01(木) 16:19:28ID:qVVuQ4W9HTMLソースの中のimgタグのファイル名を正規表現などで一括で変えたいです。
<img src="http://www.hoge.com/aaa/bb/ccc/ddd.jpg" alt="sss">
<img src="/xxx/yyy.png">
<img src="../aaa/fff/xxx/ccc.gif" width="32" height="16">
↓
<img src="/images/ddd.jpg" alt="sss">
<img src="/images/yyy.png">
<img src="/images/ccc.gif" width="32" height="16">
こんな感じです。どの様にしたらよいでしょうか。
0643nobodyさん
2010/07/01(木) 17:11:08ID:???s|(<img[^>]* src=")[^"]*/([^/"]+"[^>]*>)|$1/images/$2|ig
0644nobodyさん
2010/09/13(月) 00:25:36ID:BUnMGSIw%でかこまれた(%test%)文字をpreg_matchでヒットさせたいんですが、どういう文字列にすればいいんでしょうか?
ちなみに、'/%%([^%])%%/'ではだめでした。
0645nobodyさん
2010/09/13(月) 00:27:10ID:???'/%%([^%]*)%%/'です。
0646nobodyさん
2010/09/13(月) 00:33:05ID:???%test% と書かれてたら test をキャプチャするのかどっち?
後者だと勝手に決め付ける。'/%([^%]+)%/'
0647nobodyさん
2010/09/23(木) 15:56:42ID:???でウェブ関連以外のファイルを抜き出しいのだけれど、
なぜか在るはずの【*.pdf】が出てきません・・・。
書き方が不味いのでしょうか。
0648nobodyさん
2010/09/24(金) 17:04:12ID:???0649647
2010/09/24(金) 20:33:46ID:???find . -type f ! \( -name \*.html -o -name \*.htm -o -name \*.css -o -name \*.js -o -name \*.gif -o -name \*.jpg -o -name \*.png -o -name \*.swf -o -name \*.xml -o -name \*.pdf \) -print
を、-iregex使って短くするにはどう書けばいいんのでしょうか。
0650nobodyさん
2010/09/26(日) 06:42:01ID:JLVe9rj0全部のaをヒットさせるにはどうしたらいいんでしょうか?
0651nobodyさん
2010/09/26(日) 22:12:08ID:???コールバック使うときは1つめの引数は全体だよ
"aaaaaaaaaaaaaa".match(/(a)/g);
これでいいと思う
0652nobodyさん
2010/10/03(日) 17:27:45ID:???この文字列の
/* ~~~ */ で囲まれた部分それぞれを全て正規表現で抜き出せるのですか?
0653652
2010/10/03(日) 17:28:53ID:???0654652
2010/10/03(日) 17:53:37ID:???0655nobodyさん
2010/10/20(水) 18:27:58ID:???から、phpファイル名(/index.php)のみ削除するにはどうすればいいでしょうか?
ファイル名は変わることがあります。
0656nobodyさん
2010/10/20(水) 22:18:19ID:???0657655
2010/10/21(木) 01:50:09ID:???>Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in
と言われてしまいます。。。
0658656
2010/10/21(木) 02:29:25ID:???<?php
$str = '/index.php/blog/new/id/17';
// $pattern = '/\/[^\/]+?\.php/'; // デリミタが / のときはエスケープ
$pattern = '{/[^/]+?\.php}'; // デリミタは { と }
$replace = '';
echo preg_replace($pattern, $replace, $str);
?>
0659nobodyさん
2010/11/13(土) 19:09:08ID:peMm7xttこう言った文章を考えるのは、たのしい。
わたしは、「こんにちは」と言いました。
「この文章は、なかなか面白いですね。とても正確な正規表現を考える必要があるんです。」
「では、そんな正規表現をどうやって見つけるのでしょうか?そうだ、質問してみましょうよ!。」
「なるほど?。それは面白いアイディアだ。」と、もう一人は言った。
という文章があったときに、
"こう言った文章を考えるのは、たのしい。",
"わたしは、","「こんにちは」","と言いました。",
"「この文章は、なかなか面白いですね。","とても正確な正規表現を考える必要があるんです。」",
"「では、そんな正規表現をどうやって見つけるのでしょうか?","そうだ、質問してみましょうよ!。」",
"「なるほど?。","それは面白いアイディアだ。」","と、もう一人は言った。"
という感じに分割して配列にしたいと思っています。
現在使っている正規表現は
$contents = array();
preg_match_all('/.*?。|.*?「/m',$content,$contents);
という感じで書いてみました。
$contentがもとの文章で、$contentsが新しく得る配列です。
どうも複雑でどうしたら良いのかわからないので質問させていただきます。よろしくお願いします。
0660nobodyさん
2010/11/14(日) 09:26:59ID:???0661nobodyさん
2010/11/14(日) 22:54:16ID:xJLLsuw0質問させてください
みかん みかん
みかん (空白行)
りんご → りんご
なし なし
なし (空白行)
なし (空白行)
かき かき
というかんじで
重複行は空白のままで残したいのですが
どうすべきでしょうか?
0662nobodyさん
2010/11/14(日) 22:55:28ID:???0663nobodyさん
2010/11/14(日) 23:35:35ID:xJLLsuw0エディタの検索置換でやりたいです
↓
http://d.hatena.ne.jp/seuzo/20080531/1212228668
0664nobodyさん
2010/11/15(月) 00:12:15ID:???みかん
りんご
りんご
みかん
みかん
りんご
でこぽん
こんな風に離れた行に重複がある場合はどうすんだろ?ソート済みなのかな。
0665nobodyさん
2010/11/15(月) 00:48:49ID:AfSBC14n0666nobodyさん
2010/12/06(月) 23:51:24ID:k5Tua1Tdただし、@gmail.com、@googlemail.com、@livedoor.comの場合は
@の前に「+」「.」が含まれている場合は除外する。
これって正規表現1発でできたりしますか?
0667nobodyさん
2010/12/06(月) 23:53:00ID:???0668nobodyさん
2010/12/08(水) 14:11:59ID:???0669nobodyさん
2010/12/20(月) 16:51:11ID:Qb400/Iaどうしたら良いんでしょう。
●置換前
<table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br />
<tbody><br />
<tr><br />
<td><br />
</td><br />
</tr><br />
</tbody><br />
</table>
●置換後
<table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx">
<tbody>
<tr>
<td>
</td>
</tr>
</tbody>
</table>
0671nobodyさん
2010/12/20(月) 20:48:53ID:???0672nobodyさん
2010/12/21(火) 08:13:01ID:???0673nobodyさん
2010/12/24(金) 08:47:52ID:???散々既出の可能性がありますが、
参考ページでも構いませんので教えてください
UWSCのコードを書くのにK2Editorを使っています
仕上げたコードの可読性をあげるために
演算子の前後にスペースを入れたいです
例 x+y=z
x + y = z
K2Editorの正規表現はBREGEXP.DLLを使っています
以下の置換をマクロで行います
"([^ ])([\+\-\*<])","$1 $2"
"([^ <])>","$1 >"
"([\+\-\*=])([^ ])","$1 $2"
"([^ <>])=","$1 ="
"<([^ =>])","< $1"
">([^ =])","> $1"
"([^ \/])\/([^\/])","$1 /$3"
"([^\/])\/([^ \/])","$1/ $3"
" "," "
" +"," "
"([,=\+\-\*\/\(<>]|mod|and|or|xor) - ","$1 -"
正規表現はド素人でネットで検索しながら書いたので
まずい部分も多いと思いますがそれは置いといて、
本題はダブルコーテーションで括られた文字列内は
置換したくないのですが、何か方法はありますか?
0674nobodyさん
2010/12/29(水) 07:28:15ID:???0675nobodyさん
2011/01/06(木) 22:08:59ID:y0rS3N6j「次章(第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては・・・」
という文章より法律名称や条などをwhileループで拾い上げたいのですが、
/([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/
で拾い上げると、法律名称(上の文章だと「建築基準法」)が抜けてしまうので
/([建築基準法|建築基準法施行令]*)([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/
と言う形で拾うと、なぜかpreg_match($match, $text, $arr)の$arrの中に、なぜか「第」という文字が拾われてきません。
これは何故なんでしょうか??
もし理由が分かる方がいらっしゃったら、お教え願います。
0676nobodyさん
2011/01/07(金) 03:55:37ID:???0677nobodyさん
2011/01/07(金) 03:58:44ID:???$pat1 = '/([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/';
$pat2 = '/([建築基準法|建築基準法施行令]*)([第]*)([1-9]+[0-9]*)([条項号]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/';
preg_match($pat1, $text, $arr);
var_dump($arr);
preg_match($pat2, $text, $arr);
var_dump($arr);
array(7) {
[0]=> string(62) "第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては"
[1]=> string(2) "第"
[2]=> string(2) "20"
[3]=> string(2) "条"
[4]=> string(1) "3"
[5]=> string(0) ""
[6]=> string(53) "、第1節の3、・・・除き、建築基準法第80条の2にあっては"
}
array(8) {
[0]=> string(62) "第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては"
[1]=> string(0) ""
[2]=> string(2) "第"
[3]=> string(2) "20"
[4]=> string(2) "条"
[5]=> string(1) "3"
[6]=> string(0) ""
[7]=> string(53) "、第1節の3、・・・除き、建築基準法第80条の2にあっては"
}
第が拾われないってどこの話?
あと関係ないけど複数拾いたいならpreg_match_all
0678nobodyさん
2011/01/07(金) 08:16:20ID:???0679nobodyさん
2011/01/07(金) 08:35:43ID:???[第]* は量指定子も含めてどうかと思うけどね。
0680nobodyさん
2011/01/07(金) 11:13:33ID:???下のではだめ?
preg_match("/(.)\1{3,}/", $hoge)
例→AAA、bbb、111、あああ他なら引っかかるようにしたい、ということ
0681nobodyさん
2011/01/07(金) 11:42:34ID:???考え方はいいけど、最初の(.)で1文字食われるから繰り返し回数が
1回多い。それじゃ4文字以上になっちゃうぞ。
0682nobodyさん
2011/01/07(金) 12:06:39ID:???4文字以上連続した文字だとしても、想定したように動かない・・・
↓OK(Perl)
my $hoge = 'aaaa'; if ($hoge =~ /(.)\1{3,}/) { print 'OK'; } else { print 'NG'; }
↓NG(PHP)
$hoge = 'aaaa'; if (preg_match("/(.)\1{3,}/", $hoge)) { echo 'OK'; } else { echo 'NG'; }
PHPは\1って表現できない?
0683nobodyさん
2011/01/07(金) 12:28:18ID:???0684nobodyさん
2011/01/07(金) 13:39:43ID:???echo preg_match('/(.)\1{3,}/', $hoge) ? 'OK' : 'NG'; // OK
"\\1" か '\1' だよね。
0685680
2011/01/07(金) 14:21:39ID:???ありがとうございました
uも付けて完動です
0686675
2011/01/08(土) 22:00:49ID:GTa36OYO/uを追加したら見事に機能しました。
というか、今までさんざん正規表現を日本語に適用していたのですが、/uのことを全く知りませんでした。
お恥ずかしい限りです。
お教えいただき、ありがとうございました。
0687675
2011/01/17(月) 22:15:13ID:Br3WLX+O「...にあっては国土交通大臣が定めた安全上必要な技術的のうちその指定するに係る部分に限る。)、第119条、第5章の4(第129条の2の5第1項の2第6号...」
という文章から、第○○条の○○の○○などを抜き取り、かつその前後の文章も取得したいと考えています。
そこで
「/^(.+)*([第])([1-9]+[0-9]*)*([条]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/u」
というパターンでpreg_matchで拾いだそうと思うのですが、全く思うように拾いだせません。
何が問題なのでしょうか??
プログラムとしては、
<?php
$text = 'にあっては国土交通大臣が定めた安全上必要な技術的のうちその指定するに係る部分に限る。)、第119条、第5章の4(第129条の2の5第1項の2第6号の文章';
print 'text : ' . $text . '<br>';
$match = '/^(.+)*([第])([1-9]+[0-9]*)*([条]+)[の]*([1-9]+[0-9]*)*[の]*([1-9]+[0-9]*)*(.*)/u';
print 'match : ' . $match . '<br>';
preg_match($match,$text,$arr);
print 'arr : ';
print_r($arr);
print '<br>';
?>
こんな感じです。
もし分かる方がいらっしゃったら、お教え願います。
0688nobodyさん
2011/01/17(月) 22:47:22ID:???0689マッチした文字列を小文字にしたい
2011/01/17(月) 22:59:46ID:e71m2/yA下のサンプルプログラムでは$3が両方とも大文字の「US」になりますが、
最初の$3だけを小文字の「us」にする方法があれば教えてください。
OSはWindows、PHPは5.3です。
元の文字列の例
Country: US
変換後に得たい文字列の例
Country: <a href="http://ja.wikipedia.org/wiki/.us">US</a>
サンプルプログラム
<?php
$result = '';
$text = 'Country: US';
$pattern = '/(Country):(\s+)([A-Z]{2})/i';
$replace = "$1:$2<a href=\"http://ja.wikipedia.org/wiki/.$3\">$3</a>";
$result = preg_replace($pattern, $replace, $text);
echo $result;
?>
0690nobodyさん
2011/01/17(月) 23:51:56ID:???PHPで使える置換パターンが良く分からない
e修飾子つけちゃうとか
0691689
2011/01/18(火) 01:02:24ID:???PHPにはないんですかね?
ほかの方法でもかまいませんので、
引き続き、回答をお待ちしております。
0692nobodyさん
2011/01/18(火) 01:17:36ID:???$pattern = '/(Country):(\s+)([A-Z]{2})/ie';
$replace = '"$1:$2<a href=\"http://ja.wikipedia.org/wiki/." .strtolower($3). "\">$3</a>"';
書いてみたら引用符がすっきりしない感じになってしまった。
0693nobodyさん
2011/01/18(火) 19:32:41ID:sm74ERjNです。で、勉強しようと思うのですが、
反復学習ソフト付き 正規表現書き方ドリル
これいいですかね?
オライリーとどっちがいいかなって思うんですけど。
0696689
2011/01/19(水) 21:20:53ID:???できました。
ただ、「DO」というドミニカの国別コードの時、予約語と重なってエラーになったので、
ダブルクォートにしました。
$pattern = '/(Country):(\s+)([A-Z]{2})/ie';
$replace = '"$1:$2<a href=\"http://ja.wikipedia.org/wiki/." .strtolower("$3"). "\">$3</a>"';
どうもありがとうございました。
0698nobodyさん
2011/01/19(水) 23:40:21ID:zqG6AlFK今まで表計算ソフトやデータベースソフトなど普通に習得し、
更に興味が出てきたのでMySQLとPHPを使ってプログラミングしたり、
apacheやPostFixなども何とか使えるようになり、何となく分かってきた感じがしてるのですが、
正規表現に関しては、未だに「どうにか使っているけど、理解は出来ていない感じ」がします。
とりあえずやってみて、だめで違う手を試してみたりして....
まるで別種類な考え方が必要な気がします。
なので質問なのですが、正規表現を理解するのに一番良い本とか、
正規表現について「目から鱗が落ちた!!一皮むけた!!理解が深まった」
って思えるような本とかあったら、紹介いただけないでしょうか??
それとも忍耐強く、失敗しては考える繰り返しでなければ、習得できない物なのでしょうか??
当方今年で三十路なので、頭が固くなってきてるのかもしれませんが、いまいち頭にしみ込みにくくなってるような気がしてます。
もしよろしければお教え願います。
0700693
2011/01/20(木) 01:01:52ID:973KUxXQありがとうございます。
基礎から勉強したいので、買います。
0701nobodyさん
2011/01/20(木) 13:16:18ID:???質問のお題を片っ端から解いていくと、結構良い練習になると思う。
0702nobodyさん
2011/01/20(木) 23:13:37ID:LxK6uyroRewriteRule ^/hoge(.*)/(.*).html$ http://example.com/hoge/$1/i/$2.html [L]
下記のような場合は問題ないのですが
http://example.com/hoge → http://example.com/hoge/i/
http://example.com/hoge/saitama/2011/01/index.html → http://example.com/hoge/saitama/2011/01/i/index.html
↓のようにhogeで始まるディレクトリまでも変換されてしまいます。
http://example.com/hogehoge/kankeinai.html
hogeフォルダ配下のみ変換されるようにするには、どうしたらいいでしょうか?
環境は
CentOS5
Apache2
0703nobodyさん
2011/01/21(金) 00:15:43ID:???0704nobodyさん
2011/01/21(金) 18:26:53ID:???頭の良い人だとまた違うのかもしれないけど、
我々のような凡人は繰り返しやって経験値を積むしかないかなあ、って気がする。
で、何か読んで一つ山を越えたいなら、現状ではオライリー本の一択しか無いと思う。
0705nobodyさん
2011/02/10(木) 13:57:44ID:???よい方法が思い浮かびません。
javascriptです。
0706nobodyさん
2011/02/27(日) 08:37:54.94ID:GexZY7hJこの変換を変数展開で実行したいのですが、
正規表現で使える記号の変数展開のやりかたを教えてください。
2.$exprString = '/[\(]{2}?(.*?)\:(.*?)[\)]{2}?/';
preg_match("/$exprString/", $text, $match);
これだとうまく行きません。
0707nobodyさん
2011/02/27(日) 09:01:28.34ID:???0709nobodyさん
2011/02/27(日) 16:36:06.93ID:KOnmSusxやりました。
非常に勉強になりました。楽しかったし、なんかパズルをといている
みたいで、ただ残念ながらソフトはうごきませんでした。
0710nobodyさん
2011/03/03(木) 19:14:51.88ID:v/2VFVai添付ファイルのファイル名を取得している部分になります。
しかし、ファイル名に半角スペースがあると、半角スペースで文字列が切れてしまう
という現象があります。
半角スペースで途切れないようにするのはどのようにすればよいのでしょうか?
preg_match('/name\s*=\s*"?([^"\s\r\n]+)"?\r?\n?/is',$header['content-type'] , $matches )
よろしくお願いします。
0711nobodyさん
2011/03/03(木) 20:18:10.39ID:???"でもスペースでも改行でもない文字が続く限り〜
って自分で書いてるやん
0712nobodyさん
2011/03/04(金) 10:24:26.15ID:???0713710
2011/03/04(金) 13:32:58.16ID:8WvXj1g+ありがとうございます。
うまくいきました。
<(_ _)>
0714712
2011/03/04(金) 16:50:29.72ID:???もし"で囲まれてないのが来たらアウトだけどな
/name=(?:"([^"\r\n]+)"|([^\s\r\n]+))/i でマッチさせて
if (empty($matches[1])) $matches[1] = $matches[2];
みたいにしたほうが手堅いかもな
0715nobodyさん
2011/03/06(日) 18:00:58.46ID:???【OS】XP
自前のBBSをもっていますが、最近、レス番号にリンクをつけたく思い、「>>1」のようなレスをpreg_matchでリンクタグ生成しようと試みました。
preg_match('/>>[0-9]+/',$text,$link);
preg_replace('/>>[0-9]+/','<a href="#">'.$link[$n].'</a>',$text);
この関数では最初にマッチするレスしか変換できませんでした。
何かよい案がありましたらお願いします。
0716nobodyさん
2011/03/08(火) 00:32:23.62ID:???0717nobodyさん
2011/06/04(土) 18:19:07.23ID:GeFi3irL2枚目<br><img src="http://example.com/bbb.jpg"><br>
3枚目<br><img src="http://example.com/ccc.jpg"><br>もっと見る<br></div>........</html>
これで<div class="list">と</div>の間のアドレスだけ抜き出すのってどうやりますか?
........の中にも画像アドレスがあります。そっちはマッチさせないようにしたい。
preg_match_all("/list\".+?src=\"(.+)\".+</div>/", $html, $m);
0718nobodyさん
2011/06/04(土) 19:29:38.67ID:???0720nobodyさん
2011/06/04(土) 22:11:24.15ID:???http://php.net/manual/ja/function.preg-replace-callback.php
0722nobodyさん
2011/06/04(土) 23:04:45.68ID:???0723nobodyさん
2011/06/05(日) 14:02:49.98ID:uEzVCQDA正規表現一発でできそうな気がするんですが、無理ですか?
固定単語--- この中を検索 ---固定単語
こんな場面てよくあるような
0725nobodyさん
2011/06/16(木) 23:36:27.10ID:SYj2PUn3あるファイル内の
<td width="71%" valign="top" align="center"><div align = "center">
を
<td width="71%" valign="top" align="center">
だけに変換したいとおもい
$regTxt = "/<td ([a-z0-9\"=\s\%]+)><div ([a-z0-9\"=\s\%]+)>/is";
preg_match($regTxt,$x,$exchangeArr);
で$exchangeArr[1]を削除するため、preg_replaceを使おうと思っています。
ただ、最初のpreg_matchでマッチしません。
どうしたら出来るのでしょうか??
どなたかお教えください。お願いします。
0726nobodyさん
2011/06/16(木) 23:41:03.98ID:???日本語でおk
0727nobodyさん
2011/06/16(木) 23:44:03.44ID:SYj2PUn3でお願いします。
0728nobodyさん
2011/06/16(木) 23:45:43.17ID:???0729nobodyさん
2011/06/16(木) 23:52:34.42ID:SYj2PUn3<td....><div...>という形で、<td...>も<div...>のそれぞれの...が、様々な形をとっているけど、<td...>だけをきれいに残したいのです。
ただ、<div...>だけのもの(前に<td...>がついていない)は変換したくないのです。
こんな説明でわかります?
0730nobodyさん
2011/06/16(木) 23:56:08.62ID:???0731nobodyさん
2011/06/18(土) 14:34:02.52ID:???その様々な形を正規表現で指定すればいいと思うけどね。
$string = '<td width="71%" valign="top" align="center"><div align = "center">';
$string = preg_replace('/(<td [^>]+><div) [^>]+/', '$1', $string);
0732nobodyさん
2011/06/18(土) 14:41:26.83ID:???0734nobodyさん
2011/06/30(木) 00:52:32.34ID:hWRw8zI0/<td[^>]+><div[^>]+/とかで正規表現をやっても、全く変更されません。
preg_matchでやってみると<td[^>]+>までならmatchするけど、「<」以降を入れると、全く引っかかってきません。
何か思い当たること、ないでしょうか?
0735nobodyさん
2011/06/30(木) 06:05:38.15ID:???0736nobodyさん
2011/06/30(木) 07:23:46.62ID:???0737nobodyさん
2011/06/30(木) 21:31:52.67ID:???0738734
2011/07/03(日) 22:32:36.09ID:8QAPbG3uphpでファイルをfopenで読み込んで、
while ($x = fgets($fp,1092)) {...}で変換をさせているんだけど、
<td..>部分と<div..>部分の間に改行が入っているから、変換できないらしい。
どうしたらいいでしょう??
0739nobodyさん
2011/07/03(日) 22:39:11.31ID:???0740nobodyさん
2011/07/03(日) 23:37:07.72ID:ypX399q3$string = preg_replace('/<\/div>/', '', $string);
か、
$string = preg_replace('/<div(.*?)> /', '', $string);
$string = preg_replace('/<\/div>/', '', $string);
じゃねえの
0741734
2011/07/03(日) 23:45:10.46ID:8QAPbG3u<td....></td>間にあるものは削除して、それ以外は改行したいのです。
0742nobodyさん
2011/07/05(火) 00:46:35.42ID:???0744nobodyさん
2011/07/16(土) 22:16:17.55ID:???0745nobodyさん
2011/07/23(土) 20:12:09.44ID:lXdqpzgT繰り返された個数を元にAAAAAをA*5などに置換する「うまい」方法はあるでしょうか。
言語はとりあえずJavaScriptで考えています。
replace(/A+/g, 'A*'); //←ここから進まない。
0747nobodyさん
2011/07/23(土) 20:34:12.11ID:lXdqpzgTありがとうございます。以下で質問し直しました。
http://hibari.2ch.net/test/read.cgi/hp/1311096825/90n
0748nobodyさん
2011/07/24(日) 19:06:14.31ID:/DoWXp9n[次の人 | 前の人] だと「の」一文字だけでも拾ってしまいます…
0749nobodyさん
2011/07/24(日) 21:04:07.81ID:???君の書いた正規表現は「『次』か『前』か『の』か『人』か『|』か『 』にマッチ」だ。
多分"(次の人|前の人)"みたいなことがしたかったんだろうけど、
"[次前]の人"でいいと思う。
0750nobodyさん
2011/07/24(日) 21:07:51.65ID:???"[^hogehoge]"で文字列の否定を指定したつもりになっちゃう人。
もちろん間違い。念の為。
0751nobodyさん
2011/07/24(日) 22:38:19.38ID:X7IDpmYoでは何が正しいのでしょうか?
0753nobodyさん
2011/07/24(日) 23:02:35.46ID:???文字列の否定は
(?!.*文字列.*).*
みたいのかなぁ
0754nobodyさん
2011/07/25(月) 21:55:36.12ID:RVWZInKCPHP5です。
0755nobodyさん
2011/07/25(月) 22:46:11.52ID:???3社だけど、
Emo PHP携帯絵文字ライブラリ
http://gard.no-ip.info/emo/readme/study/reg.html
0756nobodyさん
2011/07/25(月) 23:06:55.26ID:RVWZInKCありがとうございました
0757nobodyさん
2011/07/27(水) 20:41:33.29ID:PkulA4Drサラリーマンに、無理だと指摘され発狂中wwww
Webデザインの基金訓練を受講してる人 Part2
http://yuzuru.2ch.net/test/read.cgi/dame/1308059991
>>505
俺は40代で基金訓練受けて、これから独立しようと考えてるがな。
まぁ若干経験あるからその方面での話だけど。
基金訓練は単に「バナーくらい作れますよ」って言うだけのために受けた。
30代ならデジハリにもいっぱいいるぞ、余裕だろ。
ちゃんとした社会人経験があればだが。
0759nobodyさん
2011/08/01(月) 07:47:20.91ID:???上記正規表現で123がヒットする理由が分かりません
カンマがなくても何故ヒットするんですか?
*の前が()だからであってますか?
<対象文字列>
123
123,456
987,654,321
123,789,456,012
9876,543
123,456,
<HIT文字列>
123
123,456
987,654,321
123,789,456,012
0761nobodyさん
2011/08/01(月) 07:59:51.56ID:???*はゼロ個以上でマッチだから。
0762759
2011/08/01(月) 08:58:25.47ID:???調べなくても分かってますが()*も同様なのかと思いまして
>>761
いえ、nnnの場合もヒットさせたかったので*でいいのです
仕様というか動きの確認だけが目的で書き込んだので
0763nobodyさん
2011/08/01(月) 09:39:13.59ID:3IgNAOvk「a*」の時と「(abc)*」の時とで*の機能が変わらないことを確認したかったの?
あと若干言葉遣いに波風が立つ雰囲気を感じてしまうのはオレだけ(笑)?
0764nobodyさん
2011/08/01(月) 09:43:31.28ID:???0765nobodyさん
2011/08/01(月) 09:48:49.11ID:???0766nobodyさん
2011/08/01(月) 09:52:47.51ID:???0768nobodyさん
2011/08/01(月) 17:56:48.08ID:???> >>759の意図がいまいちよくわからんが、
> 「a*」の時と「(abc)*」の時とで*の機能が変わらないことを確認したかったの?
はい
> あと若干言葉遣いに波風が立つ雰囲気を感じてしまうのはオレだけ(笑)?
イラッ☆
0769nobodyさん
2011/08/01(月) 17:59:56.76ID:???>ヒットする理由がわかりません
っておかしいだろw
0770nobodyさん
2011/08/01(月) 18:00:59.64ID:???どう言う事でしょうか?
もっとスマートな方法があるのであれば是非ご教示願います
>>767
何がいけないのかさっぱりです
直近文字の0回以上のhitって事でないの?
0772nobodyさん
2011/08/01(月) 18:11:52.38ID:3IgNAOvk0773nobodyさん
2011/08/01(月) 18:44:25.32ID:???(お題のこんなのとか)*(?:ほかにもこんなのとか)*[いろ]*あるでしょう。
0774nobodyさん
2011/08/01(月) 19:21:33.25ID:???123がヒットしたのは
\d{3}の部分だけといえば分かるだろうか
(\d{3},)*は0回ってことで
0776nobodyさん
2011/08/01(月) 22:37:10.25ID:3IgNAOvkまあよかったな( ´∀`)
0777nobodyさん
2011/08/01(月) 22:54:31.04ID:???0778nobodyさん
2011/08/02(火) 11:07:19.68ID:???0779nobodyさん
2011/08/03(水) 19:33:03.57ID:???>>760
調べなくても分かってますが()*も同様なのかと思いまして
>>761
いえ、nnnの場合もヒットさせたかったので*でいいのです
仕様というか動きの確認だけが目的で書き込んだので
0780nobodyさん
2011/08/04(木) 09:41:51.16ID:???なんかイラッとするな
0782nobodyさん
2011/08/26(金) 08:02:24.21ID:???0784nobodyさん
2011/09/06(火) 00:06:31.30ID:???http//bbb.com:9999/
を除外しつつ
他の
h?ttp//○○○.△△△.□□□:☆☆☆/?
↑ここから ここまで↑
をヒットさせたいのですが色々試したのですが出来ませんでした
何か方法がありますでしょうか?
0785nobodyさん
2011/09/06(火) 00:20:00.51ID:???0787nobodyさん
2011/09/14(水) 01:54:57.08ID:???含まれてる場合にヒットさせたいのですが、一部除外したいトリップあります
◆(?!5s5hPZiJeU|ozOtJW9BFA).{10}
まではできたような気がするのですが1行目にマッチさせるにはどうしたら良いでしょうか
SJISです。
0790nobodyさん
2011/09/15(木) 22:42:04.53ID:???ありがとうございます
よく分からなかったので調べてみると複数行の行頭、文末にマッチさせることができるのですね
残念ながら行頭、文末にトリップがあるわけでないのでうまくないようです。。
0791nobodyさん
2011/09/16(金) 01:40:23.90ID:???789ではないが、mフラグをつけたら駄目だ
^ を利用すれば一行目のトリップにマッチできる
mフラグをつけたら破綻する
0792nobodyさん
2011/09/16(金) 01:49:30.98ID:???>>789のいうmオプションは「改行文字を無視する単一行モード」の意味
(Ruby等の流儀)で書いていて、
>>790はそれを「複数行モード」の意味(Perl等の流儀)に取っている。
0794nobodyさん
2011/10/02(日) 19:26:42.05ID:Tnal10Videfという文字列を消すこと出来るのですが、
def以外を消すにはどうすればいいのでしょうか?
0795nobodyさん
2011/10/02(日) 20:09:22.37ID:zbShr9jh0796nobodyさん
2011/10/03(月) 06:19:41.91ID:???よくわからんが否定はめんどくさいぞ。
([^def]|d(?!ef)|(?<!d)e(?!f)|(?<!de)f)
でdefの一部であるd,e,f以外の任意の1文字にマッチするから
これでなんとかなるだろう。
0797nobodyさん
2011/10/03(月) 21:56:35.04ID:???環境によるけど、(def)ですべてにマッチさせて、あとから取得した$1的なものに置換すればいいのでは
0799nobodyさん
2011/10/10(月) 10:36:17.70ID:???したいと思うのですが、例えば英字を全角で統一したい場合、素人考えでは
最も単純に作業をするには「全ての英字を全角に」→「タグのみ半角に」という
2回に分けた処理がベストかと思うのですが、もっと効率の良い処理の方法は
ありますでしょうか?
0800nobodyさん
2011/10/10(月) 11:10:33.30ID:???0801nobodyさん
2011/10/10(月) 16:07:33.02ID:gughiUX1それ以外はどしどし全角化
でおk
それはさておき、やんごとなき理由さえなければ統一するなら全角じゃなく半角にしとけ。
0804nobodyさん
2011/10/11(火) 23:11:43.85ID:???メンテナンス性にこだわるとどんな感じになるか……まるでイメージできません……orz
>>801
すいません、やんごとなき理由で全角化せねばならないのです…。
ところでその方法は正規表現は特に使わず、1文字ずつチェックしていく感じでしょうか?
>>802
DOMを使うというと……やはりこれも正規表現は使わない感じですか?
>>803
今回は特にタグの中身まではいじらない予定なので全角valueでもokです。
0805nobodyさん
2011/10/12(水) 00:03:54.71ID:???すいません、スレ違いになってしまいましたが、ひとまずその方法を試してみました。
が、実体参照(&anpとか)が出てきたときにややこしいことになりそうです…orz
この場合だけ力技で切り抜けるか、もしくはやはりある程度正規表現で処理を
した方が良さそうな気がしますがどうでしょうか。
あるいはDOMの方が簡単なのでしょうか…?
どう回せばタグの中身が取り出せるのかいまひとつわからないです。。。
0806nobodyさん
2011/10/12(水) 00:21:33.58ID:???うーん。
0807nobodyさん
2011/10/14(金) 09:47:43.56ID:+/AP5o7rもっと効率いいやり方あるでしょうか?
\<[a-zA-Z0-9\"\<\>\ \=\;\:\/\.\_\-\(\)\#\!\'\&\%]+
0808nobodyさん
2011/10/14(金) 15:25:07.10ID:???0809nobodyさん
2011/10/14(金) 15:26:32.18ID:i4T0D1ix↓だと「Hello」ごと消えていかないか?
<p>Hello</p>
↓だと「…alt="」で止まってしまわないか?
<img src="hello.png" alt="こんにちは">
↓というわけでこれでいいんじゃないの。
<[^>]>
0810nobodyさん
2011/10/14(金) 15:28:56.11ID:i4T0D1ix<[^>]+>
0811nobodyさん
2011/10/15(土) 02:18:16.86ID:pl58b8lQ花王デモ
要チェック
0813nobodyさん
2011/10/15(土) 16:07:18.81ID:???0814809
2011/10/15(土) 18:11:07.01ID:5td5CFAR0815nobodyさん
2011/11/01(火) 16:59:25.75ID:???ああああ文字列ああああ
いいいい文字列いいいい
検索
/^.*$/m
置き換え
"$0"
とした場合に
"ああああ文字列ああああ
"
"いいいい文字列いいいい
"
となってしまいます。"ああああ文字列ああああ"としたいのですが、どのようにすれば良いでしょうか
PHPのpreg_replaceを使っています。よろしくお願いします。
0816nobodyさん
2011/11/01(火) 17:49:42.69ID:???0819nobodyさん
2011/11/01(火) 22:40:47.00ID:???>>816の
> マッチするないように改行が含まれてるから。
ではなくて
マッチするないように改行が含まれていなくても\x0Dが付加されるから
無視ではありません。
0820816 != 818
2011/11/01(火) 23:45:06.62ID:???言い方が悪かったのかな。CRが含まれてるから。
別にCRは付加されたりしないよ。
preg_replace("/^([^\r]*)\r?$/m", "\\1", $text);
とするか、LFのみに変換してから処理するか。
0821nobodyさん
2011/11/07(月) 22:53:15.08ID:???「見附市 見附 123番地」この文字列を
「見附市 見附123番地」としたいです
「見附市」と「見附」の間の空白はそのままという条件付です
0822nobodyさん
2011/11/08(火) 00:28:51.98ID:???\s[\d]
0823nobodyさん
2011/11/08(火) 01:11:57.96ID:???0825nobodyさん
2011/11/08(火) 10:58:00.13ID:???↓
\1
0828816 != 818
2011/11/08(火) 13:46:47.91ID:???0829nobodyさん
2011/11/08(火) 20:01:17.27ID:???0831nobodyさん
2011/11/23(水) 06:53:59.84ID:V5f5mApl文字列
![[別の文字]]
![[ほげほげ]]
]]
![[何か]]←これが1単位で、↑こんなの中から最短マッチで抽出したく、以下のようにしました。
$pattern = '/!\[\[([^\[\]]+)\]{2,2}?/';
しかしこの場合、ブラケットが使えないので困っています。
![[ この中に[←とか]←があると使えない ]]
最短マッチさせるにはどう書けばいいでしょうか?
0832nobodyさん
2011/11/23(水) 07:02:11.30ID:???0833nobodyさん
2011/11/23(水) 09:23:16.47ID:V5f5mAplありがとうございます。
ちなみに↓こうでしょうか?
$pattern = '/!\[\[.+?\]{2,2}?/';
しかしながら、やはり最長マッチになってしまいます。
うっかり書き忘れたのですが、PHPのpreg_matchで行なっています。
PCRE準拠(Prel互換)らしいです。
0834nobodyさん
2011/11/23(水) 09:52:54.59ID:V5f5mAplが、1行だといけるのですが、複数行にまたがった場合失敗しました。
↓このような場合
![[
文[字]列
![[別の文字]]
![[ほげほげ]]
]]
オプションにmやsを付けてみましたがダメです。
0835nobodyさん
2011/11/24(木) 01:59:39.52ID:???入れ子の対応とりつつマッチするには
Subroutine Referencesを使えば良いよ。
<?php
$re = '/(?:!\[\[(?:(?!!\[\[)(?!\]\]).|(?R))*\]\])/s';
$text = "![[
文[字]列
![[別の文字]]
![[ほげほげ]]
]]";
$position = array();
for ($i = 0; $i < strlen($text); $i++) {
$pos = strpos($text, '!', $i);
if (end($position) !== $pos)
$position[] = $pos;
}
foreach ($position as $pos) {
$t = substr($text, $pos);
if (($pos === 0 || $pos) && preg_match_all($re, $t, $match, PREG_SET_ORDER)) {
var_dump($pos); var_dump($t); var_dump($match); print "----\n";
}
}
?>
0836nobodyさん
2011/11/25(金) 00:51:55.86ID:7pZprZ8qうぉ!?ありがとうございます!
0838nobodyさん
2011/11/27(日) 21:48:09.61ID:ZbhJICcuphpのjson_decodeだと、どうやら変換エラーが出るようで、正規表現で解決できればと思うのですが。
{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"6","1":"6","2":"5","3":"5","4":"6"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"yNum":{"0":"5","1":"4","2":"4","3":"5","4":"5"}}
を[xType][0]=main,[xType][1]=main・・・・・的な感じなんですが。
どなたかお願いいたします。
0840nobodyさん
2011/11/28(月) 08:12:12.66ID:NxvSoLFs全体はもっと長いのですが...
0841nobodyさん
2011/11/28(月) 11:38:12.26ID:???0843nobodyさん
2011/11/28(月) 11:52:31.97ID:???0844nobodyさん
2011/11/28(月) 20:38:17.18ID:cgQZB7ih"yNum":{"0":"5","1":"5","2":"3","3":"3","4":"5"}}},"1":{"b":{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"5","1":"6","2":"6","3":"5","4":"5"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},
"yNum":{"0":"5","1":"5","2":"4","3":"4","4":"5"}}},"2":{"l":{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"4","1":"5","2":"5","3":"4","4":"4"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},
"yNum":{"0":"5","1":"5","2":"4","3":"4","4":"5"}}}}}
一応こんな感じのデータです。
json形式だと思うんですが、phpのほうでは
Syntax error, malformed JSON
とつれない回答です。
0846nobodyさん
2011/11/28(月) 21:16:33.29ID:cgQZB7ihデコードの仕方が悪いのでしょうか??
できればやり方を教えてください。
0847nobodyさん
2011/11/28(月) 22:13:12.05ID:???0848nobodyさん
2011/11/28(月) 22:14:25.01ID:???>>838はデコードできるんだろうから、環境面かもしれないよ
0849846
2011/11/28(月) 22:41:14.25ID:NxvSoLFsそれをPOSTで送ったPHPファイルで
json_decode($_POST['hidden'])
って形でやってます。hiddenで送ること自体が間違い??
それともhiddenを何かに変換しなければいけないの??
0850nobodyさん
2011/11/28(月) 23:04:04.57ID:???問題の切り分けの仕方について続けたいなら、くだ質とか、超初心者スレみたいなところでどうぞ
0851nobodyさん
2011/11/29(火) 23:04:45.51ID:gKGxmzY9同一ファイル上で変数を入れてみた結果として。
0852nobodyさん
2012/01/01(日) 16:05:26.90ID:vpch3S2xstr.match(/[0-9]*.[0-9][1-9]/g)
どこが間違っているのか教えていただけますでしょうか。
PHP Version 5.2.16です
宜しくお願い致します。
0853nobodyさん
2012/01/01(日) 17:00:46.35ID:???0854nobodyさん
2012/01/01(日) 18:04:13.68ID:Zget/7Sh本当にPHPだとすれば、あってるところのほうが少ない件
preg_match_all('/[0-9]*\.[0-9][0-9]/');
1/100の位は積極的にゼロを省かなきゃならないの?[0-9]でよくね?
あと、単なる整数とか、小数点以下3位以上の数字をどう扱いたいのかによっても変わってくる。
そもそも実際のところは「PHPで出力するHTMLに書かれたJavaScript」あたりかな?
マッチさせる文字列が数値のみであれば、
数値判定をした方がいいのでは?
文字であっても強制的に数値に変換する等が可能であれば、
かなり楽です。
0856852
2012/01/01(日) 23:42:04.11ID:???大変失礼しました。
854さんのおっしゃる通り、「PHPで出力するHTMLに書かれたJavaScript」でした。
その理解すら不十分でした。申し訳ございませんでした。
0857nobodyさん
2012/01/02(月) 17:24:24.78ID:???// 1 of 2
// 例として円周率pi
var value = "3.1415926";
var target = value;
// 小数部が無ければ、追加する
if (target.indexOf(".") < 0) {
target = target.concat(".00");
}
var integral_part_1 = 0;
if (target > 0){
integral_part_1 = Math.floor(target);
}else{
integral_part_1 = Math.ceil(target);
}
//document.write(value," の整数部は ", integral_part_1, "<br>");
0858nobodyさん
2012/01/02(月) 17:25:16.42ID:???// 2 of 2
// 小数第1位を取得
target = target - integral_part_1;
target = target * 10;
var integral_part_2 = 0;
if (target > 0){
integral_part_2 = Math.floor(target);
}else{
integral_part_2 = Math.ceil(target);
}
//document.write(value," の小数第1位部分は ", integral_part_2, "<br>");
// 小数第2位を取得
target = target - integral_part_2;
target = target * 10;
var integral_part_3 = 0;
if (target > 0){
integral_part_3 = Math.floor(target);
}else{
integral_part_3 = Math.ceil(target);
}
document.write(value," の小数第2位部分は ", integral_part_3, "<br>");
0859nobodyさん
2012/01/06(金) 21:48:56.02ID:b1y0AA6HFirefoxブラウザのスクリプトで「Google Reader NG Filter」というものがあります
これはRSS文中に特定のキーワードが一致していれば自動的に削除するものです
サンプルとしてADとPRを消す正規表現がはじめから入っています
^\W?(?:ADV?|PR)\b
こういうものです
先頭にADやPRがあれば広告を見なくてもすむわけです
これを応用して見たくないキーワードが含まれているものを消すべく
自分なりに試行錯誤しているのですが上手くいきません
文中のキーワードなので当然^は不要ですし、正規表現のサイトで勉強して改変しても
動かないのです
iPhoneとAndroidというキーワードが含まれていたら削除するという表現をお願いします
0860nobodyさん
2012/01/06(金) 23:01:27.07ID:pwr91DzE上記にマッチした上で、本文を削除する部分もサンプルからコピペしないとダメだぞ。
0861nobodyさん
2012/01/06(金) 23:25:15.04ID:???0863nobodyさん
2012/01/07(土) 00:03:18.47ID:n5aAiFGNいや少なくとも>>860の正規表現はマッチするはずなので、たとえば
1. マッチさせる対象が本文ではなくタイトルになっている
2. 削除する処理がどうにかなっている
3. その他
0864nobodyさん
2012/01/07(土) 00:05:14.52ID:???これか
http://userscripts.org/scripts/show/67840
親ルール,URL,他の条件にマッチしてないんじゃないか?
あと、大文字小文字をチェックしているとか
0865nobodyさん
2012/01/07(土) 00:56:55.41ID:???こんな枕詞はいらん。
0866nobodyさん
2012/01/13(金) 15:32:24.50ID:QW0sWV6aこれで<a hrefがない場合に限り<img srcにマッチさせてURIを取得するにはどうすればいい?
preg_match_all('/(?:(?(?=<a href)|src))="([^"]+)/si', $html, $m);
だと<a hrefがあるときは<a hrefの部分は何もマッチしなくてsrcの方がマッチするみたい
0867nobodyさん
2012/01/13(金) 21:09:54.88ID:???0869nobodyさん
2012/01/15(日) 00:11:37.39ID:???xhtmlが想定できるなら、正規表現よりxpath使った方が良いよ。
php.netにある例を改変すれば、$stringに文書が文字列化されてるとして、
$xml = new SimpleXMLElement($string);
$result = $xml->xpath('//img[name(..)!="a"]/@src');
while(list( , $node) = each($result)) {
echo $node,"\n";
}
この場合だと親要素がaではないimg要素のsrc属性ってことが
直接表現できるからね。
0870nobodyさん
2012/02/04(土) 12:29:11.76ID:???・使用言語:java
・質問内容:漢字を余すことなく拾いたい。
※漢字を拾い出す正規表現をネットで調べていたのですが、
なにが新しくて、なにが不十分で、なにが正解なのかわからなくなってしまいました。
0871nobodyさん
2012/02/04(土) 18:34:56.81ID:???0872nobodyさん
2012/02/04(土) 20:48:16.26ID:???こういうのをみつけたのですが、これで網羅されているのでしょうか。
0873nobodyさん
2012/02/05(日) 12:00:52.66ID:???ここらを見て漢字の含まれているグループを加えたらいいんじゃないかしら。拾っては困る文字があるなら
拾いたい漢字のコードポイントを列挙するしかないんじゃないかしら
「ああもう面倒 ! Unicodeに含まれる日本語で使われている漢字だけを拾う正規表現をここに書いてくんろ !」って
ことなら答えてもらえないと思うぞw
0874nobodyさん
2012/02/05(日) 13:17:26.57ID:???面倒。。。という意味ではなく、漢字を含む文章を取り上げる正規表現を探していたのですが、
調べれば調べるほど種類があり、何を明記すれば過不足なく満足な結果を得られるのか分からなくなったので
質問した次第です。
0875nobodyさん
2012/02/05(日) 13:35:14.15ID:???JIS X 0208またはJIS X 0213準拠の漢字コードでいいんじゃない?
JIS X 0208準拠なら http://charset.7jp.net/unicode2.html にあったよ。
0876nobodyさん
2012/02/05(日) 17:49:14.26ID:???ありがとうございます。[亜-腕弌-熙]に加えて[�\-�K]もあるようですが、
\p{InCJKUnifiedIdeographs} または[一-龠]とは比べて量が異なるのか否か
使ってはいけないのかどうなのか、教えていただけると嬉しいです。
ちなみにwindows7、Microsoft(R) Office IME 2007 辞書ツール を使っています。
0877nobodyさん
2012/02/05(日) 19:33:01.78ID:???コード表から検索すればすぐわかると思うんだけど…。
"一" で検索すれば 4e00 にあり、"龠" で検索すれば 9fa0 にあることがわかる。
\p{InCJKUnifiedIdeographs} は実装に依存するからJavaの仕様書を読んで、としか。
使ってはいけない、なんて判断指標もなしに判断できるわけがない。
0878nobodyさん
2012/02/05(日) 19:41:04.69ID:???http://java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html
0879nobodyさん
2012/02/05(日) 20:32:59.67ID:???返答、誠にありがとうございました。
自分の出した結論としては、\p{InCJKUnifiedIdeographs}がクラス Patternにはないこと、
亜は4E9C、�Kは9ED1にあり、一と龠の位置よりも狭いことから(並びの順序が違うので一概には言えませんが)、
[一-龠]を使うのが一番妥当と判断しました。
皆様、本当にありがとうございました。
0880nobodyさん
2012/02/17(金) 21:31:06.69ID:???文中・文末にあるABCDEをマッチさせる正規表現を教えてください。
文頭はのぞきたいです。
ネットで調べたりしたのですが、どの言葉を用いると自分の要求する答えが
見つかるのか分からなかったので書き込みしました。
また自分で調べるためにも自己解決できるようなHPを教えていただけると嬉しいです。
よろしくお願いします。
JAVAを用いています。
0882nobodyさん
2012/02/18(土) 07:45:28.55ID:???マルチラインモードONだと思います。
それぞれの文章ごとに適用したいと思っています。
追記なのですが、
ABCDEが含まれていない文章も除きたいと考えています。
よろしくお願いします。
0885nobodyさん
2012/02/22(水) 10:20:21.24ID:???ひらがな・カタカナ・アルファベット・記号で、連続ではない必ずまじりあった4文字以上の文章
を抜き出す正規表現を教えて頂けないでしょうか。よろしくお願いします。
0886nobodyさん
2012/02/22(水) 22:58:11.24ID:???その4種を用いていればまじりあいそうな。
あアs# はどうなの。
0887nobodyさん
2012/02/22(水) 23:26:26.77ID:???連続ではない必ず混じりあった4文字以上の文章とは
「ああああ」「アアアア」「aaaa」「◎◎◎◎」等連続した文章ではなく
「あアアa」とか「aaaの」とか「◎あアア」等の文章のことです。
分かりづらくすいません。
0889nobodyさん
2012/02/22(水) 23:59:54.01ID:???「ひらがなだけ」「カタカナだけ」「アルファベットだけ」「記号だけ」の文章ではないのでマッチします。
「あいうえお」はひらがなが連続しているのでマッチしないようにお願いします。
0890nobodyさん
2012/02/23(木) 00:39:32.26ID:???こんな感じ?
^(?:[a-zA-Zぁ-ゞァ-ヾ、-◯].{4,}|[a-zA-Zぁ-ゞァ-ヾ].{4,}|[a-zA-Zぁ-ゞ].{4,}|[ぁ-ゞァ-ヾ、-◯].{4,}|[ぁ-ゞァ-ヾ].{4,}|[ァ-ヾ、-◯].{4,})$
0894nobodyさん
2012/02/23(木) 09:38:55.66ID:???なので、あとは4文字以上の条件を満たすにはその並ぶところの前に2文字以上
あるか、前と後ろに1文字以上ずつあるか、後ろに2文字以上あるかのいずれか
である。
文字クラスをいちいち書くのはだるいのであ,ア,a,○で代表させると
[あアa○]{2,}あア[あアa○]*
みたいのを真ん中の文字種の順列×前と後ろの繰り返し数のパターン分だけ
つくって|で並べればOK
0895nobodyさん
2012/02/23(木) 10:34:55.79ID:???「[あアa○]{2,}あア[あアa○]*」の真ん中の「あア」の部分を
「あア」「あa」「あ○」「アあ」「アa」「ア○」「aあ」「aア」「a○」
「○あ」「○ア」「○a」の12通り作って|で並べると解釈しましたがよろしかったでしょうか。
制作本当にありがとうございました。
0896nobodyさん
2012/02/23(木) 12:00:24.74ID:???[あアa○]{2,}あア[あアa○]*
[あアa○]{1,}あア[あアa○]{1,}
[あアa○]*あア[あアa○]{2,}
…
も必要だから12×3=36通り作って並べる
0897nobodyさん
2012/02/23(木) 12:03:30.20ID:???[あアa○]{2,}(あア|あa|….)[あアa○]*
[あアa○]{1,}(あア|あa|….)[あアa○]{1,}
[あアa○]*(あア|あa|….)[あアa○]{2,}
とした方が楽だな
0899nobodyさん
2012/02/23(木) 17:00:23.37ID:???URLの置換の質問です。
(preg_replace()でやるつもり)
ttp://aa.com/index.php?(適当な文字列) 複数あり
を
ttp://aa.com/index.html
のようにしたいのですが、どのような正規表現を使ったらいいでしょうか?
よろしくお願いします。
0900nobodyさん
2012/02/23(木) 21:26:51.99ID:???検索対象
index\.php[\?]+.+$
置換文字列
index.html
URLに含まれるphpファイルが複数存在する場合、GET変数(?以降の文字列)を強制的に除去したい場合
ただし、文中のあらゆる「?」から始まる単語が検索対象となってしまう。
検索対象
[\?]+.+$
置換文字列
index.html
0901nobodyさん
2012/02/26(日) 21:16:58.77ID:???検索文字列が"manga_index[0-9]+\.html"と"manga_ban_index[0-9]+\.html"
(例:manga_index52342.htmlとmanga_ban_index2.htmlでヒット)
manga_index[0-9]+\.htmlの場合はmanga_ban_index[0-9]+\.htmlとban_を追加し
manga_ban_index[0-9]+\.htmlの場合はmanga_ban_index[0-9]+\.htmlとそのままにしたいのですがどうすればいいのでしょうか?
0902nobodyさん
2012/02/27(月) 16:13:34.47ID:???0903nobodyさん
2012/02/29(水) 06:23:11.44ID:???自分が読むスクリプト言語の参考書では特に注釈もなしにfooかbarかどちらかに当てはまるものは(?:foo|bar)と書かれますが
初心者向けの正規表現についてのサンプルなど見ると(foo|bar)が多い気がします
どういう違いなのでしょう?初歩的な質問ですがよろしくお願いします
0904nobodyさん
2012/02/29(水) 14:42:57.64ID:???()で囲むとあとから\1などで参照できます。
(?:)とするとその参照を切ることができます。
()でグループ分けをしたいけど参照はしない、というときにその設定をすると無駄がなくなります。
0905nobodyさん
2012/03/01(木) 17:23:10.26ID:???今までよくわからないで()を使っていたので
これからはもっと良いものが書けそうです、ありがとうございます
0906nobodyさん
2012/03/05(月) 00:36:21.70ID:???ざっくりした質問ですので、参考になるサイトを教えてくださる程度でも構いません。
0907906
2012/03/05(月) 00:47:40.35ID:???特殊文字というのは、ミリとかリットルとか、特殊顔文字(読み方がわかりません。ハートとか。)で使われるものです。
0909nobodyさん
2012/03/05(月) 09:22:56.91ID:???0910nobodyさん
2012/03/10(土) 02:43:47.72ID:???文字列の正規表現で
「数値と英語と . と / と hoge 以外にマッチ」
というのをやりたいのですがどうも失敗してしまいます。一発での解決方法とかあるのでしょうか?
\Dやったあとまた\Wでマッチング、その後ドットでマッチングと物凄く効率悪い方法しか思いつかなかったのですが
0911nobodyさん
2012/03/10(土) 02:56:04.76ID:???0913nobodyさん
2012/03/20(火) 19:40:54.01ID:Z+BjIxhLBがあれば削除、ただし直前がAなら削除しない、かつB単体でも削除
という表現方法はありますか?
^[A]Bだと全体で2文字あることが前提のように解釈していますが間違っていますでしょうか。
0915nobodyさん
2012/03/20(火) 20:10:18.04ID:Z+BjIxhLマッチしました。ありがとうございます。
0916nobodyさん
2012/03/21(水) 02:09:27.32ID:???↑
少し横向きの人が答えてるようで和んだ
0917nobodyさん
2012/03/21(水) 12:29:51.49ID:???[^A]?
0918nobodyさん
2012/03/26(月) 23:29:49.84ID:???[あいうえお]{3,}だと「あいう」とかにもマッチしちゃって駄目だった。
0925nobodyさん
2012/03/29(木) 12:43:34.53ID:UbmjoR9Lhttps://www.google.co.jp/search?hl=ja&safe=off&site=&source=hp&q=test&oq=test&aq=f&aqi=g10&aql=&gs_l=hp.3..0l10.1783l3806l0l4057l7l7l0l0l0l0l145l766l2j5l7l0.frgbld.
https://www.google.co.jp/search?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=n8BzT-uaHqaimQWZweD8Bw&biw=1064&bih=964&sei=ocBzT4e7FqOimQWq3IH5Bw
https://www.google.co.jp/search?q=test&hl=ja&safe=off&prmd=imvnsz&source=lnms&tbm=nws&ei=18lzT6GLE_HTmAXK8N2CCA&sa=X&oi=mode_link&ct=mode&cd=5&ved=0CBsQ_AUoBA&biw=1064&bih=931
http://maps.google.co.jp/maps?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&biw=1064&bih=964&ie=UTF-8&sa=N&tab=il
C#:
using System.Text.RegularExpressions;
text = Regex.Replace(text, @"(https?://[a-z.]+\.google\.[a-z.]+/[a-z]+\?).*?(q=[^&]*).*?(&tbm=[^&]*)?[a-zA-Z0-9-_./~*%$@:;,!?&=+#]*", "$1$2$3");
GoogleのURLをシンプル化したいのですが、上記コードだと「(&tbm=[^&]*)?」の部分が拾えません。
最後の?を取ると&tbmを含まないクエリでマッチしなくなります。
どうしたらいいでしょうか。
0926925
2012/03/29(木) 19:25:30.17ID:UbmjoR9Ltext:
https://www.google.co.jp/search?hl=ja&safe=off&site=&source=hp&q=test&oq=test&aq=f&aqi=g10&aql=&gs_l=hp.3..0l10.1783l3806l0l4057l7l7l0l0l0l0l145l766l2j5l7l0.frgbld.
https://www.google.co.jp/search?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=n8BzT-uaHqaimQWZweD8Bw&biw=1064&bih=964&sei=ocBzT4e7FqOimQWq3IH5Bw
https://www.google.co.jp/search?tbm=isch&hl=ja&source=hp&biw=1064&bih=931&q=test&gbv=2&oq=test&aq=f&aqi=g9g-r1&aql=&gs_l=img.3..0l9j0i4.2370l3015l0l3824l4l4l0l0l0l0l111l406l2j2l4l0.frgbld.
https://www.google.co.jp/search?q=test&hl=ja&safe=off&prmd=imvnsz&source=lnms&tbm=nws&ei=18lzT6GLE_HTmAXK8N2CCA&sa=X&oi=mode_link&ct=mode&cd=5&ved=0CBsQ_AUoBA&biw=1064&bih=931
http://maps.google.co.jp/maps?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&biw=1064&bih=964&ie=UTF-8&sa=N&tab=il
C#:
text = Regex.Replace(text, @"(https?://[a-z.]+\.google\.[a-z.]+/[a-z]+)(?=.*[?&](q=[^&\s]*))(?=.*[?&](tbm=[^&\s]*))?[a-zA-Z0-9-_./~*%$@:;,!?&=+#]*", "$1?$2&$3");
やりたいこと:
googleのURLのうち、「q=」と「tbm=」の2種類の変数だけ取り出して残りを削ぎ落とす。
ただし、q/tbmの登場は順不同にも対応する。
困っていること:
「tbm=」がないURLでも、置換の第3引数に「&$3」を付けているために「&」だけ付いてしまう。
三項演算子で ("$3"=="")?"":"&$3" とかやろうとしたけど最初の"$3"を展開してくれないようで挫折。
1行追加して、「最後に&だけが付いてたら取り除く」しかないでしょうか。
0927nobodyさん
2012/03/29(木) 20:25:45.43ID:???俺なら?で分割して、2個になったら2個目を&で分割して、q=とtbm=を取り出して終わるわ
0928nobodyさん
2012/03/30(金) 00:45:36.69ID:???see HttpUtility.ParseQueryString()
0929925
2012/03/30(金) 13:55:15.20ID:Wpf4JXLPC#:
text = Regex.Replace(text, @"(https?://[a-z.]+\.google\.[a-z.]+/[a-z]+)(?(?=\?tbm=)(\?(tbm=[^&\s]*).*?(&q=[^&\s]*))|((?=.*?[?&](q=[^&\s]*))(?=.*?(&tbm=[^&\s]*))?))[a-zA-Z0-9-_./~*%$@:;,!?&=+#]*", "$1?$2$3$5$6");
キャプチャ結果ではなく正規表現のほうに条件式を入れてどうにかできました。
ただし条件が複雑になると書き方がどんどん煩雑になるので拡張性はないかもしれません。
あと、どうも条件式をくくった部分で$4と$7をキャプチャ(両方とも常に空)しているようですが、
そこに(?:を足すと入れ子のカッコ内が全部キャプチャされなくなってしまったので、とりあえずこのまま。
0930nobodyさん
2012/03/30(金) 17:40:03.01ID:???0931nobodyさん
2012/04/12(木) 15:38:18.00ID:nr7fN3uJ秀丸エディタの正規表現を利用して帰ってきたエラーメールリストから
アドレスだけを抜き出したいのですがどうすればいいでしょうか?
具体的には
---------------------------
メールヘッダー
<[email protected]>
---------------------------
というテキストがあって
<[email protected]>の部分の
[email protected]のみを取り出したいと思っています
よろしくお願い致します
0932nobodyさん
2012/04/13(金) 14:15:11.85ID:???0933nobodyさん
2012/04/16(月) 12:27:42.62ID:???秀丸の正規表現スタイル判らないけど、
エディタの検索欄で特定の場所だけ抜き出すって結構大変だよ。
いっそ、perl、php、javascriptで書いた方が良いと思う
0934ゼッケン774さん@ラストコール
2012/05/09(水) 21:57:54.68ID:BzXqVbz50935nobodyさん
2012/05/10(木) 11:31:59.11ID:uA0oypVx(?:[\((][一-龠]+[\))]*)
という正規表現をした際、括弧内にひらがなが含まれてしまうのですが、
含まれない漢字のみ括弧内に存在する表現方法を教えていただけないでしょうか。
お願いします。
0936nobodyさん
2012/05/12(土) 18:10:34.44ID:???しかし、「(笑)www」とかだめだよなあ。
0937nobodyさん
2012/05/13(日) 01:45:46.19ID:???こんなスレあったのね。
0939nobodyさん
2012/05/15(火) 00:03:15.70ID:???[L] ってどういう意味なんでしょうか?
RewriteRule (.*) app/webroot/$1 [L]
0940nobodyさん
2012/05/15(火) 09:36:17.08ID:CSpkYc1K正規表現とはカンケーない。
http://net-newbie.com/trans/mod_rewrite.html#RewriteRule
0941nobodyさん
2012/05/27(日) 23:18:00.45ID:HwDNoFBJ0942nobodyさん
2012/05/28(月) 12:18:36.34ID:???0944nobodyさん
2012/05/30(水) 19:02:44.43ID:???[w|w|W]$(?![w|w|W])
では文末が必ずマッチしてしまいます。
同一文字は無理なのでしょうか。
0945nobodyさん
2012/05/30(水) 21:52:23.72ID:???0946nobodyさん
2012/06/01(金) 06:28:07.98ID:???0947nobodyさん
2012/06/01(金) 11:21:23.01ID:5OXqp69a0948nobodyさん
2012/06/02(土) 14:54:43.21ID:???0949nobodyさん
2012/06/02(土) 19:04:48.56ID:???0950nobodyさん
2012/06/03(日) 15:01:25.61ID:+b3NOtvy文字クラスの[]内で、|を使ってもor検索の意味にはならずに
|という文字にもマッチする正規表現になってしまうと思うんだけど
0952nobodyさん
2012/06/05(火) 17:29:38.47ID:???同一の連続する3つの文字のつながりが2種以上、
あああいいいううう、や
あああいいいあああいいい、などにマッチする正規表現を教えてください。
よろしくお願いします。
0953nobodyさん
2012/06/05(火) 19:13:00.94ID:???でどう?
0955nobodyさん
2012/06/06(水) 08:57:42.95ID:???954です。
>>953をつかうと、一種6文字以上になると3の倍数ごとにとそれもマッチ
してしまうのですが、それを避けることができますでしょうか。
たびたびご迷惑かけてすいません。
よろしくお願いします。
0956nobodyさん
2012/06/06(水) 11:01:47.54ID:???求めてる条件があってるのか分かんないけど
0958nobodyさん
2012/06/07(木) 23:23:40.40ID:???../../aaa
../////bbb
/asdaii/daia/aaaa
の場合に一番右の/から左側を検出するようにするにはどうすればいいですか?
../../../../
../../
../////
/asdaii/daia/
0959nobodyさん
2012/06/07(木) 23:56:12.45ID:WHczB1bW0960nobodyさん
2012/06/08(金) 10:21:58.59ID:???じゃ駄目なの?
0961959
2012/06/08(金) 11:55:23.48ID:+g+yLQod0962nobodyさん
2012/07/10(火) 01:04:31.08ID:???GMOインターネット よしかわ たくお まじでうざいんですけど。
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
GMOインターネット よしかわ たくお まじでうざいんですけど。
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
GMOインターネット よしかわ たくお まじでうざいんですけど。
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
GMOインターネット よしかわ たくお まじでうざいんですけど。
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
0964nobodyさん
2012/07/25(水) 19:18:05.52ID:???0965nobodyさん
2012/07/28(土) 09:37:57.75ID:???0966nobodyさん
2012/07/30(月) 10:55:07.56ID:???ABCDEっていう文字列かFGHIJっていう文字列が最初にあって、
後ろに数字がいくつか並んでいるという正規表現はどう書けばいいでしょうか?
orは | であらわすと思ったのですが文字列になるとどう書けばいいのかわからなかったので。。
よろしくお願い致します。
0968nobodyさん
2012/07/30(月) 13:44:19.19ID:???ありがとうございます。
\Aってどういう意味があるんでしょう?
それと()ってキャプチャする時にしか使わないと思ったんですが他に意味があるんですか?
0969nobodyさん
2012/07/31(火) 17:44:18.81ID:???>>5に正規表現関連のサイトへのリンクがあるよ。
\A 文字列先頭位置にマッチ
^ 行頭にマッチ
複行修飾子mを使ってないときは同じ意味だけど、複行マッチでは違う。
複行マッチでの改行直後で^はマッチするけど、\Aはマッチしない。
で、防衛的に文字列先頭という意味の時は\Aの方が好ましい。
カッコについてはその通りで、キャプチャするという機能もあるんだけど、
もうひとつグループ化という機能もある。例えば、(AB)+とか。これは
AB、ABAB、ABABAB、…にマッチする。ただ、キャプチャ保存の分オーバー
ヘッドとかメモリ使用量が多くなるとか効率面で問題あるのかも。
その場合、グループ化だけの機能を持つ(?:〜)が使える。なので、>>967は、
\A(?:ABCDE|FGHIJ)\d+
の方が良いのかも。
0971nobodyさん
2012/08/01(水) 23:55:05.65ID:7jlH6jTDPHP Version 5.3.14を使っています
preg_match(正規表現, $text)で$textが全角文字または半角英数字で構成されていることを
チェックしたいのですが、どうしたら良いでしょうか
記号は一切排除したいと思っています
よろしくお願いします
(以前やっていた方法 preg_match('/^w+$/u', $text)があるときから全角文字をエラーで返すようになってしまい
対応できなくなってしまいました)
0972nobodyさん
2012/08/02(木) 01:19:42.46ID:???以前やっていた方法って、
/^w+$/u
じゃなくて
/^\w+$/u
だよな?
ある時からエスケープシーケンスはUnicodeプロパティを無視するように仕様変更したはず。
これはphpが利用しているPCREがそうなったからだったと思う。
全角文字ってのはひらがな・カタカナ・漢字ってことでOKだよな?
ならこれでうまく行くはず。
/^[0-9a-zA-Z\x{3040}-\x{309F}\x{30A0}-\x{30FF}\x{4E00}-\x{9FFF}]+$/u
0973nobodyさん
2012/08/02(木) 08:26:03.28ID:???うまくいきました!
前のやり方がダメになった理由の解説までしていただいてありがとうございます
急にそんな仕様が変更されるなんて恐ろしいんですが、教えていただいたように
丁寧に作った方がいいみたいですね
ありがとうございました
0974nobodyさん
2012/08/11(土) 14:03:27.69ID:???0975nobodyさん
2012/08/23(木) 12:27:54.97ID:???0977nobodyさん
2012/09/07(金) 03:22:20.21ID:???どういうお題が出た時ですか?
1.正規表現では不可能
例・・・○○
2.正規表現で頑張ればやれるが、複雑になるからやらない。
例・・・○○
1,2の例の部分を教えて下さい。
0978nobodyさん
2012/09/07(金) 10:01:53.39ID:???できるはずだけど複雑だからやらないのは条件に否定が入るとき。
実際には何が何でも使おうとしてある場合は諦めるって言うよりは、
使って簡単にできそうなときに使うって感じかなぁ。
0980nobodyさん
2012/09/18(火) 03:34:48.70ID:8HJfmbgZ0981nobodyさん
2012/09/18(火) 08:27:00.26ID:???正規表現 Part10
http://toro.2ch.net/test/read.cgi/tech/1340383120/
レス数が950を超えています。1000を超えると書き込みができなくなります。