9

正規表現 (ここでは PHP と JavaScript のいずれか) のドル記号 "$" に関する問題は、以前に何度も議論されていることを認識しています: はい、その前にバックスラッシュ "\" を追加する必要があることを知っています (ただし、ドル記号を一致させる正しい方法は "\$" です。...そこに行って、それを行って、正常に動作します。


しかし、ここに私の新しい問題があります。「\b」でマークされた単語境界の隣にドル記号「\$」があります。... 次の例は、regexpal.com などで簡単に再現できます。

検索する次のテキストから始めましょう。

50ドル

ドル 50

50ドル

50米ドル

私の正規表現は、「USD」、「Dollar」、または「$」のいずれかを見つけるはずです。簡単です: 試してみましょう

(米ドル|ドル|\$)

成功: "$"、"USD"、および "Dollars" を含む両方の "Dollar" を検出します。

しかし、多肢選択の後に単語境界を追加して、「ドル」をスキップしてみましょう。

(米ドル|ドル|\$)\b

そして、これは問題です: "USD" が一致し、"Dollar" が一致し、"Dollars" が拒否されます... しかし、適切にバックスラッシュ (またはエスケープ) された単一の "$" も拒否されます。 .

括弧内の複数選択とは関係ありません:

\$

対。

\$\b

それはまったく同じです。最初のものはドル記号に一致しますが、2 番目のものは一致しません。


別の発見:

(米ドル|ドル|\$) \b

")" と "\b" の間に空白の " " を挿入すると、実際に機能します。ただし、その回避策はすべての状況で実行できるとは限りません (空白以外の単語境界がある場合)。


単語の境界が関係している場合、エスケープされたドル記号が見つからないようです。

この謎を解決するためのあなたの提案を聞きたいです。-- よろしくお願いします!

4

1 に答える 1