No.4354 正規表現:複数の単語の否定
== size, place を含まない場合はマッチ
@/birds/((?!(size|place)).)+/@
トップ > メモ一覧 > カテゴリ「正規表現」の絞り込み結果 : 18件
// メールで化ける文字を使いたくない(JIS X 0208 のみ認める) // match した場合エラー // 半角カタカナ認めない場合 $pattern = '~^(?: [\x00-\x7F]| # ASCII [\x89-\x97\x99-\x9F\xE0-\xE9][\x40-\x7E\x80-\xFC]| # 17-46,49-82区 \x81[\x40-\x7E\x80-\xAC\xB8-\xBF\xC8-\xCE\xDA-\xE8\xF0-\xF7\xFC]| # 1,2区 \x82[\x4F-\x58\x60-\x79\x81-\x9A\x9F-\xF1]| # 3,4区 \x83[\x40-\x7E\x80-\x96\x9F-\xB6\xBF-\xD6]| # 5,6区 \x84[\x40-\x60\x70-\x7E\x80-\x91\x9F-\xBE]| # 7,8区 \x88[\x9F-\xFC]| # 16区 \x98[\x40-\x72\x9F-\xFC]| # 47,48区 \xEA[\x40-\x7E\x80-\xA4] # 83,84区 )+$~x'; // 半角カタカナ認める場合 $pattern2 = '~^(?: [\x00-\x7F\xA1-\xDF]| # ASCII,半角カタカナ [\x89-\x97\x99-\x9F\xE0-\xE9][\x40-\x7E\x80-\xFC]| # 17-46,49-82区 \x81[\x40-\x7E\x80-\xAC\xB8-\xBF\xC8-\xCE\xDA-\xE8\xF0-\xF7\xFC]| # 1,2区 \x82[\x4F-\x58\x60-\x79\x81-\x9A\x9F-\xF1]| # 3,4区 \x83[\x40-\x7E\x80-\x96\x9F-\xB6\xBF-\xD6]| # 5,6区 \x84[\x40-\x60\x70-\x7E\x80-\x91\x9F-\xBE]| # 7,8区 \x88[\x9F-\xFC]| # 16区 \x98[\x40-\x72\x9F-\xFC]| # 47,48区 \xEA[\x40-\x7E\x80-\xA4] # 83,84区 )+$~x'; $a = 'あ';// チェック対象 $a = mb_convert_encoding($a, 'sjis-win', 'UTF-8'); $ret = preg_match($pattern, $a, $m); $ret2 = preg_match($pattern2, $a, $m2); var_dump('半角カタカナ認めない', $ret ); var_dump('半角カタカナ認める', $ret2);
この修飾子を使用するのは、preg_replace()のみです。 他の PCRE 関数では無視されます。
例4 'e' 修飾子の使用
<?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>
入力テキストのすべての HTML タグを大文字に変換します。
正規表現を組んでいて、なんだか思い通りの挙動をしないなーと思った時、思い出してください。
u (PCRE_UTF8)
この修正子は、Perl 非互換な PCRE の機能を有効にします。パターン 文字列は、UTF-8 エンコードされた文字列として処理されます。 この修正子は、UNIX では PHP 4.1.0 以降、Win32 では PHP 4.2.3 以降で 使用可能です。 また、PHP 4.3.5 以降では、パターンの UTF-8 としての妥当性も確認されます。
UTF-8な文字列をpreg系で使っている時は、uオプションを有効にしましょう!
$a = array(); $a[] = 'だいなむ'; $a[] = 'haha '; $a[] = 'haha '; $a[] = <<< EOT haha EOT; mb_regex_encoding('UTF-8'); foreach ($a as $name) { if (mb_ereg('[\s ]+$', $name)) var_dump($name); }
#!/usr/bin/perl use strict; use warnings; ### 最長マッチと最短マッチ my $word = 'asas'; my $long_match = 'a.*s'; # 「a がきて、任意の文字が0文字以上で、s」 という意味だが # これは、asas にマッチします。Perlの正規表現は、 # マッチする文字が最長になるように、マッチを行います。 my $short_match = 'a.*?s'; # 量指定子 * の後ろに ? をつけると、最短マッチが # 実現でき、as にマッチします。 # *?,+?, {1,4}? などという表現ができます。 print "1: 最長マッチ( Perlの標準 )\n"; if( $word =~ $long_match ){ print "$& にマッチしました。\n\n"; } print "2: 最短マッチ( 量指定子の後ろに ? をつける )\n"; if( $word =~ $short_match ){ print "$& にマッチしました。\n\n"; } __END__
/a.*s/
/a.*?s/