2014-01-15 1 views
0

문자열에 정규 표현식을 작성하는 데 도움을 줄 수있는 사람이 있습니까? 동료는 나를 묻습니다. 그러나 A 정규식을 찾지 못했습니다. & B 또는 A^B.정규 표현식 (A 또는 A 또는 A 및 B), (A는 B는 아님)

이 내 실제 코드 내가 사이의 선택의 여지가하는 정규 표현식을 수행 할 수있는 방법

'(Eclipse|Sun)' => array(
        'Got' => 'Power 50', 
        'World' => 'EU'),); 

입니다 : "이클립스"OR "일"OR "& 일 이클립스".

두 번째 질문은 내가 원하지 않는 문자 목록에 대한 [^]에 관한 것입니다. "Eclipse [^ Oracle]"에 대한 정규 표현식을 수행하는 방법 "Eclipse"로 문자열을 선택하고 싶기 때문에 "Eclipse"및 "Oracle"으로 문자열을 갖고 싶지 않기 때문입니다.

'Eclipse[^Oracle]' => array(
        'Note' => 'Density 200', 
        'City' => 'Prague'),); 
+0

당신은 – hwnd

+0

나 '[내다 및 Lookbehind 길이가 0 인 어설] (http://www.regular-expressions.info/lookaround.html) 여기에서 시작할 수 있습니다 그것을보고 있지만, 내가 원하는 것을 발견하지 못했습니다. 오라클은 이클립스에 붙어 있지 않기 때문에 "bla Oracle bla oracle"과 비슷하다. – user3114471

+0

@hwnd 해결책이 있으십니까? 또는 정규식에 대해 더 자세히 설명해 주시겠습니까? – user3114471

답변

1
다음하지

질문 : 정규 표현식을 "Eclipse"또는 "Sun"또는 "Eclipse & Sun"중에서 선택하도록 어떻게 수행 할 수 있습니까?

답 :이 작업을 수행하려면 다음과 같이하십시오. 좋아요 :

(Eclipse&Sun|Eclipse|Sun) 

대체 방법은 첫 번째 표현과 일치하면 두 번째와 세 번째를 시도하지 않습니다. 표현식을 만들 때이를 고려해야합니다.


질문 : 내가 "이클립스"로 문자열을 선택하고 싶지만 때문에 내가 "와 문자열을하고 싶지 않아"이클립스 [^ 오라클] "말에 대한 정규 표현식을 수행 할 수있는 방법 Eclipse "및"Oracle "을 사용합니다.

답 : 다른 단어가 존재하지 않는 동안은 뭔가를 일치 시키려면, 당신은 그것을 일치하기 전에 문자열을 검증하기 위해 긍정적 인 Lookaheads을 사용할 수 있습니다.그래서 같이 : 이클립스 그것은 1

  • 경기는 오라클 경우 실패합니다 숫자로 backreferenced 캡처 그룹으로 '이클립스'를 배치합니다 (?=^.*Eclipse)
    • 을 존재하는 경우

      ^.*(?=^.*(Eclipse))(?!^.*Oracle).*$ 
      
      • 경기는 합격 있음 (?!^.*Oracle)

      여기 6,

      정규식 데모 :

      Regex101, Positive Lookaheads

  • +0

    두 번째 작품에 감사드립니다. – user3114471

    0

    첫째 Eclipse OR Sun OR (Eclipse AND Sun) <=> Eclipse OR Sun

    if (preg_match('~\b(?:Eclipse|Sun)\b~', $str)) { 
    ... 
    } else { ... } 
    

    둘째 Eclipse^Oracle

    if (preg_match('~(?=.*\bEclipse\b)(?!.*\bOracle\b)~', $str)) { 
    

    (?=...)
    (?!...) 다음은