2013-07-10 2 views
1

하이픈이없는 단어를 허용하는 정규식이 필요합니다. 예를 들어, "non-word sentence"문자열의 경우 "sentence"와 일치해야합니다. 내가 쓴 :내부에 하이픈이없는 단어 일치

"\b(?!\w+[-]\w+)\w+" 

을 그리고 실패

그것은 "문장"뿐만 아니라 "단어"뿐만 아니라 일치합니다.

내부에 하이픈이 포함 된 단어를 무시하는 방법은 무엇입니까?

+1

어떤 정규식 엔진을 사용하고 있습니까? PCRE? 귀하의 태그 상태로 C + + 프로그램을위한인가요? –

+1

@ JesseSmith의 덧글을 추가하려면, 내가 AFAIK, 어떤 C + + 표준 라이브러리가 작동 regexes 이후 (내가 잘못 될 수있는, 어떤 경우에는 내가 해결 될 거라고 기꺼이 너무 궁금 해서요) . C++ 11 핵심 언어는 요즘 꽤 잘 작동하지만 표준 라이브러리는 뒤쳐져 있습니다 ... – syam

+0

@syam : C++은 C++ 11에서 정규 표현식을 지원합니다. http://en.cppreference.com/w/cpp/regex –

답변

0

당신을 위해이 작품겠습니까 :

(?<=[^\s])[a-zA-Z]*(?=[$\s]) 
+0

RegExr에서 작동하지 않습니다. '단어'와 일치하는 것일뿐입니다. –

+0

@Jesse Smith, 당신이 옳다는 것을 알 수 있습니까? 왜 그럴까요? (? <= [^ \ s])는 문자열의 시작 부분이나 공백 부분과 일치하도록 강제 할 것입니다. 그래서 그것은 단어와 일치하지 않아야합니다. – Jbad26

+0

[^ \ s]은 공백이 아닌 다른 문자와 일치합니다. 그래서 긍정적 인 표정 뒤에서 주장하는 것은 '내 현재 위치가 공백이 아닌 다른 것보다 먼저 나타 났는가?'라고 말하고있다. 우리가 요구하는 것이 아닙니다. 우리는 '내 위치가 하이픈 앞에 붙지 않았습니까?'라고 묻고 있습니다. –

3

좋아, 여기 PCRE에 대한 하나 (펄 호환 정규 표현식 시스템을 대부분 그 수단) :

(?<![-])\b[a-zA-Z]+\b(?![-]) 

나를 아래로 휴식하자 당신을 위해 :

: 부정적인 눈살을 찌푸리기 - "그 다음 일은 바로 앞에있는 것을보고 하이픈 인 경우이 일치는 무시하십시오"

\b[a-zA-Z]+\b : 단어 경계, 단어, 단어 경계. 우리의 '것'.

(?![-]) : 음 예견 - 내가 가장 좋아하는 온라인 정규식 시험기, RegExr에서

Here it is "바로 뒤에 일을보고는 하이픈이 있다면,이 경기를 무시 일치하는 것.".

+0

이봐, 제시, 룩백 + 물건 + 룩 어서 타고 정말 똑똑해. 많이 고마워! – eger

+0

문제가 해결되면 질문을 수락 할 수 있습니까? 그것은 미래에 동일한 문제가있는 사람들을 도울 것입니다. –