2013-05-24 1 views
0

내가 일치하는 패턴을 만들고 싶습니다PCRE 여러 옵션과 함께 여러 번 일치하는 방법은 무엇입니까?

"foo | bar" 
"baz | foo" 
"foo & bar" 
"baz ; bar" 

즉, "키워드"가 "foo는", "바"와 "바즈"입니다.

적어도 2 개가 표시됩니다.

순서는 중요하지 않습니다.

";", "&"또는 "|" 사이.

이와 일치하도록 만들 수있는 표현식이 있습니까? 키워드의 목록이 실제로 훨씬 더 크다으로

나는 "하드 코딩"일을 찾고 있지 않다, 그런 오히려

(foo|bar|baz)[\|&;](foo|bar|baz) 

방법

,이 더 "일반적인"을 할 수 있습니다.

답변

1

당신은 뭔가를 쓸 수 있습니다 :

^(?=\w)((^|[\|&;])(foo|bar|baz|...other.keywords...)){2,}" 

(면책 조항 :. 테스트하지)

+0

'(? = \ w)'의 역할은 무엇입니까? –

+0

@ TzuryBarYochay : 문자열이 연산자가 아닌 키워드로 시작하도록합니다. (그것없이 패턴은''& foo & bar "'와 같은 것을 받아 들일 것입니다.) – ruakh

0

생각 당신의 "하드 코딩"솔루션이 자신에 얻을 것이다이 같은 정규 표현식에 가까운입니다 , 그러나 이것이 몇몇 스크립팅 환경에 있다고 가정하면보다 일반적인 정규 표현식과 일부 절차 코드를 결합 할 수 있습니다.

예를 들어 /([a-z])[/|&;]([a-z])/과 같은 패턴으로 두 단어를 캡처 한 다음 목록 또는 해시 테이블과 일치하는 단어를 확인하여 일치하는 단어가 있는지 확인할 수 있습니다.

+0

나는 매우 절차적인 코드를 피하려고합니다. –