말, 나는이 같은 DN 문자열, 뭔가가있는 경우 :정규 표현식에서 부울 AND 조건을 사용할 수 있습니까?
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
어떻게 정규 표현식을 만들기 위해 모두 OU=Karen
및 OU=admin
가있는 경우에만 DN을 선택하기를?
말, 나는이 같은 DN 문자열, 뭔가가있는 경우 :정규 표현식에서 부울 AND 조건을 사용할 수 있습니까?
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
어떻게 정규 표현식을 만들기 위해 모두 OU=Karen
및 OU=admin
가있는 경우에만 DN을 선택하기를?
이 전체 문자열과 일치하는 정규식 내다 솔루션입니다 그것은 단지 참조를 위해 임의의 순서로 필요한 부품이 포함 된 경우. 당신이 구성 변수의 어떤 종류의 패턴을 저장하지 않으면, 그래도 nhahtdh의 솔루션을 다루고 싶어요.
/^(?=.*OU=Karen)(?=.*OU=admin).*$/
^ - line start
(?= - start zero-width positive lookahead
.* - anything or nothing
OU=Karen - literal
) - end zero-width positive lookahead
- place as many positive or negative look-aheads as required
.* - the whole line
$ - line end
정확한 문자열을 검사하기위한 조건의 수만큼 또는 indexOf()
수만큼 지정할 수 있습니다. 정규식이 필요 없습니다.
확장 가능한 정규 표현식 (더 많은 조건을 지원할 수 있음)은 앞을 봐도 가능하지만 더 잘 수행 될지는 의문입니다. 당신이 같은 문자열에 대한 조치를 여러 번 이러한 유형의를 수행 할, 많은 토큰이 문자열이있는 경우
는, 당신은 몇 가지 데이터 구조에 문자열 저장을 구문 분석 고려할 수 있습니다.
아니, 아니 당신이 vi
을 사용하지 않는 : 그것은 \&
하지만 운영자
/(OU=Karen.*OU=admin|ou=admin.*OU=Karen)/
이 충분히 가까이 될 수도, 또는 유사한 있습니다. 당신이 정규식을 사용해야하는 경우
, 당신은 당신이 하나의 정규식 모든, 또는 하나 정규식을 할 필요가 없습니다 실현
/OU=Karen.*?OU=admin|OU=admin.*?OU=Karen/
+ +1 욕심이없는 정규식 – rekire
를 사용할 수 있습니다.
정규식은 입력 클래스를 잡는 데는 매우 적합하지만 두 개의 고정 문자열이있는 경우 두 가지 모두에 형식 방법을 사용하고 결과를 and
만 사용할 수 있습니다.
또는 정규 표현식을 사용해야하는 경우 을 두 번 (문자열 당 한 번) 사용하고 and
개의 결과를 함께 사용할 수 있습니다. 당신이 하나의 정규식으로 할 필요가있는 경우
, 당신은 같은 것을 시도 할 수 :
,OU=Karen,.*,OU=admin,|,OU=admin,.*,OU=Karen,
을하지만 당신은 또한 그 연은 시작 또는 끝에서 나타날 때 걱정해야합니다 선 및 모든 종류의 다른 가장자리 경우 (시작 또는 끝에 하나 또는 둘 모두, 서로 옆에, Karen7
또는 administrator-lesser
과 같은 이름 등).
아마 같은 괴물 뭔가 끝날 것 모든 가능성을 허용하는 데 :
^OU=Karen(,[^,]*)*,OU=admin,|
^OU=Karen(,[^,]*)*,OU=admin$|
,OU=Karen(,[^,]*)*,OU=admin,|
,OU=Karen(,[^,]*)*,OU=admin$|
^OU=admin(,[^,]*)*,OU=Karen,|
^OU=admin(,[^,]*)*,OU=Karen$|
,OU=admin(,[^,]*)*,OU=Karen,|
,OU=admin(,[^,]*)*,OU=Karen$
,하지만 고급 enouge 정규식 엔진이 작은 뭔가를 환원 될 수있다하는 것은 (비록에게 그 가능성이 될 것입니다 모든 전방보고/뒤로 추적으로 인해 더 빨라질 수 있습니다.이 복잡한 정규식없이 개선 될 수 있다는
가한 가지 방법은 문자열을 마사지하는 것입니다 조금 전에 손 그래서 경계 검사가 필요하지 않습니다 : 그것은 시작하고 쉼표로 끝나도록
newString = "," + origString.replace (",", ",,") + ","
그리고 내의 모든 쉼표가 중복됩니다
,321 : 다음,OU=Karen,,OU=Office,,OU=admin,,DC=corp,,DC=Fabrikam,,DC=COM,
당신이 훨씬 간단 확인 만하면됩니다 0
이 언급 한 모든 잠재적 인 문제를 제거합니다
Karen2
과 같은 확장 이름이 실수로 일치합니다. 모두를 무시 str = "OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM"
elems[] = str.splitOn(",")
gotKaren = false
gotAdmin = false
for each elem in elems:
if elem = "OU=Karen": gotKaren = true
if elem = "OU=admin": gotAdmin = true
if gotKaren and gotAdmin:
weaveYourMagicHere()
이를 : 아마
(언어가 허용하는 경우)이 작업을 수행 할 수있는 가장 방법은 단순히 무언가 같이 쉼표에 문자열을 분할하고이를 검토하는 것입니다 순서가 나타날 수 있으며 엣지 경우를 감지하는 데 필요한 정규식 "체조"를 우회 할 수 있습니다.
은 또한 아마 당신은 (OU \ = 카렌 같은 것을 사용할 수 있습니다
:-)에 해당하는 정규식보다 더 많은 읽을 수 있다는 장점이있다
안녕하세요, 스택 오버플로를 환영합니다. 이것은 질문에 잘 대답 할 수 있습니다. 그러나 약간의 설명은 항상 좋은 아이디어입니다. S/O에 관한 초보자에게는 당신에게서 두세 가지를 배울 수있는 힙이 있습니다. 그리고 당신에게 분명 할 수있는 것은 그들에게는 없을 것입니다. –
설명 주셔서 감사합니다! – ahmd0