[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/14 11:55 / Filesize : 259 KB / Number-of Response : 938
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現道場



1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

558 名前:nobodyさん mailto:sage [2009/09/27(日) 16:41:20 ID:???]
環境は?

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

560 名前:nobodyさん mailto:sage [2009/09/27(日) 23:10:15 ID:???]
絶対正規表現だけで書かなきゃだめなの?
普通に関数作る方が現実的だと思うけど

561 名前:nobodyさん mailto:sage [2009/09/28(月) 01:47:40 ID:???]
if使って分岐させれば

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

563 名前:nobodyさん mailto:sage [2009/09/28(月) 10:18:45 ID:???]
>>555
こんなのとか?

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

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

$url = "hogehoge.com/hoge/index.php";

これならば
hogehoge.com/hogeの部分です。

お願いいたします。



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

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

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

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

566 名前:nobodyさん mailto:sage [2009/10/13(火) 11:28:58 ID:???]
>>564
parse_url使うか"/(.*)\//"

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



567 名前:565 [2009/10/13(火) 12:34:51 ID:8X+N74J6]
>>566
ありがとうございました( ^ω^)

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

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

569 名前:nobodyさん mailto:sage [2009/10/14(水) 09:18:20 ID:???]
>>568
せっかくperlでプログラム書けるんだから、

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

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

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

571 名前:nobodyさん mailto:sage [2009/10/14(水) 10:46:05 ID:???]
そりゃそのエディタの説明書に書いてあるだろ

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

573 名前:nobodyさん mailto:sage [2009/10/14(水) 17:59:48 ID:???]
いや、そのエディタに正規表現での置換機能もあるだろ、普通

574 名前:nobodyさん mailto:sage [2009/10/14(水) 18:10:49 ID:???]
置換というか補完じゃね?

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

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

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

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

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




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

Mac用テキストエディタ Jedit X / 1.0〜4.0
pc11.2ch.net/test/read.cgi/mac/1248500724/

578 名前:nobodyさん mailto:sage [2009/10/15(木) 13:12:35 ID:???]
>>576
Perlでしてみた。
そのエディタは後方参照はできるんかな?

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

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

print $str, "\n";

579 名前:578 mailto:sage [2009/10/15(木) 13:19:37 ID:???]
>>568のケースだけなら大丈夫だけど、汎用的には不具合がありそうなので取り消し

580 名前:578 mailto:sage [2009/10/15(木) 13:37:10 ID:???]
試行錯誤した結果、以下でいけそうな感じだけど、どうだろう?

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


581 名前:nobodyさん mailto:sage [2009/10/15(木) 13:51:05 ID:???]
utf-8の文字コード内にない文字を探すにはどんな感じにすればいいんでしょうか?
javascriptです。


582 名前:nobodyさん mailto:sage [2009/10/15(木) 20:38:57 ID:???]
>>568
Perlだったら。
s/<(.*?)>/(my $s = $1) =~ s{abc}{def}g; "<$s>"/ges;

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

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


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


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




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

585 名前:nobodyさん mailto:sage [2009/10/20(火) 09:19:58 ID:???]
それはキミがどのような入力を許可したいかがわからないから答えようがない

586 名前:nobodyさん mailto:sage [2009/10/23(金) 15:06:47 ID:???]
それを聞いているんじゃないのか



587 名前:nobodyさん mailto:sage [2009/10/23(金) 17:07:26 ID:???]
Linuxコマンドとか、インプットボックスって何?

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

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

589 名前:nobodyさん mailto:sage [2009/10/24(土) 18:23:59 ID:???]
<input name="cmd" type="text" value="rm -rf ." />

590 名前:nobodyさん mailto:sage [2009/10/25(日) 08:12:45 ID:???]
>>584
俺はこれからどのように生きていけばいいでしょうか?
くらいに漠然とした質問だなこりゃ。

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

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

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

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

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

593 名前:nobodyさん [2009/12/20(日) 20:33:27 ID:fe9ijwb+]
0*(\d+)

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

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

594 名前:nobodyさん mailto:sage [2009/12/20(日) 20:38:26 ID:???]
数字の並びから先頭の0を取り除いてる

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

596 名前:nobodyさん mailto:sage [2009/12/21(月) 08:18:48 ID:???]
>> 0*(\d+)
0が0個以上並んだ後に、0〜9が1個以上並ぶ。



597 名前:nobodyさん mailto:sage [2009/12/21(月) 20:42:38 ID:???]
>>592
見てないけど無理
(??{})あたり使えばいける

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

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

これを

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

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

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

599 名前:nobodyさん mailto:sage [2009/12/23(水) 23:13:19 ID:???]
$head= '';
$s=~ s/(<ul>)\s*|(<\/ul>)\s*|<li>(.*)(?:<\/li>)?\s*/$1?scalar($head.='-',''):$2?scalar(($head=substr($head,1)),''):"$head $3\n"/gei;
print $s;

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



601 名前:nobodyさん mailto:sage [2009/12/29(火) 12:06:00 ID:???]
やりたいこと自体はstr_replaceでできるだろうけどphpの正規表現がなんかおかしいな。
perlならそれで通るはずだけど。

602 名前:nobodyさん mailto:sage [2009/12/29(火) 12:38:00 ID:???]
文字列としてのエスケープと正規表現としてのエスケープは別。
'/\\/' は /\/ '/\\\/' は  /\\/ '/\\\\/' も /\\/  



603 名前:600 [2009/12/29(火) 22:52:30 ID:F3P1tBWB]
>>601-602
なるほど!!
そういうことでしたか。
ありがとうございます!

604 名前:nobodyさん mailto:sage [2009/12/30(水) 09:01:55 ID:???]
ああそうか、phpだとシングルクオートで囲んでも\はエスケープに解釈されるのか。

605 名前:nobodyさん mailto:sage [2010/01/24(日) 19:36:14 ID:???]
<a href="test.php?id=0001">あいうえお</a>
<div class="id">0001</div>
<div class="time">20100101010101</div>
<div class="name">なまえ</div>
<div class="body">コメント</div>

上記のタグがあったとして、
preg_match_all("/<a href=\"test.php\?id=0001\">(.*)/<\/div>\" style=\"display: none;\">/", $hoge, $data);
のように書くと、指定したIDのaタグ内の文字がとれるのですが、その下の<div class="id">から<div class="body">の後の</div>までのタグ、
もしくはそのタグ内の文字列を抽出したいのですがうまくいきません。
それぞれのタグは1行でつながってるものとして、複数タグの範囲内を取るのは可能なのでしょうか?



606 名前:nobodyさん mailto:sage [2010/01/24(日) 20:12:18 ID:???]
複数ならpreg_match_all()使うけど一つならpreg_match()で以下のように

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



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

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

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

609 名前:nobodyさん mailto:sage [2010/02/03(水) 12:34:08 ID:???]
先生質問です
Rewriteで動的URLを静的URLにしたいのです

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

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

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

610 名前:nobodyさん mailto:sage [2010/02/03(水) 13:22:42 ID:???]
ちょw

611 名前:nobodyさん mailto:sage [2010/03/02(火) 21:59:18 ID:???]
 

612 名前:nobodyさん mailto:sage [2010/03/02(火) 22:11:34 ID:???]
test

613 名前:nobodyさん mailto:sage [2010/03/08(月) 15:33:08 ID:???]
MySQLダンプ内の

/*------------------ここから--------------------*/
DROP TABLE IF EXISTS `table100`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `table100` (
`code1` varchar(5) default NULL,
`zip1` varchar(7) default NULL,
`address1` varchar(250) default NULL,
`address2` varchar(250) default NULL,
`div_1` varchar(1) default NULL,
`div_2` varchar(1) default NULL,
`import_date` timestamp NULL default NULL,
`rec_key1` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`rec_key1`)
) ENGINE=InnoDB AUTO_INCREMENT=121471 DEFAULT CHARSET=eucjpms;
/*!40101 SET character_set_client = @saved_cs_client */;
/*------------------ここまで--------------------*/

`table100` → `TABLE100`
`code1` → `CODE1`
など逆クォートで囲まれた小文字→大文字変換を一括で行いたいです。。
できればlinux コマンドライン、perl などでお願いします。。


614 名前:nobodyさん mailto:sage [2010/03/08(月) 18:01:54 ID:???]
たぶんs/`(\w+)`/`\U$1`/g

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

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

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

616 名前:nobodyさん mailto:sage [2010/04/11(日) 02:49:42 ID:???]
>>615
ereg って多バイト文字に対応してないんじゃないか?




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

