phpのパターン修飾子であるx
は、正規表現第三版438頁**(日本語版)**によるとASCIIの空白文字しか認識せずunicodeに含まれるそのほかの空白たちには認識しないそうです。
ここで初めて空白にも種類があるのか、と思ったので、調べてみるとASCIIの空白は、0x20がありました。
つまりx
は、0x20の空白は認識するけれどもここの頁に記述してあるような空白たちは認識しないということであっておりますか。
なぜphpのパターン修飾子であるx
は、ASCIIの空白にしか認識しないのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/12 10:20
回答4件
0
返答
つまり\xは、0x20の空白は認識するけれどもここの頁に記述してあるような空白たちは認識しないということであっておりますか。
違います(後述参照)。
なぜphpのパターン修飾子である\xは、ASCIIの空白にしか認識しないのでしょうか。
「なぜ」にはどういう意図が含まれているのでしょうか。
aaaaaaaaさんとしては、「\x20
だけ認識するとこんな正規表現を書く場合に不便なはずで存在理由が分からない」など、何かしらの考えがあっての質問だと思いますが、その考えが見えてきません。
私はこれこれこういう理屈からこう思うのですが、なぜhogehogeの仕様になっているのでしょうか」のように、自分の考えを示すようにすると、aaaaaaaaさんの意図がより伝わりやすくなると思います。
(端的にはmomon-gaさんが回答されている「仕様だから」も間違ってはいないと私は思いますが、aaaaaaaaさんの言葉が足りなくて質問の意図が正確に伝わっていないように思います。)
パターン修飾子 x (PCRE_EXTENDED)
http://php.net/manual/ja/reference.pcre.pattern.modifiers.php では次のように書かれています。
x (PCRE_EXTENDED)
この修飾子を設定すると、エスケープするか 文字クラスの内部を除き、 パターンの空白文字は完全に無視されます。 文字クラスの外にあって、かつエスケープされていない # と次の改行文字の間の文字も無視されます。 この動作は、Perl の /x 修飾子と同じであり、複雑なパターンの内部に コメントを記述することが可能となります。 しかし、この修飾子は、データ文字にのみ適用されることに注意 してください。空白文字をパターンの特殊文字の並びの中、 例えば条件付きサブパターン (?( の内部に置くことはできません。
従って、半角スペース (\x20
)も無視されるようです。
想定される用途は正規表現文字列の中にコメントを入れることです。
(PHPマニュアルは公式情報ですので、PHPの内容はまず、PHPマニュアルを確認すると良いと思います。)
Re: aaaaaaaaさん
投稿2017/09/09 04:20
編集2017/09/09 04:49総合スコア18162
0
本来なら修正依頼に書くべきことですが……
例によって日本語版は持っていないので原著第3版で確認しました。訳書438ページとおぼしきあたりを見ても、ご質問のような記述はありません (私の見落としかもしれませんが)。
別の箇所、第7章に、似たような記述を見つけました。
(...) It used to be that Perl had many metacharacters that no other system supported, but over the years, other systems have adopted many of Perl’s innovations. These common features are covered by the overview in Chapter 3, but there are a few Perl-specific items discussed later in this chapter. (...)
(...)
➅ The /x modifier recognizes only ASCII whitespace. The /m modifier affects only newlines, and not the full list of Unicode line terminators.
The /i modifier works properly with Unicode.
Friedl, J. “Mastering Regular Expressions”, 3rd ed. ‘Chapter 7: Perl’, ‘Perl’s Regex Flavor’. pp.285, 286.
質問の前提がいろいろまちがっていることがわかるかと思います。
勘違いに基づいた質問に答えられる人はいません。質問と回答を読む他の方々にも迷惑がかかります。
もっとも、だれしも勘違いはするので、すること自体は仕方がないです。質問文中には、その間違いを正すためのてがかりが何もありません。
お願い
お願いしたいのですが、質問するときは常に、「事実」と「自分の考え」を明確に区別して書いていただけないでしょうか。
今回の質問の場合、「事実」とは、『詳解正規表現 第三版』に実際に書いてあった文章です。これは、質問者さんが同書を読んで感じた「自分の考え」と同じとは限らないです。
- 他人の文章を参考にしたときは、必要に応じて参考にした箇所を引用して示す。
- その上で、引用した文章とは別の文として、自分が考えたことを書く。
何度も質問していらっしゃるのですから、こういう当たり前のことができるようになって下さいませんか。
投稿2017/09/12 05:17
編集2017/09/12 05:26総合スコア4315
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。