重複の可能性:
Javaで正規表現のテキストをエスケープする方法
ユーザーの口が小さいという問題があります。
詳細を説明すると、私のAndroidアプリケーションはGoogle音声検索を使用して音声結果を返します。ユーザーが「不快な言葉をブロックする」に設定を適用すると、「goaway」が「g *a***」として返されます。
ユーザーが言ったことを確立しようとするとき、私はしばしば次のような一般的なマッチングを使用します。
if(voiceResult.matches(someCommand)) { //do something
ユーザーがわいせつな発言を選択した場合、次のエラーが発生します。
java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index X
特に私のテストから、Google音声検索は汚い心を持っているようで、最もランダムな文の途中で冒とく的な単語を返すことが多いため、すべてのユーザーに冒とくしたり、フィルターをオフにしたりしないように要求することはできません。
だから、私はこの不測の事態に対処する方法に少し迷っています...文字列内の「正規表現を無視する」方法を探しましたが、空白を描画し、動的にどのように処理するかを理解できません文字列内に含まれる*の出現をエスケープします。
現在、私の唯一の選択肢は「*」を検出し、それから彼らに罵倒したりフィルターを外したりしないようにうまく頼むようです!
提案を歓迎します!あなたが彼らが彼らの悪いマナーのために近くの力に値すると思わない限り...
注意:「goaway」は現在フィルタリングされていません-これは例でした...。
編集:繰り返しの音声リクエストを確認する最も単純な正規表現の例:
String userWords = "g* a***"
if(userWords.matches(userWords)) { // Then go on to compare userWords with other strings
EDIT2:
String goAway = "g* a***";
String goAway1 = Pattern.quote(goAway);
String goAway2 = Pattern.quote(goAway);
if (goAway1.matches(goAway2)) { \\ do something