ReflectionClass::getDocCommentを介して取得したドキュメントブロックからカスタムアノテーションを解析しようとしています。"/(@\w+)\s+([^@]+)/"
フラグ付きの正規表現でpreg_match_allを使用すると、PREG_SET_ORDER
希望どおりの結果が得られると思いました。インタラクティブシェルでテストしたところ、金色に見えました。
私がテストしようとは思わなかったのは@author
、phpdocのタグでした。著者タグのオプションの電子メールアドレス(明らかに)には、が含ま@
れています。\b
正規表現の文字クラス内で、単語の先頭にあることを要求するために使用することはできません@
。これは、単語の境界文字としてではなく、バックスペースとして解釈されるためです。
インスピレーションが必要です!
アップデート:
Arneに感謝します、あなたの答えは私にいくつかのアイデアを与えました、しかし私は目前の特定の問題だけに適応するものより一般的な解決策を好みます。
これまでに2つの可能性を考え出しました。最初のものは、現在ある後続スペースがある場合にのみ機能しますが、常に存在することを保証できるかどうかはわかりません。2つ目は関係なく機能しているように見えますが、はるかに少ないです...問題ありません。
最初の正規表現は"/(@\w+)\s+((?:[^@]\S*?\s+)*)/"
2番目の正規表現は"/(@\w+)\s+((?:[^@]\S*?(?:\s|$)+)*)/"
おそらく誰かが私が2番目のものを片付けるのを手伝ってくれるでしょう。