正規表現 (ここでは PHP と JavaScript のいずれか) のドル記号 "$" に関する問題は、以前に何度も議論されていることを認識しています: はい、その前にバックスラッシュ "\" を追加する必要があることを知っています (ただし、ドル記号を一致させる正しい方法は "\$" です。...そこに行って、それを行って、正常に動作します。
しかし、ここに私の新しい問題があります。「\b」でマークされた単語境界の隣にドル記号「\$」があります。... 次の例は、regexpal.com などで簡単に再現できます。
検索する次のテキストから始めましょう。
50ドル
ドル 50
50ドル
50米ドル
私の正規表現は、「USD」、「Dollar」、または「$」のいずれかを見つけるはずです。簡単です: 試してみましょう
(米ドル|ドル|\$)
成功: "$"、"USD"、および "Dollars" を含む両方の "Dollar" を検出します。
しかし、多肢選択の後に単語境界を追加して、「ドル」をスキップしてみましょう。
(米ドル|ドル|\$)\b
そして、これは問題です: "USD" が一致し、"Dollar" が一致し、"Dollars" が拒否されます... しかし、適切にバックスラッシュ (またはエスケープ) された単一の "$" も拒否されます。 .
括弧内の複数選択とは関係ありません:
\$
対。
\$\b
それはまったく同じです。最初のものはドル記号に一致しますが、2 番目のものは一致しません。
別の発見:
(米ドル|ドル|\$) \b
")" と "\b" の間に空白の " " を挿入すると、実際に機能します。ただし、その回避策はすべての状況で実行できるとは限りません (空白以外の単語境界がある場合)。
単語の境界が関係している場合、エスケープされたドル記号が見つからないようです。
この謎を解決するためのあなたの提案を聞きたいです。-- よろしくお願いします!