618 名前:nobodyさん mailto:sage [2010/05/02(日) 00:32:33 ID:???]
:wink:, :lol:, :cry:, :evil:, :twisted:, :roll:, :idea:, :arrow:, :mrgreen:, :),
:-(, :!:, :?:, :oops:, :-o,:-D,8-|,8-), :??, :x:, :-P, :ase:, =:[, :ahhh:,
:star0.0:, :star0.0:, :star0.5:, :star1.0:, :!!!:, :**:,
:heart:, :!!:, :hahaha:, :chin:, :[], :|

こんな感じのスマイリーコードをマッチさせるのに、
$string = '{[:\*8=][(^:|*|a-zA-Z\-!?_\.\d\[)]*[(.*:)(.*\*)(.?)(:*[)(\])PoD\|]};
こんな感じのコードにしてみたけど、もっとスマートに出来ますか?

しかし、正規表現はパズルみたいで面白いね。

619 名前:nobodyさん mailto:sage [2010/05/02(日) 04:08:13 ID:???]
>>618
スマートさではこっちのが上だね :P
(:(wink|lol|cry|evil|twisted|roll|idea|arrow|mrgreen|\!|\?|oops|x|ase|ahhh|star0.0|star0.5|star1.0|\!\!\!|\*\*|heart|\!\!|hahaha|chin):)
|(:)|:-(|:-o|:-D|8-\||8-)|:??|:-P|=:[|:[]|:\|)

620 名前:nobodyさん mailto:sage [2010/05/02(日) 04:53:21 ID:???]
>>619
色々バグってた

my @g = $str =~ /(
(?: \:
(?: ahhh | arrow | ase | chin | cry | evil | hahaha | heart | idea | lol | mrgreen | oops | roll | star0\.0 | star0\.0 | star0\.5 | star1\.0 | twisted | wink | x | \!\!\! | \!\! | \! | \*\* | \? )
\:)
|
(?: \:-\) | \:\-\( | \:\-D | \:\-P | \:\-o | \:\?\? | \:\[\] | 8\-\| | 8\-\) | \=\:\[ )
)/gx;

621 名前:nobodyさん mailto:sage [2010/05/02(日) 10:16:16 ID:???]
>>618のだと:aaaaa:とか存在しないものまでマッチしちゃうよ?

((?:\:(?:(?:ahhh|arrow|ase|chin|cry|evil|hahaha|heart|idea|lol|mrgreen|oops|roll|star(?:0\.[05]|1\.0)|twisted|wink|x|\!{1,3}|\*{2})\:|\?[:?]|(?:\)|\[\]|\||\-[(oDP])))|(?:8\-[|)])|=\:\[)

622 名前:nobodyさん mailto:sage [2010/05/02(日) 11:44:31 ID:???]
>>619-621
そうか、未来の拡張を考えて緩くしたけど、
2バイト文字以外のブログじゃ広くマッチしすぎるって事か。。。
それじゃスマイリーコードの方に厳格なルールを...
なんって考えるのもユーザーに優しくないし。
折り合いつけるの難しいね :|



623 名前:nobodyさん mailto:sage [2010/05/02(日) 19:52:37 ID:???]
>>622
厳格さが必要でない処理が行われるというのがイメージできんのだけど、
マッチさせてどうしたいんだ?

624 名前:nobodyさん mailto:sage [2010/05/02(日) 20:21:19 ID:???]
>>623
とあるCMSで、
引用表示の時は、リンクとか画像とか取っ払う追加プログラム書いてるから。

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

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

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

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




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

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

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

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

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

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


630 名前:nobodyさん [2010/05/19(水) 16:47:15 ID:t/z/xcK5]
質問させてください!

ああああああ @ ABCD @ abcd

という文字を

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

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

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

631 名前:nobodyさん mailto:sage [2010/05/19(水) 17:44:20 ID:???]
その例にするための条件って何?
スペース @ スペース が区切りとか?

632 名前:nobodyさん [2010/05/20(木) 19:43:15 ID:avs5qFDL]
質問させてください。

<table>
<tr>
<th>名称1</th>
<td>
値1
</td>
</tr>
<tr>
<th>名称2</th>
<td>
値2
</td>
</tr>
</table>
のようなHTMLがあります。
実際には全ての改行とインデントはトリムされてます。
この値1の部分をとるにはどのような正規表現を使えば良いでしょうか?

<th>名称1</th><td>([^<]*)</td>
のように考えてましたが値1には<img>タグが入る場合があります。
<table>や<td>が入ることはありません。


633 名前:632 mailto:sage [2010/05/20(木) 19:44:24 ID:???]
途中で投稿してしまいました。

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

634 名前:nobodyさん mailto:sage [2010/05/20(木) 19:54:06 ID:???]
<th>名称1</th><td>(.*?)</td>

635 名前:nobodyさん [2010/05/20(木) 20:40:36 ID:a5arSWsA]
www19.atpages.jp/imagelinkget/get.php?t=v&u=www.phpbook.jp/regexp/ini/img/p1-1.png
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&amp;src=regex1.png
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&amp;src=regex8.png


636 名前:nobodyさん mailto:sage [2010/05/20(木) 21:13:11 ID:???]
<th>名称1</th><td>(値1|<img>)</td>



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

638 名前:nobodyさん mailto:sage [2010/05/24(月) 12:25:48 ID:???]
便乗だけど
<table>
<tr>
<th>名称1</th>
<td class="abc">
値1
</td>
</tr>
<tr>
<th>名称2</th>
<td class="def">
値2
</td>
</tr>
...あと何個か続く

この場合 <th>名称1</th><td .*>(.*?)</td> にしたのですが
何故かうまく 値1 だけ取得できません
どうも .*で余計なものも取得しているようです
どう書けばいいでしょうか
当方JKです。



639 名前:nobodyさん mailto:sage [2010/05/24(月) 14:40:31 ID:???]
<th>名称1</th><td .*?>(.*?)</td>

640 名前:nobodyさん mailto:sage [2010/06/10(木) 09:40:35 ID:???]
現在、HTMLのimgタグを使って「/img/jpg/」ディレクトリにある画像ファイルを複数表示しています。

例)
<img src="/img/jpg/1111.jpg" >
<img src="/img/jpg/mm2222.jpg" >
<img src="/img/jpg/kkkkk3333.jpg" >

これをそれぞれ、以下のように置換したいと考えています。
例)
<a href="www.xxxxx.jp/1111.jpg"><img src="/img/jpg/1111.jpg" width="240px"></a>
<a href="www.xxxxx.jp/mm2222.jpg"><img src="/img/jpg/mm2222.jpg" width="240px"></a>
<a href="www.xxxxx.jp/kkkkk3333.jpg"><img src="/img/jpg/kkkkk3333.jpg" width="240px"></a>

imgタグをリンクタグで囲むのですが、リンク先URLには元々の画像ファイル名が使われています。また、imgタグには「width="240px"」が付加されています。

このような置換をPHP5で行うには、どのような正規表現を使用したらよろしいでしょうか。
宜しくお願い致します。

641 名前:nobodyさん mailto:sage [2010/06/10(木) 16:43:49 ID:???]
素人です。

s/<img src="\/img\/jpg\/(.+)\.jpg" >/<a href="http:\/\/www\.xxxxx\.jp\/\1\.jpg"><img src="\/img\/jpg\/\1\.jpg" width="240px"><\/a>/;

こんな感じになるのかと思いますがどうでしょうか?

642 名前:nobodyさん [2010/07/01(木) 16:19:28 ID:qVVuQ4W9]
Perl 5.8 /5.10で使用します。

HTMLソースの中のimgタグのファイル名を正規表現などで一括で変えたいです。

<img src="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">

こんな感じです。どの様にしたらよいでしょうか。

