2

正規表現のドキュメントでわかるように、 \b は単語の境界に一致します。ひもを用意します

"db bd 方法"

と正規表現

\b(a|b)(c|d)\b

正規表現を実行すると、文字列の「bd」と一致するはずですが、一致しません。

しかし、正規表現が

\\b(a|b)(c|d)\\b

一致します。

違いを説明できますか?

4

2 に答える 2

4

ここで作業中のエスケープのいくつかの層があります

正規表現----------------->| 正規表現リテラル->| 文字列リテラル
------------------------- + ------------------ + ----- ----------
単語の境界| \ b | \\ b
交互("a"または"b")| (a | b)| (a | b)
交互("c"または"d")| (c | d)| (c | d)
単語の境界| \ b | \\ b
于 2012-10-22T10:22:58.693 に答える
1

それが C または C++ プログラムの場合、コンパイラ自体が '\b' を解釈してコンパイル中に置換する可能性があるため、最初にコンパイラからエスケープする必要があります。

だからあなたが持っているなら

char *regex = "\\bword";

ソース ファイルで、それを正規表現関数に渡すと、'\bword' が返されます。


編集

それがObjective-Cに当てはまるかどうかはわかりません。経験がありません。

于 2012-10-22T10:16:45.453 に答える