⊗ppPmRgSHy 238 of 447 menu

PHP正規表現内の文字集合内のハイフン

ハイフンも [] 内では特殊文字です (ただし、外側では違います)。ハイフン自体を文字として必要ならば、 範囲指定子として認識されない位置に置いてください。

これが重要な理由: 意図せず文字の範囲を作ってしまう可能性があります。例えば、 [:-@] のように書いた場合、あなたはコロン、ハイフン、アットマークを選択しているつもりでも、 実際には : から @ までの文字の範囲になってしまいます。この範囲には 次の文字が含まれます: :, ;, ?, <, =, >

これらはどこから来たのでしょうか? ASCII テーブル からです。コロンはアットマークより小さい番号を持っているため、範囲ができてしまいます。 つまり、すべての範囲はASCIIテーブルに基づいて決まります(必要に応じてこの特性を利用できます)。

対処法: ハイフンが確実に範囲指定子として認識されない位置、例えば先頭または末尾 (つまり [ の直後や ] の直前)に置きます。

ハイフンをエスケープすることもできます。そうすれば、 位置に関係なくハイフン自体を表すようになります。例えば、[:-@] の代わりに [:\-@] と書けば、範囲にはならず、 コロン、ハイフン、アットマーク @ の3文字を表します。

次の例の検索パターンは次の通りです: 数字 1、次に 'a' から 'z' までの文字、次に数字 2

<?php $str = '1a2 1-2 1c2 1z2'; $res = preg_replace('#1[a-z]2#', '!', $str); ?>

結果、変数には次の文字列が書き込まれます:

'! 1-2 ! !'

では、ハイフンをエスケープしてみましょう。結果として 検索パターンは次の通りです: 数字 1、次に 文字 'a'、またはハイフン、または文字 'z'、 次に数字 2

<?php $str = '1a2 1-2 1c2 1z2'; $res = preg_replace('#1[a\-z]2#', '!', $str); ?>

結果、変数には次の文字列が書き込まれます:

'! ! 1c2 !'

エスケープせずに、単純にハイフンの位置を変えることもできます:

<?php $str = '1a2 1-2 1c2 1z2'; $res = preg_replace('#1[az-]2#', '!', $str); ?>

結果、変数には次の文字列が書き込まれます:

'! ! 1c2 !'

次の例の検索パターンは次の通りです: 最初の文字は小文字または ハイフン '-'、その後ろに2つの文字 'x'

<?php $str = 'axx Axx -xx @xx'; $res = preg_replace('#[a-z-]xx#', '!', $str); ?>

結果、変数には次の文字列が書き込まれます:

'! Axx ! @xx'

次の例の検索パターンは次の通りです: 最初の文字は小文字、大文字、 またはハイフン '-'、その後ろに2つの文字 'x'

<?php $str = 'axx Axx -xx @xx'; $res = preg_replace('#[a-zA-Z-]xx#', '!', $str); ?>

結果、変数には次の文字列が書き込まれます:

'! ! ! @xx'

ハイフンを2つの文字クラスの間に置くこともできます。 その位置では、確実に新しい範囲を作りません:

<?php $str = 'axx 9xx -xx @xx'; $res = preg_replace('#[a-z-0-9]xx#', '!', $str); ?>

結果、変数には次の文字列が書き込まれます:

'! ! ! @xx'

練習問題

次の文字列が与えられています:

<?php $str = 'xaz xBz xcz x-z x@z'; ?>

次のパターンに一致するすべての文字列を見つけてください: 文字 'x'、大文字または小文字 またはハイフン、文字 'z'

次の文字列が与えられています:

<?php $str = 'xaz x$z x-z xcz x+z x%z x*z'; ?>

次のパターンに一致するすべての文字列を見つけてください: 文字 'x'、次にドル記号、または ハイフン、またはプラス記号、その後ろに文字 'z'

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否