643 名前:nobodyさん mailto:sage [2010/07/01(木) 17:11:08 ID:???]
>>642
s|(<img[^>]* src=")[^"]*/([^/"]+"[^>]*>)|$1/images/$2|ig

644 名前:nobodyさん [2010/09/13(月) 00:25:36 ID:BUnMGSIw]
php5.3です。
%でかこまれた(%test%)文字をpreg_matchでヒットさせたいんですが、どういう文字列にすればいいんでしょうか?
ちなみに、'/%%([^%])%%/'ではだめでした。



645 名前:nobodyさん mailto:sage [2010/09/13(月) 00:27:10 ID:???]
間違えた。
'/%%([^%]*)%%/'です。

646 名前:nobodyさん mailto:sage [2010/09/13(月) 00:33:05 ID:???]
%%test%% と書かれてたら %test% がキャプチャするようにしたいのか
%test% と書かれてたら test をキャプチャするのかどっち?

後者だと勝手に決め付ける。'/%([^%]+)%/'



647 名前:nobodyさん mailto:sage [2010/09/23(木) 15:56:42 ID:???]
find . -type f -iregex ".*[^html|htm|gif|jpg|jpeg|png|css|js|swf|xml]" -print

でウェブ関連以外のファイルを抜き出しいのだけれど、
なぜか在るはずの【*.pdf】が出てきません・・・。
書き方が不味いのでしょうか。


648 名前:nobodyさん mailto:sage [2010/09/24(金) 17:04:12 ID:???]
[^html|htm|gif|jpg|jpeg|png|css|js|swf|xml] = [^cefghijlmnpstwx|]

649 名前:647 mailto:sage [2010/09/24(金) 20:33:46 ID:???]
>648

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使って短くするにはどう書けばいいんのでしょうか。

650 名前:nobodyさん [2010/09/26(日) 06:42:01 ID:JLVe9rj0]
Firebugで"aaaaaaaaaaaaaaaaaaaa".match(/(a)/)とすると2つしかヒットしないんですが、
全部のaをヒットさせるにはどうしたらいいんでしょうか?

651 名前:nobodyさん mailto:sage [2010/09/26(日) 22:12:08 ID:???]
>>650
コールバック使うときは1つめの引数は全体だよ
"aaaaaaaaaaaaaa".match(/(a)/g);
これでいいと思う

652 名前:nobodyさん mailto:sage [2010/10/03(日) 17:27:45 ID:???]
『a*a/a/*/a*a/a/*/a*a/a*a/a/*/a*a/a/*/a*a/a*a/a/*/a*a/a/*/a*a/a*a/a/*/a*a/a/*/a*a/a』

この文字列の
/* ~~~ */ で囲まれた部分それぞれを全て正規表現で抜き出せるのですか?

653 名前:652 mailto:sage [2010/10/03(日) 17:28:53 ID:???]
すいません。使用言語はPHP5.1.6です。

654 名前:652 mailto:sage [2010/10/03(日) 17:53:37 ID:???]
事故解決しました。

655 名前:nobodyさん mailto:sage [2010/10/20(水) 18:27:58 ID:???]
「/index.php/blog/new/id/17」
から、phpファイル名(/index.php)のみ削除するにはどうすればいいでしょうか?
ファイル名は変わることがあります。

656 名前:nobodyさん mailto:sage [2010/10/20(水) 22:18:19 ID:???]
s{/[^/]+?\.php}{}



657 名前:655 mailto:sage [2010/10/21(木) 01:50:09 ID:???]
PHPのpreg_replace()に渡してみたのですが、

>Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in
と言われてしまいます。。。

658 名前:656 mailto:sage [2010/10/21(木) 02:29:25 ID:???]
どういう引数を渡したのかちょっと知りたい。

<?php
$str = '/index.php/blog/new/id/17';

// $pattern = '/\/[^\/]+?\.php/'; // デリミタが / のときはエスケープ
$pattern = '{/[^/]+?\.php}'; // デリミタは { と }
$replace = '';

echo preg_replace($pattern, $replace, $str);
?>

659 名前:nobodyさん [2010/11/13(土) 19:09:08 ID:peMm7xtt]
PHPで、例えば

こう言った文章を考えるのは、たのしい。
わたしは、「こんにちは」と言いました。
「この文章は、なかなか面白いですね。とても正確な正規表現を考える必要があるんです。」
「では、そんな正規表現をどうやって見つけるのでしょうか?そうだ、質問してみましょうよ!。」
「なるほど?。それは面白いアイディアだ。」と、もう一人は言った。

という文章があったときに、

"こう言った文章を考えるのは、たのしい。",
"わたしは、","「こんにちは」","と言いました。",
"「この文章は、なかなか面白いですね。","とても正確な正規表現を考える必要があるんです。」",
"「では、そんな正規表現をどうやって見つけるのでしょうか?","そうだ、質問してみましょうよ!。」",
"「なるほど?。","それは面白いアイディアだ。」","と、もう一人は言った。"

という感じに分割して配列にしたいと思っています。
現在使っている正規表現は
$contents = array();
preg_match_all('/.*?。|.*?「/m',$content,$contents);
という感じで書いてみました。
$contentがもとの文章で、$contentsが新しく得る配列です。
どうも複雑でどうしたら良いのかわからないので質問させていただきます。よろしくお願いします。

660 名前:nobodyさん mailto:sage [2010/11/14(日) 09:26:59 ID:???]
一度にやろうとしないで分けてやればいいと思うよ

661 名前:nobodyさん [2010/11/14(日) 22:54:16 ID:xJLLsuw0]
正規表現での重複行の削除について
質問させてください

みかん   みかん
みかん   (空白行)
りんご → りんご
なし    なし
なし    (空白行)
なし    (空白行)
かき    かき

というかんじで
重複行は空白のままで残したいのですが
どうすべきでしょうか?

662 名前:nobodyさん mailto:sage [2010/11/14(日) 22:55:28 ID:???]
スクリプト言語でやったほうが楽じゃね?

663 名前:nobodyさん [2010/11/14(日) 23:35:35 ID:xJLLsuw0]
できればこんなかんじで
エディタの検索置換でやりたいです


d.hatena.ne.jp/seuzo/20080531/1212228668

664 名前:nobodyさん mailto:sage [2010/11/15(月) 00:12:15 ID:???]
でこぽん
みかん
りんご
りんご
みかん
みかん
りんご
でこぽん

こんな風に離れた行に重複がある場合はどうすんだろ?ソート済みなのかな。

665 名前:nobodyさん [2010/11/15(月) 00:48:49 ID:AfSBC14n]
エクセルでソートしてあるます


666 名前:nobodyさん [2010/12/06(月) 23:51:24 ID:k5Tua1Td]
メールアドレスが正しいかマッチング。
ただし、@gmail.com、@googlemail.com、@livedoor.comの場合は
@の前に「+」「.」が含まれている場合は除外する。
これって正規表現1発でできたりしますか?



667 名前:nobodyさん mailto:sage [2010/12/06(月) 23:53:00 ID:???]
yes

668 名前:nobodyさん mailto:sage [2010/12/08(水) 14:11:59 ID:???]
メールアドレスの妥当性の判定はどのぐらい厳密にやるのだろう

669 名前:nobodyさん [2010/12/20(月) 16:51:11 ID:Qb400/Ia]
php5で、tableタグ内の改行(<br />)を全て削除したいのです。
どうしたら良いんでしょう。

●置換前
<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>

670 名前:nobodyさん mailto:sage [2010/12/20(月) 20:03:43 ID:???]
>>669
str_replaceでおk

671 名前:nobodyさん mailto:sage [2010/12/20(月) 20:48:53 ID:???]
普通はstrip_tagsじゃね?

672 名前:nobodyさん mailto:sage [2010/12/21(火) 08:13:01 ID:???]
テーブル外のbrは削除したくないんだろ

673 名前:nobodyさん mailto:sage [2010/12/24(金) 08:47:52 ID:???]
この手のことをやりたい人は沢山いると思うので
散々既出の可能性がありますが、
参考ページでも構いませんので教えてください

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 -"

正規表現はド素人でネットで検索しながら書いたので
まずい部分も多いと思いますがそれは置いといて、
本題はダブルコーテーションで括られた文字列内は
置換したくないのですが、何か方法はありますか?

674 名前:nobodyさん mailto:sage [2010/12/29(水) 07:28:15 ID:???]
性器表現難しいよね

675 名前:nobodyさん [2011/01/06(木) 22:08:59 ID:y0rS3N6j]
質問です。PHP5.3でpreg_matchを使っているのですが、例えば
「次章(第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の中に、なぜか「第」という文字が拾われてきません。
これは何故なんでしょうか??
もし理由が分かる方がいらっしゃったら、お教え願います。

676 名前:nobodyさん mailto:sage [2011/01/07(金) 03:55:37 ID:???]
性器表現で痴漢する



677 名前:nobodyさん mailto:sage [2011/01/07(金) 03:58:44 ID:???]
$text = '次章(第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては';
$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

678 名前:nobodyさん mailto:sage [2011/01/07(金) 08:16:20 ID:???]
[マルチバイト] この時点でおかしいやろ

679 名前:nobodyさん mailto:sage [2011/01/07(金) 08:35:43 ID:???]
u 修飾子つきじゃないのかな?
[第]* は量指定子も含めてどうかと思うけどね。

680 名前:nobodyさん mailto:sage [2011/01/07(金) 11:13:33 ID:???]
PHPのPerl互換正規表現で、連続した文字を判定したい(3文字以上)
下のではだめ?
preg_match("/(.)\1{3,}/", $hoge)
例→AAA、bbb、111、あああ他なら引っかかるようにしたい、ということ

681 名前:nobodyさん mailto:sage [2011/01/07(金) 11:42:34 ID:???]
>>680
考え方はいいけど、最初の(.)で1文字食われるから繰り返し回数が
1回多い。それじゃ4文字以上になっちゃうぞ。

682 名前:nobodyさん mailto:sage [2011/01/07(金) 12:06:39 ID:???]
>>681
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って表現できない?

683 名前:nobodyさん mailto:sage [2011/01/07(金) 12:28:18 ID:???]
"..."の中だから¥¥1と書かないと駄目だろ。


684 名前:nobodyさん mailto:sage [2011/01/07(金) 13:39:43 ID:???]
$hoge = 'aaaa';
echo preg_match('/(.)\1{3,}/', $hoge) ? 'OK' : 'NG'; // OK

"\\1" か '\1' だよね。

685 名前:680 mailto:sage [2011/01/07(金) 14:21:39 ID:???]
あたしばかよね・・・
ありがとうございました
uも付けて完動です

686 名前:675 [2011/01/08(土) 22:00:49 ID:GTa36OYO]
返事遅くなりまして申し訳ありません。
/uを追加したら見事に機能しました。
というか、今までさんざん正規表現を日本語に適用していたのですが、/uのことを全く知りませんでした。
お恥ずかしい限りです。

お教えいただき、ありがとうございました。



687 名前:675 [2011/01/17(月) 22:15:13 ID: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>';
?>
こんな感じです。
もし分かる方がいらっしゃったら、お教え願います。

688 名前:nobodyさん mailto:sage [2011/01/17(月) 22:47:22 ID:???]
問題を切り分けてから質問してくれ

689 名前:マッチした文字列を小文字にしたい [2011/01/17(月) 22:59:46 ID:e71m2/yA]
PHPにおける正規表現に関する質問です。
下のサンプルプログラムでは$3が両方とも大文字の「US」になりますが、
最初の$3だけを小文字の「us」にする方法があれば教えてください。
OSはWindows、PHPは5.3です。

元の文字列の例
Country: US

変換後に得たい文字列の例
Country: <a href="ja.wikipedia.org/wiki/.us">US</a>

サンプルプログラム
<?php
$result = '';
$text = 'Country: US';
$pattern = '/(Country):(\s+)([A-Z]{2})/i';
$replace = "$1:$2<a href=\"ja.wikipedia.org/wiki/.$3\">$3</a>";

$result = preg_replace($pattern, $replace, $text);

echo $result;
?>

690 名前:nobodyさん mailto:sage [2011/01/17(月) 23:51:56 ID:???]
手元のエディタでは\Lでできるんだけどな
PHPで使える置換パターンが良く分からない
e修飾子つけちゃうとか

691 名前:689 mailto:sage [2011/01/18(火) 01:02:24 ID:???]
そうですね。Perlだと\lで次の文字が小文字になるとかあるみたいですが、
PHPにはないんですかね?

ほかの方法でもかまいませんので、
引き続き、回答をお待ちしております。

692 名前:nobodyさん mailto:sage [2011/01/18(火) 01:17:36 ID:???]
>>689
$pattern = '/(Country):(\s+)([A-Z]{2})/ie';
$replace = '"$1:$2<a href=\"ja.wikipedia.org/wiki/." .strtolower($3). "\">$3</a>"';

書いてみたら引用符がすっきりしない感じになってしまった。

693 名前:nobodyさん [2011/01/18(火) 19:32:41 ID:sm74ERjN]
あの正規表現ですが、今までうまくつかえていないというか下手
です。で、勉強しようと思うのですが、
反復学習ソフト付き 正規表現書き方ドリル
これいいですかね?
オライリーとどっちがいいかなって思うんですけど。


694 名前:nobodyさん mailto:sage [2011/01/18(火) 22:59:06 ID:???]
>>693
Webでおk

695 名前:nobodyさん mailto:sage [2011/01/19(水) 10:36:15 ID:???]
>>693
良いと思うよ。
オライリーも良い本だけど、ひととおり基礎ができてからで良いと思う。

696 名前:689 mailto:sage [2011/01/19(水) 21:20:53 ID:???]
>>692
できました。
ただ、「DO」というドミニカの国別コードの時、予約語と重なってエラーになったので、
ダブルクォートにしました。

$pattern = '/(Country):(\s+)([A-Z]{2})/ie';
$replace = '"$1:$2<a href=\"ja.wikipedia.org/wiki/." .strtolower("$3"). "\">$3</a>"';

どうもありがとうございました。



697 名前:nobodyさん mailto:sage [2011/01/19(水) 21:48:50 ID:???]
>>690でe修飾子と言っているのに


698 名前:nobodyさん [2011/01/19(水) 23:40:21 ID:zqG6AlFK]
抽象的な質問で申し訳ないんですが、本の話が出たのでついでに伺いたいんですが。
今まで表計算ソフトやデータベースソフトなど普通に習得し、
更に興味が出てきたのでMySQLとPHPを使ってプログラミングしたり、
apacheやPostFixなども何とか使えるようになり、何となく分かってきた感じがしてるのですが、
正規表現に関しては、未だに「どうにか使っているけど、理解は出来ていない感じ」がします。
とりあえずやってみて、だめで違う手を試してみたりして....
まるで別種類な考え方が必要な気がします。

なので質問なのですが、正規表現を理解するのに一番良い本とか、
正規表現について「目から鱗が落ちた!!一皮むけた!!理解が深まった」
って思えるような本とかあったら、紹介いただけないでしょうか??

それとも忍耐強く、失敗しては考える繰り返しでなければ、習得できない物なのでしょうか??
当方今年で三十路なので、頭が固くなってきてるのかもしれませんが、いまいち頭にしみ込みにくくなってるような気がしてます。
もしよろしければお教え願います。

699 名前:nobodyさん mailto:sage [2011/01/20(木) 00:05:42 ID:???]
>>698
何となく分かった気になっている時は何も分かってないからもっと簡単なのからやれ

700 名前:693 [2011/01/20(木) 01:01:52 ID:973KUxXQ]
>>695
ありがとうございます。
基礎から勉強したいので、買います。


701 名前:nobodyさん mailto:sage [2011/01/20(木) 13:16:18 ID:???]
正規表現のスレ (プログラム板や UNIX 板にもある) のログを見て、
質問のお題を片っ端から解いていくと、結構良い練習になると思う。

702 名前:nobodyさん [2011/01/20(木) 23:13:37 ID:LxK6uyro]
次の正規表現でhogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換しております。

RewriteRule ^/hoge(.*)/(.*).html$ example.com/hoge/$1/i/$2.html [L]



下記のような場合は問題ないのですが

example.com/hoge → example.com/hoge/i/
example.com/hoge/saitama/2011/01/index.html → example.com/hoge/saitama/2011/01/i/index.html



↓のようにhogeで始まるディレクトリまでも変換されてしまいます。
example.com/hogehoge/kankeinai.html

hogeフォルダ配下のみ変換されるようにするには、どうしたらいいでしょうか?

環境は
CentOS5
Apache2


703 名前:nobodyさん mailto:sage [2011/01/21(金) 00:15:43 ID:???]
/hoge/(.*)〜にすればいいじゃん

704 名前:nobodyさん mailto:sage [2011/01/21(金) 18:26:53 ID:???]
>>698
頭の良い人だとまた違うのかもしれないけど、
我々のような凡人は繰り返しやって経験値を積むしかないかなあ、って気がする。
で、何か読んで一つ山を越えたいなら、現状ではオライリー本の一択しか無いと思う。

705 名前:nobodyさん mailto:sage [2011/02/10(木) 13:57:44 ID:???]
対象の文字列にハングル文字が含まれるかどうかを判断したいのですが
よい方法が思い浮かびません。
javascriptです。

706 名前:nobodyさん [2011/02/27(日) 08:37:54.94 ID:GexZY7hJ]
1. preg_match('/[\(]{2}?(.*?)\:(.*?)[\)]{2}?/', $text, $match)
この変換を変数展開で実行したいのですが、
正規表現で使える記号の変数展開のやりかたを教えてください。

2.$exprString = '/[\(]{2}?(.*?)\:(.*?)[\)]{2}?/';
  preg_match("/$exprString/", $text, $match);
これだとうまく行きません。



707 名前:nobodyさん mailto:sage [2011/02/27(日) 09:01:28.34 ID:???]
"/$exprString/"を展開したら"//[\(]{2}?(.*?)\:(.*?)[\)]{2}?//"になるぜ?

708 名前:706 mailto:sage [2011/02/27(日) 09:23:38.46 ID:???]
>>707
解決しました。全く気がつかずに悩んでました。ありがとうございます。

709 名前:nobodyさん [2011/02/27(日) 16:36:06.93 ID:KOnmSusx]
反復学習ソフト付き 正規表現書き方ドリル
やりました。
非常に勉強になりました。楽しかったし、なんかパズルをといている
みたいで、ただ残念ながらソフトはうごきませんでした。


710 名前:nobodyさん [2011/03/03(木) 19:14:51.88 ID:v/2VFVai]
以下はqdmail_receiver.phpというメール受信のプログラムの一部で、
添付ファイルのファイル名を取得している部分になります。

しかし、ファイル名に半角スペースがあると、半角スペースで文字列が切れてしまう
という現象があります。

半角スペースで途切れないようにするのはどのようにすればよいのでしょうか?


preg_match('/name\s*=\s*"?([^"\s\r\n]+)"?\r?\n?/is',$header['content-type'] , $matches )


よろしくお願いします。


711 名前:nobodyさん mailto:sage [2011/03/03(木) 20:18:10.39 ID:???]
[^"\s\r\n]+
"でもスペースでも改行でもない文字が続く限り〜
って自分で書いてるやん

712 名前:nobodyさん mailto:sage [2011/03/04(金) 10:24:26.15 ID:???]
ここで聞いてるくらいだから [^"\r\n]+ こう書き換えれって教えないと

713 名前:710 [2011/03/04(金) 13:32:58.16 ID:8WvXj1g+]
>>712
ありがとうございます。

うまくいきました。

<(_ _)>

714 名前:712 mailto:sage [2011/03/04(金) 16:50:29.72 ID:???]
うまくいったならいいけど、ファイル名抜き出し部分の後続がすべて?だから
もし"で囲まれてないのが来たらアウトだけどな

/name=(?:"([^"\r\n]+)"|([^\s\r\n]+))/i でマッチさせて
if (empty($matches[1])) $matches[1] = $matches[2];
みたいにしたほうが手堅いかもな

715 名前:nobodyさん mailto:sage [2011/03/06(日) 18:00:58.46 ID:???]
【言語】PHP5.3
【OS】XP

自前のBBSをもっていますが、最近、レス番号にリンクをつけたく思い、「>>1」のようなレスをpreg_matchでリンクタグ生成しようと試みました。
preg_match('/>>[0-9]+/',$text,$link);
preg_replace('/>>[0-9]+/','<a href="#">'.$link[$n].'</a>',$text);
この関数では最初にマッチするレスしか変換できませんでした。
何かよい案がありましたらお願いします。

716 名前:nobodyさん mailto:sage [2011/03/08(火) 00:32:23.62 ID:???]
preg_match_all 使えば?



717 名前:nobodyさん [2011/06/04(土) 18:19:07.23 ID:GeFi3irL]
<html>......<div class="list">画像リスト<br>1枚目<br><img src="example.com/aaa.jpg"><br>
2枚目<br><img src="example.com/bbb.jpg"><br>
3枚目<br><img src="example.com/ccc.jpg"><br>もっと見る<br></div>........</html>

これで<div class="list">と</div>の間のアドレスだけ抜き出すのってどうやりますか?
........の中にも画像アドレスがあります。そっちはマッチさせないようにしたい。

preg_match_all("/list\".+?src=\"(.+)\".+</div>/", $html, $m);

718 名前:nobodyさん mailto:sage [2011/06/04(土) 19:29:38.67 ID:???]
2段階に分けるべし

719 名前:nobodyさん mailto:sage [2011/06/04(土) 19:32:39.30 ID:???]
>>717
なんでそれを正規表現でやろうとするのかがわからん。視野狭窄か。

720 名前:nobodyさん mailto:sage [2011/06/04(土) 22:11:24.15 ID:???]
>>717
php.net/manual/ja/function.preg-replace-callback.php

721 名前: 忍法帖【Lv=4,xxxP】 mailto:sage [2011/06/04(土) 22:38:07.91 ID:???]
質問者が言語を指定していない時点でお察し下さいレベル。

722 名前:nobodyさん mailto:sage [2011/06/04(土) 23:04:45.68 ID:???]
preg_match_all は PHP の関数

723 名前:nobodyさん [2011/06/05(日) 14:02:49.98 ID:uEzVCQDA]
>>717
正規表現一発でできそうな気がするんですが、無理ですか?

固定単語--- この中を検索 ---固定単語

こんな場面てよくあるような

724 名前:nobodyさん mailto:sage [2011/06/06(月) 08:01:30.97 ID:???]
>>709
win7HP?

725 名前:nobodyさん [2011/06/16(木) 23:36:27.10 ID:SYj2PUn3]
phpでpreg使っています。
あるファイル内の
<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でマッチしません。
どうしたら出来るのでしょうか??

どなたかお教えください。お願いします。

726 名前:nobodyさん mailto:sage [2011/06/16(木) 23:41:03.98 ID:???]
preg_matchで$exchangeArr[1]を削除するためpreg_replace?
日本語でおk



727 名前:nobodyさん [2011/06/16(木) 23:44:03.44 ID:SYj2PUn3]
<div align = "center"> を削除するため
でお願いします。

728 名前:nobodyさん mailto:sage [2011/06/16(木) 23:45:43.17 ID:???]
preg_matchとpreg_replaceを併用する必要があんの?

729 名前:nobodyさん [2011/06/16(木) 23:52:34.42 ID:SYj2PUn3]
<td....>が様々な形をとっているため、まずはそれらを取り出す必要があるかと思い、そうしてます。

<td....><div...>という形で、<td...>も<div...>のそれぞれの...が、様々な形をとっているけど、<td...>だけをきれいに残したいのです。

ただ、<div...>だけのもの(前に<td...>がついていない)は変換したくないのです。
こんな説明でわかります?

730 名前:nobodyさん mailto:sage [2011/06/16(木) 23:56:08.62 ID:???]
正規表現を細分化して問題の切り分けしてみるといいと思うよ

731 名前:nobodyさん mailto:sage [2011/06/18(土) 14:34:02.52 ID:???]
>>725,729
その様々な形を正規表現で指定すればいいと思うけどね。

$string = '<td width="71%" valign="top" align="center"><div align = "center">';
$string = preg_replace('/(<td [^>]+><div) [^>]+/', '$1', $string);

732 名前:nobodyさん mailto:sage [2011/06/18(土) 14:41:26.83 ID:???]
閉じタグのことは無視かい

733 名前:731 mailto:sage [2011/06/18(土) 17:07:20.38 ID:???]
>>732
それは俺も思った。
divがネストしていたら対応関係がおかしくなるはずなんで開始タグは残すべきだと思うな。

734 名前:nobodyさん [2011/06/30(木) 00:52:32.34 ID:hWRw8zI0]
PHP5.3のpreg_replaceで
/<td[^>]+><div[^>]+/とかで正規表現をやっても、全く変更されません。
preg_matchでやってみると<td[^>]+>までならmatchするけど、「<」以降を入れると、全く引っかかってきません。

何か思い当たること、ないでしょうか?

735 名前:nobodyさん mailto:sage [2011/06/30(木) 06:05:38.15 ID:???]
対象としている文字列にその正規表現にマッチする部分が存在しない

736 名前:nobodyさん mailto:sage [2011/06/30(木) 07:23:46.62 ID:???]
何か勘違いしているとか見落としているとしか思えない



737 名前:nobodyさん mailto:sage [2011/06/30(木) 21:31:52.67 ID:???]
量指定子を'+'から'*'にしてみたらマッチしました、みたいな話な気がしてならない。

738 名前:734 [2011/07/03(日) 22:32:36.09 ID:8QAPbG3u]
どうやら正規表現は問題なかったみたいです。
phpでファイルをfopenで読み込んで、
while ($x = fgets($fp,1092)) {...}で変換をさせているんだけど、
<td..>部分と<div..>部分の間に改行が入っているから、変換できないらしい。
どうしたらいいでしょう??

739 名前:nobodyさん mailto:sage [2011/07/03(日) 22:39:11.31 ID:???]
工夫すれば?

740 名前:nobodyさん [2011/07/03(日) 23:37:07.72 ID:ypX399q3]
$string = preg_replace('/<div align = \"center\"> /', '', $string);
$string = preg_replace('/<\/div>/', '', $string);
か、

$string = preg_replace('/<div(.*?)> /', '', $string);
$string = preg_replace('/<\/div>/', '', $string);
じゃねえの

741 名前:734 [2011/07/03(日) 23:45:10.46 ID:8QAPbG3u]
全てのdivを削除したい訳でなく、<td....></td>間にある<div></div>を削除したいのです。
<td....></td>間にあるものは削除して、それ以外は改行したいのです。

742 名前:nobodyさん mailto:sage [2011/07/05(火) 00:46:35.42 ID:???]
preg_replaceを連打して取りたいのだけ取ればええやん

743 名前:nobodyさん mailto:sage [2011/07/16(土) 18:02:18.22 ID:???]
http://から最初の空白までを抽出する正規表現はどうなりますか?

744 名前:nobodyさん mailto:sage [2011/07/16(土) 22:16:17.55 ID:???]
/http:\/\/[^ ]* /

745 名前:nobodyさん [2011/07/23(土) 20:12:09.44 ID:lXdqpzgT]
Aの繰り返しはA+とかA{m,n}でマッチできますが、
繰り返された個数を元にAAAAAをA*5などに置換する「うまい」方法はあるでしょうか。

言語はとりあえずJavaScriptで考えています。
replace(/A+/g, 'A*'); //←ここから進まない。

746 名前:nobodyさん mailto:sage [2011/07/23(土) 20:22:41.87 ID:???]
>>745
正規表現にはないのでJavaScriptスレへ



747 名前:nobodyさん [2011/07/23(土) 20:34:12.11 ID:lXdqpzgT]
>>746
ありがとうございます。以下で質問し直しました。
hibari.2ch.net/test/read.cgi/hp/1311096825/90n

748 名前:nobodyさん [2011/07/24(日) 19:06:14.31 ID:/DoWXp9n]
「次の人」または「前の人」という文字列を文章内から拾う場合、どの様な書き方が良いのでしょうか??
[次の人 | 前の人] だと「の」一文字だけでも拾ってしまいます…

749 名前:nobodyさん mailto:sage [2011/07/24(日) 21:04:07.81 ID:???]
"[abc]"は「『a』か『b』か『c』にマッチ」だぞ…。
君の書いた正規表現は「『次』か『前』か『の』か『人』か『|』か『 』にマッチ」だ。

多分"(次の人|前の人)"みたいなことがしたかったんだろうけど、
"[次前]の人"でいいと思う。

750 名前:nobodyさん mailto:sage [2011/07/24(日) 21:07:51.65 ID:???]
あと、似たようなのでありがちなのが
"[^hogehoge]"で文字列の否定を指定したつもりになっちゃう人。

もちろん間違い。念の為。

751 名前:nobodyさん [2011/07/24(日) 22:38:19.38 ID:X7IDpmYo]
>>750
では何が正しいのでしょうか?

752 名前:nobodyさん mailto:sage [2011/07/24(日) 22:54:58.14 ID:???]
>>751
[次前]の人

753 名前:nobodyさん mailto:sage [2011/07/24(日) 23:02:35.46 ID:???]
あ、とんちんかんだった。
文字列の否定は
(?!.*文字列.*).*
みたいのかなぁ

754 名前:nobodyさん [2011/07/25(月) 21:55:36.12 ID:RVWZInKC]
formからの情報を編集しているんですがケータイ絵文字(5社の)が入ったら消すというのはできますか?

PHP5です。

755 名前:nobodyさん mailto:sage [2011/07/25(月) 22:46:11.52 ID:???]
>>754
3社だけど、
Emo PHP携帯絵文字ライブラリ
gard.no-ip.info/emo/readme/study/reg.html

756 名前:nobodyさん [2011/07/25(月) 23:06:55.26 ID:RVWZInKC]
>>754

ありがとうございました



757 名前:nobodyさん [2011/07/27(水) 20:41:33.29 ID:PkulA4Dr]
40過ぎたオッサンが、訓練校出てWebで独立するとか寝言いってますwwwwww
サラリーマンに、無理だと指摘され発狂中wwww



Webデザインの基金訓練を受講してる人 Part2
yuzuru.2ch.net/test/read.cgi/dame/1308059991

>>505

俺は40代で基金訓練受けて、これから独立しようと考えてるがな。
まぁ若干経験あるからその方面での話だけど。
基金訓練は単に「バナーくらい作れますよ」って言うだけのために受けた。

30代ならデジハリにもいっぱいいるぞ、余裕だろ。
ちゃんとした社会人経験があればだが。

758 名前:nobodyさん mailto:sage [2011/07/30(土) 14:00:39.72 ID:???]
>>757
ID:1gQ87Cnm がきもかった

759 名前:nobodyさん mailto:sage [2011/08/01(月) 07:47:20.91 ID:???]
^(\d{3},)*\d{3}$
上記正規表現で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



760 名前:nobodyさん mailto:sage [2011/08/01(月) 07:59:48.61 ID:???]
>>759
*の意味を調べよう

761 名前:nobodyさん mailto:sage [2011/08/01(月) 07:59:51.56 ID:???]
* → + で解決しない?
*はゼロ個以上でマッチだから。


762 名前:759 mailto:sage [2011/08/01(月) 08:58:25.47 ID:???]
>>760
調べなくても分かってますが()*も同様なのかと思いまして

>>761
いえ、nnnの場合もヒットさせたかったので*でいいのです
仕様というか動きの確認だけが目的で書き込んだので

763 名前:nobodyさん [2011/08/01(月) 09:39:13.59 ID:3IgNAOvk]
>>759の意図がいまいちよくわからんが、
「a*」の時と「(abc)*」の時とで*の機能が変わらないことを確認したかったの?

あと若干言葉遣いに波風が立つ雰囲気を感じてしまうのはオレだけ(笑)?

764 名前:nobodyさん mailto:sage [2011/08/01(月) 09:43:31.28 ID:???]
ヒント:ID隠し

765 名前:nobodyさん mailto:sage [2011/08/01(月) 09:48:49.11 ID:???]
俺もちょっとイラッときた

766 名前:nobodyさん mailto:sage [2011/08/01(月) 09:52:47.51 ID:???]
(\d{3},)* 関係ないじゃんw



767 名前:nobodyさん mailto:sage [2011/08/01(月) 10:28:45.34 ID:???]
>>762
どう見てもわかってないだろw

768 名前:nobodyさん mailto:sage [2011/08/01(月) 17:56:48.08 ID:???]
>>763
> >>759の意図がいまいちよくわからんが、
> 「a*」の時と「(abc)*」の時とで*の機能が変わらないことを確認したかったの?
はい

> あと若干言葉遣いに波風が立つ雰囲気を感じてしまうのはオレだけ(笑)?
イラッ☆

769 名前:nobodyさん mailto:sage [2011/08/01(月) 17:59:56.76 ID:???]
機能が変わらない事の確認なのに質問内容が
>ヒットする理由がわかりません
っておかしいだろw

770 名前:nobodyさん mailto:sage [2011/08/01(月) 18:00:59.64 ID:???]
>>766
どう言う事でしょうか?
もっとスマートな方法があるのであれば是非ご教示願います

>>767
何がいけないのかさっぱりです
直近文字の0回以上のhitって事でないの?

771 名前:nobodyさん mailto:sage [2011/08/01(月) 18:02:51.58 ID:???]
>>769
そんなおかしいですかね
でも、確かに表現が悪くて申し訳ないです


772 名前:nobodyさん [2011/08/01(月) 18:11:52.38 ID:3IgNAOvk]
根はいいやつそうでよかった(´ω`)…。

773 名前:nobodyさん mailto:sage [2011/08/01(月) 18:44:25.32 ID:???]
直近「文字」とは限らないだよ。
(お題のこんなのとか)*(?:ほかにもこんなのとか)*[いろ]*あるでしょう。

774 名前:nobodyさん mailto:sage [2011/08/01(月) 19:21:33.25 ID:???]
>>770
123がヒットしたのは
\d{3}の部分だけといえば分かるだろうか
(\d{3},)*は0回ってことで

775 名前:nobodyさん mailto:sage [2011/08/01(月) 22:22:11.88 ID:???]
>>774
超絶完全理解感謝激励歓迎降臨!
謝謝!!

伝わり難い文章で多レスしてしまってすいませんでした

776 名前:nobodyさん [2011/08/01(月) 22:37:10.25 ID:3IgNAOvk]
>>774の指摘がそこまで的確なものだったってのもいまいちピンと来ない件(笑)
まあよかったな( ´∀`)



777 名前:nobodyさん mailto:sage [2011/08/01(月) 22:54:31.04 ID:???]
わろた

778 名前:nobodyさん mailto:sage [2011/08/02(火) 11:07:19.68 ID:???]
結局わかってなかったんじゃんw

779 名前:nobodyさん mailto:sage [2011/08/03(水) 19:33:03.57 ID:???]
762 名前: 759 [sage] 投稿日: 2011/08/01(月) 08:58:25.47 ID:???
>>760
調べなくても分かってますが()*も同様なのかと思いまして

>>761
いえ、nnnの場合もヒットさせたかったので*でいいのです
仕様というか動きの確認だけが目的で書き込んだので


780 名前:nobodyさん mailto:sage [2011/08/04(木) 09:41:51.16 ID:???]
動きの確認ならパターン出してテストすりゃいいだけじゃん

なんかイラッとするな

781 名前:nobodyさん mailto:sage [2011/08/04(木) 12:34:18.67 ID:???]
>>780
イラッ☆

782 名前:nobodyさん mailto:sage [2011/08/26(金) 08:02:24.21 ID:???]
test

783 名前:nobodyさん mailto:sage [2011/09/02(金) 00:33:38.37 ID:???]
>>782
イラッ☆

784 名前:nobodyさん mailto:sage [2011/09/06(火) 00:06:31.30 ID:???]
ttp//aaa.co.jp:8888
http//bbb.com:9999/
を除外しつつ
他の
h?ttp//○○○.△△△.□□□:☆☆☆/?
     ↑ここから      ここまで↑
をヒットさせたいのですが色々試したのですが出来ませんでした
何か方法がありますでしょうか?

785 名前:nobodyさん mailto:sage [2011/09/06(火) 00:20:00.51 ID:???]
h?ttp:\/\/(?!aaa.co.jp:8888|bbb.com:9999)(\w+\.)+\w+(:\d+)?\/?

786 名前:nobodyさん mailto:sage [2011/09/06(火) 00:28:37.10 ID:???]
>>785
レスありがとうございます
助かりました



787 名前:nobodyさん mailto:sage [2011/09/14(水) 01:54:57.08 ID:???]
2chのdatの1(1行目)のレス内にトリップ(10桁以上でも10〜12桁でもok)が
含まれてる場合にヒットさせたいのですが、一部除外したいトリップあります

◆(?!5s5hPZiJeU|ozOtJW9BFA).{10}
まではできたような気がするのですが1行目にマッチさせるにはどうしたら良いでしょうか
SJISです。


788 名前:nobodyさん mailto:sage [2011/09/14(水) 08:26:15.86 ID:???]
>>787
^?dとか

789 名前:nobodyさん mailto:sage [2011/09/14(水) 13:20:15.86 ID:???]
>>787
mフラグ

>>788


790 名前:nobodyさん mailto:sage [2011/09/15(木) 22:42:04.53 ID:???]
>>789
ありがとうございます
よく分からなかったので調べてみると複数行の行頭、文末にマッチさせることができるのですね
残念ながら行頭、文末にトリップがあるわけでないのでうまくないようです。。


791 名前:nobodyさん mailto:sage [2011/09/16(金) 01:40:23.90 ID:???]
>>790
789ではないが、mフラグをつけたら駄目だ
^ を利用すれば一行目のトリップにマッチできる
mフラグをつけたら破綻する

792 名前:nobodyさん mailto:sage [2011/09/16(金) 01:49:30.98 ID:???]
処理系を書かないからでしょ。

>>789のいうmオプションは「改行文字を無視する単一行モード」の意味
(Ruby等の流儀)で書いていて、
>>790はそれを「複数行モード」の意味(Perl等の流儀)に取っている。

793 名前:nobodyさん mailto:sage [2011/09/22(木) 02:27:55.73 ID:???]
>>790
先頭から、最初に改行コードが出てくるまでが1行目だよ

794 名前:nobodyさん [2011/10/02(日) 19:26:42.05 ID:Tnal10Vi]
abcdefgfedcba という文字列から
defという文字列を消すこと出来るのですが、
def以外を消すにはどうすればいいのでしょうか?

795 名前:nobodyさん [2011/10/02(日) 20:09:22.37 ID:zbShr9jh]
漠然としすぎ

796 名前:nobodyさん mailto:sage [2011/10/03(月) 06:19:41.91 ID:???]
>>794
よくわからんが否定はめんどくさいぞ。

([^def]|d(?!ef)|(?<!d)e(?!f)|(?<!de)f)

でdefの一部であるd,e,f以外の任意の1文字にマッチするから
これでなんとかなるだろう。





797 名前:nobodyさん mailto:sage [2011/10/03(月) 21:56:35.04 ID:???]
>>794
環境によるけど、(def)ですべてにマッチさせて、あとから取得した$1的なものに置換すればいいのでは

798 名前:nobodyさん mailto:sage [2011/10/07(金) 11:38:20.62 ID:???]
>>794
/def|[\s\S]/ でcallbackして def 以外は全て削除


799 名前:nobodyさん mailto:sage [2011/10/10(月) 10:36:17.70 ID:???]
PHPにてHTMLタグ以外の全ての文字について、全角・半角の統一などの処理を
したいと思うのですが、例えば英字を全角で統一したい場合、素人考えでは
最も単純に作業をするには「全ての英字を全角に」→「タグのみ半角に」という
2回に分けた処理がベストかと思うのですが、もっと効率の良い処理の方法は
ありますでしょうか?


800 名前:nobodyさん mailto:sage [2011/10/10(月) 11:10:33.30 ID:???]
PHPなら効率にこだわるより、メンテナンス性を重視した方がいいと思う。

801 名前:nobodyさん [2011/10/10(月) 16:07:33.02 ID:gughiUX1]
"<"に続く文字(">"が来たら終了)は全部半角化
それ以外はどしどし全角化

でおk
それはさておき、やんごとなき理由さえなければ統一するなら全角じゃなく半角にしとけ。

802 名前:nobodyさん mailto:sage [2011/10/11(火) 00:33:04.23 ID:???]
>>799
DOMで処理するのがいいかと

803 名前:nobodyさん mailto:sage [2011/10/11(火) 00:36:07.74 ID:???]
>>801
<input type="button" value="zenkaku">

804 名前:nobodyさん mailto:sage [2011/10/11(火) 23:11:43.85 ID:???]
>>800
メンテナンス性にこだわるとどんな感じになるか……まるでイメージできません……orz

>>801
すいません、やんごとなき理由で全角化せねばならないのです…。
ところでその方法は正規表現は特に使わず、1文字ずつチェックしていく感じでしょうか?

>>802
DOMを使うというと……やはりこれも正規表現は使わない感じですか?

>>803
今回は特にタグの中身まではいじらない予定なので全角valueでもokです。

805 名前:nobodyさん mailto:sage [2011/10/12(水) 00:03:54.71 ID:???]
>>801
すいません、スレ違いになってしまいましたが、ひとまずその方法を試してみました。
が、実体参照(&anpとか)が出てきたときにややこしいことになりそうです…orz
この場合だけ力技で切り抜けるか、もしくはやはりある程度正規表現で処理を
した方が良さそうな気がしますがどうでしょうか。

あるいはDOMの方が簡単なのでしょうか…?
どう回せばタグの中身が取り出せるのかいまひとつわからないです。。。

806 名前:nobodyさん mailto:sage [2011/10/12(水) 00:21:33.58 ID:???]
あー…後から全角&XXX;を半角にするって方法もありますねえ…。
うーん。



807 名前:nobodyさん [2011/10/14(金) 09:47:43.56 ID:+/AP5o7r]
htmlのソースからタグを除外するのに挑戦してて以下のようにしたんですが
もっと効率いいやり方あるでしょうか?

\<[a-zA-Z0-9\"\<\>\ \=\;\:\/\.\_\-\(\)\#\!\'\&\%]+

808 名前:nobodyさん mailto:sage [2011/10/14(金) 15:25:07.10 ID:???]
どんだけ円がすきなのかとw

809 名前:nobodyさん [2011/10/14(金) 15:26:32.18 ID:i4T0D1ix]
>>807
↓だと「Hello」ごと消えていかないか?
<p>Hello</p>
↓だと「…alt="」で止まってしまわないか?
<img src="hello.png" alt="こんにちは">

↓というわけでこれでいいんじゃないの。
<[^>]>

810 名前:nobodyさん [2011/10/14(金) 15:28:56.11 ID:i4T0D1ix]
失礼「+」が抜けてた
<[^>]+>

811 名前:nobodyさん [2011/10/15(土) 02:18:16.86 ID:pl58b8lQ]
フジテレビデモ
花王デモ
要チェック


812 名前:nobodyさん mailto:sage [2011/10/15(土) 15:28:36.48 ID:???]
>>809
これは便利。ありがとう

813 名前:nobodyさん mailto:sage [2011/10/15(土) 16:07:18.81 ID:???]
いいってことよ

814 名前:809 [2011/10/15(土) 18:11:07.01 ID:5td5CFAR]
>>813www

815 名前:nobodyさん mailto:sage [2011/11/01(火) 16:59:25.75 ID:???]
行単位をダブルクオートで囲む正規表現で

ああああ文字列ああああ
いいいい文字列いいいい

検索
/^.*$/m

置き換え
"$0"

とした場合に
"ああああ文字列ああああ
"
"いいいい文字列いいいい
"

となってしまいます。"ああああ文字列ああああ"としたいのですが、どのようにすれば良いでしょうか
PHPのpreg_replaceを使っています。よろしくお願いします。

816 名前:nobodyさん mailto:sage [2011/11/01(火) 17:49:42.69 ID:???]
マッチするないように改行が含まれてるから。



817 名前:nobodyさん mailto:sage [2011/11/01(火) 18:23:24.87 ID:???]
>>815
自己レス
\x0Dが原因でした。

818 名前:nobodyさん mailto:sage [2011/11/01(火) 22:17:43.68 ID:???]
>>817
>>816を無視するのか

819 名前:nobodyさん mailto:sage [2011/11/01(火) 22:40:47.00 ID:???]
>>818

>>816
> マッチするないように改行が含まれてるから。

ではなくて
マッチするないように改行が含まれていなくても\x0Dが付加されるから

無視ではありません。

820 名前:816 != 818 mailto:sage [2011/11/01(火) 23:45:06.62 ID:???]
>>819
言い方が悪かったのかな。CRが含まれてるから。
別にCRは付加されたりしないよ。

preg_replace("/^([^\r]*)\r?$/m", "\\1", $text);
とするか、LFのみに変換してから処理するか。

821 名前:nobodyさん mailto:sage [2011/11/07(月) 22:53:15.08 ID:???]
住所と番地の間にある空白を削除する場合どうやればいいですか?
「見附市 見附 123番地」この文字列を
「見附市 見附123番地」としたいです
「見附市」と「見附」の間の空白はそのままという条件付です

822 名前:nobodyさん mailto:sage [2011/11/08(火) 00:28:51.98 ID:???]
数字が必ずある前提で、
\s[\d]

823 名前:nobodyさん mailto:sage [2011/11/08(火) 01:11:57.96 ID:???]
(?!市).\s

824 名前:nobodyさん mailto:sage [2011/11/08(火) 08:57:43.48 ID:???]
>>823
町や村にもヒットさせろよw
群はいらないか

825 名前:nobodyさん mailto:sage [2011/11/08(火) 10:58:00.13 ID:???]
(東京都|北海道|(?:京都|大阪)府|[県市区群])\s+

\1

826 名前:nobodyさん mailto:sage [2011/11/08(火) 10:58:59.04 ID:???]
ああ、勘違いした
>>825は流してくれ



827 名前:nobodyさん mailto:sage [2011/11/08(火) 12:21:27.42 ID:???]
>>821
(?![市区町村]).\s

828 名前:816 != 818 mailto:sage [2011/11/08(火) 13:46:47.91 ID:???]
郡、な。

829 名前:nobodyさん mailto:sage [2011/11/08(火) 20:01:17.27 ID:???]
しゅくちょく

830 名前:nobodyさん mailto:sage [2011/11/09(水) 02:32:34.16 ID:???]
>>827
空白にマッチしたいんだから↓の間違いだよね。
(?<![市区町村])\s+


831 名前:nobodyさん [2011/11/23(水) 06:53:59.84 ID:V5f5mApl]
![[
 文字列
 ![[別の文字]]
 ![[ほげほげ]]
]]

![[何か]]←これが1単位で、↑こんなの中から最短マッチで抽出したく、以下のようにしました。

$pattern = '/!\[\[([^\[\]]+)\]{2,2}?/';

しかしこの場合、ブラケットが使えないので困っています。

![[ この中に[←とか]←があると使えない ]]

最短マッチさせるにはどう書けばいいでしょうか?

832 名前:nobodyさん mailto:sage [2011/11/23(水) 07:02:11.30 ID:???]
$pattern = '/!\[\[.+?]]{2,2}?/';


833 名前:nobodyさん [2011/11/23(水) 09:23:16.47 ID:V5f5mApl]
>>832
ありがとうございます。
ちなみに↓こうでしょうか?
$pattern = '/!\[\[.+?\]{2,2}?/';

しかしながら、やはり最長マッチになってしまいます。
うっかり書き忘れたのですが、PHPのpreg_matchで行なっています。
PCRE準拠(Prel互換)らしいです。

834 名前:nobodyさん [2011/11/23(水) 09:52:54.59 ID:V5f5mApl]
あ、すみません、できました!
が、1行だといけるのですが、複数行にまたがった場合失敗しました。
↓このような場合

![[
 文[字]列
 ![[別の文字]]
 ![[ほげほげ]]
]]

オプションにmやsを付けてみましたがダメです。

835 名前:nobodyさん mailto:sage [2011/11/24(木) 01:59:39.52 ID:???]
>>834
入れ子の対応とりつつマッチするには
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";
  }
}
?>


836 名前:nobodyさん [2011/11/25(金) 00:51:55.86 ID:7pZprZ8q]
>>835
うぉ!?ありがとうございます!



837 名前:nobodyさん mailto:sage [2011/11/25(金) 01:08:56.26 ID:???]
>>835
おーこれでいけそうです!
なるほど、こんなやり方がありましたか。とても勉強になりました!


838 名前:nobodyさん [2011/11/27(日) 21:48:09.61 ID:ZbhJICcu]
jsonの形式を配列に変換することは出来ないでしょうか?
phpの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・・・・・的な感じなんですが。

どなたかお願いいたします。

839 名前:nobodyさん mailto:sage [2011/11/27(日) 23:58:55.08 ID:???]
>>838
json_decodeでエラーが出ないんだけど

840 名前:nobodyさん [2011/11/28(月) 08:12:12.66 ID:NxvSoLFs]
>>839
全体はもっと長いのですが...

841 名前:nobodyさん mailto:sage [2011/11/28(月) 11:38:12.26 ID:???]
つーかエラーになるようなjsonモドキを吐く方をなんとかしろよ。

842 名前:nobodyさん mailto:sage [2011/11/28(月) 11:51:50.21 ID:???]
>>840
なぜエラーの原因を特定しないのですか...

843 名前:nobodyさん mailto:sage [2011/11/28(月) 11:52:31.97 ID:???]
あと、json形式でないものを、json形式だと思い込んで正規表現書いても結局うまくいかないとおもう。

844 名前:nobodyさん [2011/11/28(月) 20:38:17.18 ID:cgQZB7ih]
{"1":{"0":{"n":{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"3","1":"5","2":"5","3":"3","4":"3"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},
"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
とつれない回答です。

845 名前:nobodyさん mailto:sage [2011/11/28(月) 21:06:49.29 ID:???]
>>844
デコードできたよ(PHP 5.3.2)

846 名前:nobodyさん [2011/11/28(月) 21:16:33.29 ID:cgQZB7ih]
マジっすか??
デコードの仕方が悪いのでしょうか??
できればやり方を教えてください。



847 名前:nobodyさん mailto:sage [2011/11/28(月) 22:13:12.05 ID:???]
こうならないためにもどんなデータをどうやったらエラーになったかを書くのが重要なんだけど。

848 名前:nobodyさん mailto:sage [2011/11/28(月) 22:14:25.01 ID:???]
連レスすまんが、>>838をデコードするのとやり方は変えてないよ。
>>838はデコードできるんだろうから、環境面かもしれないよ

849 名前:846 [2011/11/28(月) 22:41:14.25 ID:NxvSoLFs]
単純にjavascriptの配列をjsonに変換させてからhidden属性に入力。
それをPOSTで送ったPHPファイルで
json_decode($_POST['hidden'])
って形でやってます。hiddenで送ること自体が間違い??
それともhiddenを何かに変換しなければいけないの??

850 名前:nobodyさん mailto:sage [2011/11/28(月) 23:04:04.57 ID:???]
hidden属性とか$_POST['hidden']とか胡散臭そうなのが混ざってるし。
問題の切り分けの仕方について続けたいなら、くだ質とか、超初心者スレみたいなところでどうぞ

851 名前:nobodyさん [2011/11/29(火) 23:04:45.51 ID:gKGxmzY9]
838は出来たけど、844は出来なかった。
同一ファイル上で変数を入れてみた結果として。

852 名前:nobodyさん [2012/01/01(日) 16:05:26.90 ID:vpch3S2x]
整数の桁数上限なし、小数点以下2位までの少数をマッチさせたいのですがうまくいきません。

str.match(/[0-9]*.[0-9][1-9]/g)

どこが間違っているのか教えていただけますでしょうか。
PHP Version 5.2.16です

宜しくお願い致します。

853 名前:nobodyさん mailto:sage [2012/01/01(日) 17:00:46.35 ID:???]
それはJavaScriptにしか見えないけど

854 名前:nobodyさん [2012/01/01(日) 18:04:13.68 ID:Zget/7Sh]
>>852
本当にPHPだとすれば、あってるところのほうが少ない件
preg_match_all('/[0-9]*\.[0-9][0-9]/');

1/100の位は積極的にゼロを省かなきゃならないの?[0-9]でよくね?
あと、単なる整数とか、小数点以下3位以上の数字をどう扱いたいのかによっても変わってくる。
そもそも実際のところは「PHPで出力するHTMLに書かれたJavaScript」あたりかな?

855 名前: 【大吉】 【1107円】 mailto:sage [2012/01/01(日) 19:46:02.61 ID:???]
>>852
マッチさせる文字列が数値のみであれば、
数値判定をした方がいいのでは?

文字であっても強制的に数値に変換する等が可能であれば、
かなり楽です。

856 名前:852 mailto:sage [2012/01/01(日) 23:42:04.11 ID:???]
>853,854,855
大変失礼しました。
854さんのおっしゃる通り、「PHPで出力するHTMLに書かれたJavaScript」でした。

その理解すら不十分でした。申し訳ございませんでした。



857 名前:nobodyさん mailto:sage [2012/01/02(月) 17:24:24.78 ID:???]
>>852
// 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>");


858 名前:nobodyさん mailto:sage [2012/01/02(月) 17:25:16.42 ID:???]
>>852
// 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>");


859 名前:nobodyさん [2012/01/06(金) 21:48:56.02 ID:b1y0AA6H]
ここの皆さんのレベルでは簡単すぎるのかもわかりませんが教えてください
Firefoxブラウザのスクリプトで「Google Reader NG Filter」というものがあります
これはRSS文中に特定のキーワードが一致していれば自動的に削除するものです
サンプルとしてADとPRを消す正規表現がはじめから入っています
^\W?(?:ADV?|PR)\b
こういうものです
先頭にADやPRがあれば広告を見なくてもすむわけです

これを応用して見たくないキーワードが含まれているものを消すべく
自分なりに試行錯誤しているのですが上手くいきません
文中のキーワードなので当然^は不要ですし、正規表現のサイトで勉強して改変しても
動かないのです
iPhoneとAndroidというキーワードが含まれていたら削除するという表現をお願いします

860 名前:nobodyさん [2012/01/06(金) 23:01:27.07 ID:pwr91DzE]
(?:iPhone|Android)でいいだろ。
上記にマッチした上で、本文を削除する部分もサンプルからコピペしないとダメだぞ。

861 名前:nobodyさん mailto:sage [2012/01/06(金) 23:25:15.04 ID:???]
.*(iPhone|Android).*

862 名前:nobodyさん mailto:sage [2012/01/06(金) 23:26:11.05 ID:???]
>>860
それやったけど、ダメでした…
普通はこれにしますよね

863 名前:nobodyさん [2012/01/07(土) 00:03:18.47 ID:n5aAiFGN]
>>862
いや少なくとも>>860の正規表現はマッチするはずなので、たとえば
1. マッチさせる対象が本文ではなくタイトルになっている
2. 削除する処理がどうにかなっている
3. その他

864 名前:nobodyさん mailto:sage [2012/01/07(土) 00:05:14.52 ID:???]
>>859
これか
userscripts.org/scripts/show/67840
親ルール,URL,他の条件にマッチしてないんじゃないか?
あと、大文字小文字をチェックしているとか

865 名前:nobodyさん mailto:sage [2012/01/07(土) 00:56:55.41 ID:???]
>ここの皆さんのレベルでは簡単すぎるのかもわかりませんが教えてください
こんな枕詞はいらん。

866 名前:nobodyさん [2012/01/13(金) 15:32:24.50 ID:QW0sWV6a]
<a href="example.com/aaa.jpg"><img src="examle.com/bbb.jpg"></a>

これで<a hrefがない場合に限り<img srcにマッチさせてURIを取得するにはどうすればいい?

preg_match_all('/(?:(?(?=<a href)|src))="([^"]+)/si', $html, $m);
だと<a hrefがあるときは<a hrefの部分は何もマッチしなくてsrcの方がマッチするみたい



867 名前:nobodyさん mailto:sage [2012/01/13(金) 21:09:54.88 ID:???]
まず<a hrefがないというのが何処にないのか、土台をはっきりさせないと

868 名前:nobodyさん mailto:sage [2012/01/14(土) 00:24:14.06 ID:???]
>>866
preg_match_all('|<img src="([^"]*)">(?!</a>)|')

869 名前:nobodyさん mailto:sage [2012/01/15(日) 00:11:37.39 ID:???]
>>866
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属性ってことが
直接表現できるからね。


870 名前:nobodyさん mailto:sage [2012/02/04(土) 12:29:11.76 ID:???]
こちらのスレッドにはじめて投降します。よろしくお願いします。
・使用言語:java
・質問内容:漢字を余すことなく拾いたい。
※漢字を拾い出す正規表現をネットで調べていたのですが、
なにが新しくて、なにが不十分で、なにが正解なのかわからなくなってしまいました。




871 名前:nobodyさん mailto:sage [2012/02/04(土) 18:34:56.81 ID:???]
漢字以外

872 名前:nobodyさん mailto:sage [2012/02/04(土) 20:48:16.26 ID:???]
[\p{InCJKUnifiedIdeographs}
こういうのをみつけたのですが、これで網羅されているのでしょうか。

873 名前:nobodyさん mailto:sage [2012/02/05(日) 12:00:52.66 ID:???]
code.cside.com/3rdpage/jp/utf-8/indexEastAsian.html
ここらを見て漢字の含まれているグループを加えたらいいんじゃないかしら。拾っては困る文字があるなら
拾いたい漢字のコードポイントを列挙するしかないんじゃないかしら

「ああもう面倒 ! Unicodeに含まれる日本語で使われている漢字だけを拾う正規表現をここに書いてくんろ !」って
ことなら答えてもらえないと思うぞw

874 名前:nobodyさん mailto:sage [2012/02/05(日) 13:17:26.57 ID:???]
>>873
面倒。。。という意味ではなく、漢字を含む文章を取り上げる正規表現を探していたのですが、
調べれば調べるほど種類があり、何を明記すれば過不足なく満足な結果を得られるのか分からなくなったので
質問した次第です。


875 名前:nobodyさん mailto:sage [2012/02/05(日) 13:35:14.15 ID:???]
>>870
JIS X 0208またはJIS X 0213準拠の漢字コードでいいんじゃない?
JIS X 0208準拠なら charset.7jp.net/unicode2.html にあったよ。

876 名前:nobodyさん mailto:sage [2012/02/05(日) 17:49:14.26 ID:???]
>>875
ありがとうございます。[亜-腕弌-熙]に加えて[\-K]もあるようですが、
\p{InCJKUnifiedIdeographs} または[一-龠]とは比べて量が異なるのか否か
使ってはいけないのかどうなのか、教えていただけると嬉しいです。

ちなみにwindows7、Microsoft(R) Office IME 2007 辞書ツール を使っています。



877 名前:nobodyさん mailto:sage [2012/02/05(日) 19:33:01.78 ID:???]
>>876
コード表から検索すればすぐわかると思うんだけど…。
"一" で検索すれば 4e00 にあり、"龠" で検索すれば 9fa0 にあることがわかる。
\p{InCJKUnifiedIdeographs} は実装に依存するからJavaの仕様書を読んで、としか。
使ってはいけない、なんて判断指標もなしに判断できるわけがない。

878 名前:nobodyさん mailto:sage [2012/02/05(日) 19:41:04.69 ID:???]
"JavaTM Platform Standard Ed. 6" には \p{InCJKUnifiedIdeographs} がないね。
java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html

879 名前:nobodyさん mailto:sage [2012/02/05(日) 20:32:59.67 ID:???]
>>877>>878
返答、誠にありがとうございました。
自分の出した結論としては、\p{InCJKUnifiedIdeographs}がクラス Patternにはないこと、
亜は4E9C、Kは9ED1にあり、一と龠の位置よりも狭いことから(並びの順序が違うので一概には言えませんが)、
[一-龠]を使うのが一番妥当と判断しました。

皆様、本当にありがとうございました。


880 名前:nobodyさん mailto:sage [2012/02/17(金) 21:31:06.69 ID:???]
質問です。ABCDEと5つの文字があり、複数の文中・文末に点在しています。

文中・文末にあるABCDEをマッチさせる正規表現を教えてください。
文頭はのぞきたいです。
ネットで調べたりしたのですが、どの言葉を用いると自分の要求する答えが
見つかるのか分からなかったので書き込みしました。
また自分で調べるためにも自己解決できるようなHPを教えていただけると嬉しいです。

よろしくお願いします。
JAVAを用いています。

881 名前:nobodyさん mailto:sage [2012/02/18(土) 01:29:01.30 ID:???]
>>880
文頭は ^ か \n
マルチラインモードで動作しているかによって変わる

882 名前:nobodyさん mailto:sage [2012/02/18(土) 07:45:28.55 ID:???]
>>881
マルチラインモードONだと思います。
それぞれの文章ごとに適用したいと思っています。

追記なのですが、
ABCDEが含まれていない文章も除きたいと考えています。
よろしくお願いします。

883 名前:nobodyさん mailto:sage [2012/02/18(土) 10:11:57.59 ID:???]
>>882
もう答えは出ていると思うんだが…。
否定先読みと ^ を組み合わせればいい。
URLは>>878

884 名前:nobodyさん mailto:sage [2012/02/18(土) 10:58:37.64 ID:???]
>>883
ありがとうございました。

885 名前:nobodyさん mailto:sage [2012/02/22(水) 10:20:21.24 ID:???]
質問です。javaをしようしています。
ひらがな・カタカナ・アルファベット・記号で、連続ではない必ずまじりあった4文字以上の文章
を抜き出す正規表現を教えて頂けないでしょうか。よろしくお願いします。

886 名前:nobodyさん mailto:sage [2012/02/22(水) 22:58:11.24 ID:???]
連続ではないまじりあった状態がどういうことなんだろう。
その4種を用いていればまじりあいそうな。
あアs# はどうなの。



887 名前:nobodyさん mailto:sage [2012/02/22(水) 23:26:26.77 ID:???]
>>886
連続ではない必ず混じりあった4文字以上の文章とは
「ああああ」「アアアア」「aaaa」「◎◎◎◎」等連続した文章ではなく
「あアアa」とか「aaaの」とか「◎あアア」等の文章のことです。

分かりづらくすいません。


888 名前:nobodyさん mailto:sage [2012/02/22(水) 23:50:16.43 ID:???]
>>887
それだけじゃ分かりにくい
例えば「アあアa」はどうなんの?

889 名前:nobodyさん mailto:sage [2012/02/22(水) 23:59:54.01 ID:???]
>>888
「ひらがなだけ」「カタカナだけ」「アルファベットだけ」「記号だけ」の文章ではないのでマッチします。
「あいうえお」はひらがなが連続しているのでマッチしないようにお願いします。

890 名前:nobodyさん mailto:sage [2012/02/23(木) 00:39:32.26 ID:???]
>>889
こんな感じ?

^(?:[a-zA-Zぁ-ゞァ-ヾ、-◯].{4,}|[a-zA-Zぁ-ゞァ-ヾ].{4,}|[a-zA-Zぁ-ゞ].{4,}|[ぁ-ゞァ-ヾ、-◯].{4,}|[ぁ-ゞァ-ヾ].{4,}|[ァ-ヾ、-◯].{4,})$

891 名前:nobodyさん mailto:sage [2012/02/23(木) 00:45:45.26 ID:???]
>>890
表現していただき、本当にありがとうございました。
さっそく活用したいと思います。感謝します。

892 名前:nobodyさん mailto:sage [2012/02/23(木) 01:57:09.70 ID:???]
>>891
ごめん890は流してくれ
なんか頓珍漢なこと書いてたわ

893 名前:nobodyさん mailto:sage [2012/02/23(木) 02:20:18.23 ID:???]
>>892
いえいえ、謝られることなんて。

894 名前:nobodyさん mailto:sage [2012/02/23(木) 09:38:55.66 ID:???]
1つの文字種だけでないならどこかに異なる2つの文字種が並ぶところがある筈
なので、あとは4文字以上の条件を満たすにはその並ぶところの前に2文字以上
あるか、前と後ろに1文字以上ずつあるか、後ろに2文字以上あるかのいずれか
である。

文字クラスをいちいち書くのはだるいのであ,ア,a,○で代表させると

[あアa○]{2,}あア[あアa○]*

みたいのを真ん中の文字種の順列×前と後ろの繰り返し数のパターン分だけ
つくって|で並べればOK


895 名前:nobodyさん mailto:sage [2012/02/23(木) 10:34:55.79 ID:???]
>>894
「[あアa○]{2,}あア[あアa○]*」の真ん中の「あア」の部分を
「あア」「あa」「あ○」「アあ」「アa」「ア○」「aあ」「aア」「a○」
「○あ」「○ア」「○a」の12通り作って|で並べると解釈しましたがよろしかったでしょうか。

制作本当にありがとうございました。



896 名前:nobodyさん mailto:sage [2012/02/23(木) 12:00:24.74 ID:???]
さらに前後の繰り返し数の場合わけで

[あアa○]{2,}あア[あアa○]*
[あアa○]{1,}あア[あアa○]{1,}
[あアa○]*あア[あアa○]{2,}


も必要だから12×3=36通り作って並べる




897 名前:nobodyさん mailto:sage [2012/02/23(木) 12:03:30.20 ID:???]
真ん中だけ違うんだから

[あアa○]{2,}(あア|あa|….)[あアa○]*
[あアa○]{1,}(あア|あa|….)[あアa○]{1,}
[あアa○]*(あア|あa|….)[あアa○]{2,}

とした方が楽だな

898 名前:nobodyさん mailto:sage [2012/02/23(木) 14:37:23.71 ID:???]
>>896>>897さま
追加補足ありがとうございます!

899 名前:nobodyさん mailto:sage [2012/02/23(木) 17:00:23.37 ID:???]
PHP:5.3です。
URLの置換の質問です。
(preg_replace()でやるつもり)

ttp://aa.com/index.php?(適当な文字列) 複数あり

ttp://aa.com/index.html
のようにしたいのですが、どのような正規表現を使ったらいいでしょうか?


よろしくお願いします。



900 名前:nobodyさん mailto:sage [2012/02/23(木) 21:26:51.99 ID:???]
>>899
検索対象
index\.php[\?]+.+$
置換文字列
index.html

URLに含まれるphpファイルが複数存在する場合、GET変数(?以降の文字列)を強制的に除去したい場合
ただし、文中のあらゆる「?」から始まる単語が検索対象となってしまう。
検索対象
[\?]+.+$
置換文字列
index.html


901 名前:nobodyさん mailto:sage [2012/02/26(日) 21:16:58.77 ID:???]
javascriptです。
検索文字列が"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とそのままにしたいのですがどうすればいいのでしょうか?

902 名前:nobodyさん mailto:sage [2012/02/27(月) 16:13:34.47 ID:???]
manga_index を manga_ban_index に置換すればいいんじゃないの

903 名前:nobodyさん mailto:sage [2012/02/29(水) 06:23:11.44 ID:???]
使用言語問わず(?:foo|bar)と(foo|bar)の違いが判りません
自分が読むスクリプト言語の参考書では特に注釈もなしにfooかbarかどちらかに当てはまるものは(?:foo|bar)と書かれますが
初心者向けの正規表現についてのサンプルなど見ると(foo|bar)が多い気がします

どういう違いなのでしょう?初歩的な質問ですがよろしくお願いします

904 名前:nobodyさん mailto:sage [2012/02/29(水) 14:42:57.64 ID:???]
>>903
()で囲むとあとから\1などで参照できます。
(?:)とするとその参照を切ることができます。
()でグループ分けをしたいけど参照はしない、というときにその設定をすると無駄がなくなります。

905 名前:nobodyさん mailto:sage [2012/03/01(木) 17:23:10.26 ID:???]
>>904
今までよくわからないで()を使っていたので
これからはもっと良いものが書けそうです、ありがとうございます

906 名前:nobodyさん mailto:sage [2012/03/05(月) 00:36:21.70 ID:???]
phpの正規表現で、特殊文字、こんなの→(?????)を区別したいんですが、どうすればよいでしょうか。
ざっくりした質問ですので、参考になるサイトを教えてくださる程度でも構いません。



907 名前:906 mailto:sage [2012/03/05(月) 00:47:40.35 ID:???]
文字化けしてますね。すみません。
特殊文字というのは、ミリとかリットルとか、特殊顔文字(読み方がわかりません。ハートとか。)で使われるものです。

908 名前:nobodyさん mailto:sage [2012/03/05(月) 01:55:25.02 ID:???]
>>906
UTF-8で

909 名前:nobodyさん mailto:sage [2012/03/05(月) 09:22:56.91 ID:???]
全部並べて文字クラスにすりゃいいだろ。正規表現以前の問題だな。


910 名前:nobodyさん mailto:sage [2012/03/10(土) 02:43:47.72 ID:???]
479 名前:nobodyさん[] 投稿日:2012/03/10(土) 02:34:43.14 ID:/aJUja8G
文字列の正規表現で
「数値と英語と . と / と hoge 以外にマッチ」
というのをやりたいのですがどうも失敗してしまいます。一発での解決方法とかあるのでしょうか?

\Dやったあとまた\Wでマッチング、その後ドットでマッチングと物凄く効率悪い方法しか思いつかなかったのですが


911 名前:nobodyさん mailto:sage [2012/03/10(土) 02:56:04.76 ID:???]
裏を返せば「数値か英語か . か / か hoge にマッチ」 したらnotマッチ

912 名前:nobodyさん mailto:sage [2012/03/10(土) 03:17:32.46 ID:???]
>>911
貼ったの自分じゃないですがありがとうございます!
そういう考え方でいけばいいんですね

913 名前:nobodyさん [2012/03/20(火) 19:40:54.01 ID:Z+BjIxhL]
javaの表現方法で
Bがあれば削除、ただし直前がAなら削除しない、かつB単体でも削除
という表現方法はありますか?
^[A]Bだと全体で2文字あることが前提のように解釈していますが間違っていますでしょうか。

914 名前:nobodyさん mailto:sage [2012/03/20(火) 19:59:11.06 ID:???]
>>913
[^A]?Bかな

915 名前:nobodyさん [2012/03/20(火) 20:10:18.04 ID:Z+BjIxhL]
>>914
マッチしました。ありがとうございます。

916 名前:nobodyさん mailto:sage [2012/03/21(水) 02:09:27.32 ID:???]
[^A]

少し横向きの人が答えてるようで和んだ



917 名前:nobodyさん mailto:sage [2012/03/21(水) 12:29:51.49 ID:???]
ああ、なるほど。と思ったけど ?があるから「はあ?」って言われてるとこ想像してしまい凹んだ

[^A]?

918 名前:nobodyさん mailto:sage [2012/03/26(月) 23:29:49.84 ID:???]
「あいうえお」のいずれかが3回以上連続したらマッチってどうやればいいんでしょう?
[あいうえお]{3,}だと「あいう」とかにもマッチしちゃって駄目だった。

919 名前:nobodyさん mailto:sage [2012/03/26(月) 23:37:31.05 ID:???]
>>918
([あいうえお])\1{2,}

920 名前:nobodyさん mailto:sage [2012/03/26(月) 23:41:15.88 ID:???]
>>919
ありがとうございます!
解決してすっきりしました。

921 名前:nobodyさん mailto:sage [2012/03/28(水) 18:04:07.49 ID:???]
すいません・・・。
>>913->>917の件にて、結果的にどのように表現すればよい結論になったのでしょうか。


922 名前:nobodyさん mailto:sage [2012/03/28(水) 18:26:58.68 ID:???]
>>914だろ

923 名前:nobodyさん mailto:sage [2012/03/28(水) 18:57:52.69 ID:???]
>>921
>>916>>917は顔文字みたいって言ってるだけやんw

924 名前:nobodyさん mailto:sage [2012/03/28(水) 18:59:57.97 ID:???]
>>922>>923
ありがとうございます。
横向きの人、というのが理解できず失礼しました^^;

925 名前:nobodyさん [2012/03/29(木) 12:43:34.53 ID:UbmjoR9L]
元テキスト:
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?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
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を含まないクエリでマッチしなくなります。
どうしたらいいでしょうか。

926 名前:925 [2012/03/29(木) 19:25:30.17 ID:UbmjoR9L]
>>925の問題を解決しつつ、少し進展しました。

text:
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
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行追加して、「最後に&だけが付いてたら取り除く」しかないでしょうか。



927 名前:nobodyさん mailto:sage [2012/03/29(木) 20:25:45.43 ID:???]
なんか大変そうだなぁ。
俺なら?で分割して、2個になったら2個目を&で分割して、q=とtbm=を取り出して終わるわ

928 名前:nobodyさん mailto:sage [2012/03/30(金) 00:45:36.69 ID:???]
素直にライブラリ使った方が。
see HttpUtility.ParseQueryString()

929 名前:925 [2012/03/30(金) 13:55:15.20 ID:Wpf4JXLP]
>>927-928の言うとおりという気もしてきましたが、どうやら上手くいったのでご報告します。

C#:
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をキャプチャ(両方とも常に空)しているようですが、
そこに(?:を足すと入れ子のカッコ内が全部キャプチャされなくなってしまったので、とりあえずこのまま。

930 名前:nobodyさん mailto:sage [2012/03/30(金) 17:40:03.01 ID:???]
正規表現でがんばらなければだめな理由があるに違いないとそっと放置されるコード片が今まさに生まれたのである。

931 名前:nobodyさん [2012/04/12(木) 15:38:18.00 ID:nr7fN3uJ]
個人の小さいメールマガジンスタンドをやっているのですが
秀丸エディタの正規表現を利用して帰ってきたエラーメールリストから
アドレスだけを抜き出したいのですがどうすればいいでしょうか?

具体的には
---------------------------
メールヘッダー

<abcdefghijklmno@ezweb.ne.jp>
---------------------------
というテキストがあって
<abcdefghijklmno@ezweb.ne.jp>の部分の
abcdefghijklmno@ezweb.ne.jpのみを取り出したいと思っています

よろしくお願い致します

932 名前:nobodyさん mailto:sage [2012/04/13(金) 14:15:11.85 ID:???]
anago.2ch.net/test/read.cgi/software/1331567709/162-164

933 名前:nobodyさん mailto:sage [2012/04/16(月) 12:27:42.62 ID:???]
>>931
秀丸の正規表現スタイル判らないけど、
エディタの検索欄で特定の場所だけ抜き出すって結構大変だよ。
いっそ、perl、php、javascriptで書いた方が良いと思う

934 名前:ゼッケン774さん@ラストコール [2012/05/09(水) 21:57:54.68 ID:BzXqVbz5]
不明

935 名前:nobodyさん [2012/05/10(木) 11:31:59.11 ID:uA0oypVx]
質問です。javaを使用しています。
(?:[\((][一-龠]+[\))]*)
という正規表現をした際、括弧内にひらがなが含まれてしまうのですが、
含まれない漢字のみ括弧内に存在する表現方法を教えていただけないでしょうか。
お願いします。


936 名前:nobodyさん mailto:sage [2012/05/12(土) 18:10:34.44 ID:???]
[\((](?!.*[ぁ-んァ-ヶヲ-゚0-9a-zA-Za-zA-Z0-9])はどうだろう。
しかし、「(笑)www」とかだめだよなあ。



937 名前:nobodyさん mailto:sage [2012/05/13(日) 01:45:46.19 ID:???]
誘導されて来たんですけど、
こんなスレあったのね。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<259KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef