2017-05-15 11 views
1

文字列のストリームを入力してJavaアプリケーションを使用します。私は一文字の単語 "C/c"があるかどうかを検出する正規表現が必要ですが、文字 "C/c"だけではありません。例えば1文字の単語の正規表現

  • "私が好きC." - > true
  • "I like Canada。" →false
  • "C" - > true
  • "私はCとC++が好きです。" - >

本当の私は、このパターンは「*c*」のようにするべきだと思う、元*は後者*, .;)!またはスペースの一つである必要があり、文字であってはなりません。

私はちょうど正規表現と混同します。私は[^A-Za-z]{0,}c[\,\.\;\s]{0,}のようなパターンパターンを試しましたが、まだ動作しません。

+0

@Robertなぜ私は答えとして投稿しませんか? –

+0

@Robertもしあなたがいなければ、私は... :) –

答えて

3

使用ワード境界マーカー

String pattern = ".*\\b[Cc]\\b.*"; 

\bは、単語の境界と一致する、すなわち、非文字に次の文字のもの。

Javaのバックスラッシュをエスケープするには、2つのバックスラッシュが必要です。

先頭と末尾にある.*は、Javaが入力の始めと終わりにパターンを固定しようとしていないことを確認します。

+0

あなたの答えをありがとう。これは本当に役に立ちます。しかし、構文検査のような、私が述べていないfurthureの要件については、たとえば、c--は無効です。そこで私は後者の "b。*"を改訂しました。そして、私は最初の "。*"が削除できることに気付きました。 最後の例はここにあります:https://regex101.com/r/C7XICk/1 –

1

\Wを使用してください。 \Wは単語ではない文字です。

\W[cC]\W 

https://regex101.com/r/khvMQk/1

+1

正規表現のウェブサイトに感謝します。テストするのは本当に役に立ちます。そしてそれをより良く改訂するために、最終結果がここにあります:https://regex101.com/r/C7XICk/1 –

0

VARパターン= /(\紀元前\ b)は/私を試してみてください。

https://regex101.com/r/gN5Z8Q/1

+0

あなたの答えをありがとう。あなたが与えたパターンは、 "c"のような単一のステートメントを除いては大丈夫です。これを確認してください:https://regex101.com/r/5uUXkE/1 これは私がhttps://regex101.com/r/C7XICk/1を改訂したものです。とにかく、あなたの答えをありがとう。 –

関連する問題