2017-05-15 8 views
1

문자열 입력 스트림이있는 앱에 Java를 사용합니다. 한 문자가 "C/c"인지 여부를 감지 할 수있는 정규 표현식을 원하지만 "C/c"라는 문자는 길지 않습니다. 예를 들어한 글자 단어에 대한 정규식

:

  • 는 "나는 C를 좋아한다" -> true
  • "나는 캐나다가 좋아." → false
  • "C" -> true
  • "나는 C 및 C++을 좋아합니다." ->

사실 나는이 패턴은 "*c*"처럼해야한다고 생각, 이전 * 후자 *, .;)! 또는 공간 중 하나 여야합니다, 편지해서는 안됩니다.

난 그냥 정규식과 혼동스러워. [^A-Za-z]{0,}c[\,\.\;\s]{0,}과 같은 패턴 패턴을 시도했지만 아직 작동하지 않습니다.

+0

@ 로버트 왜 답으로 게시하지 않으시겠습니까? –

+0

@ 로버트, 그렇지 않으면 ....... –

답변

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)를 시도/I;

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

+0

답장을 보내 주셔서 감사합니다. 당신이 준 패턴은 "c"와 같은 단일 문장을 제외하고는 꽤 괜찮습니다. 다음을 확인하십시오 : https : //regex101.com/r/5uUXkE/1 그리고 이것이 제가 수정 한 내용입니다. https : //regex101.com/r/C7XICk/1. 어쨌든, 당신의 대답에 감사드립니다. –