2010-01-28 3 views
3

정규식에서 다음과 같은 상황이 있습니다. ^b?A+b?$정규식 : 선택적으로 시작 부분이나 끝 부분에서 일치하는 방법은 무엇입니까?

따라서 b은 0 또는 1 번 문자열의 시작 부분에서을 일치시킬 수 있으며 A는 xxx20을 한 번 이상 일치시켜야합니다. 다시 b은 0 또는 1 번 문자열 끝에를 매치 할 수 있습니다.

이제이 정규 표현식을 문자열의 시작 부분이나 끝 부분에서 b과 일치 할 수 있도록 수정하려고합니다.

어떻게해야합니까?

답변

9

당신이 사용할 수있는 멋진 "또는"연산자는 정규 표현식에서 사용할 수 있습니다.

^(b?A+|A+b?)$ 
+0

이것은 내가 원했던 것입니다. 모든 답변을 주셔서 감사합니다. – Ngm

+0

+1,이 방법도 효과가 있으며, 첫 번째 시도에서 올바르게 처리 할 수 ​​있습니다. :) –

1
^(b+A+b?|b?A+b+)$ 

왜 작동하지 않습니까?

+1

나는 그가 bbAAA _or_ AAAbb를 원한다고 생각합니다. – Bobby

+0

실제로 b는 0 번 또는 1 번 이상 반복 할 수 있습니다. – Ngm

+0

@Ngm : "반복"이라는 단어는 오해의 소지가 있습니다. 목표를 표현할 수있는 더 나은 방법에 대해 질문을 편집 한 방법을 알아보십시오 (희망 사항). @ 단 : "0 또는 1"문제 외에도 정규 표현식은 OP가 원하지 않는 문자열의 시작과 끝 모두에서 'b'와 일치합니다. –

2

이 시도 :

^(bA+|A+b?)$ 

이는 적어도 하나의 A, 또는 시작시 일부 A의 선택적 끝에 b를 시작에서 b을 허용합니다. 이는 두 가지 옵션 중 하나만 테스트하면됩니다 (Ab으로 시작할 수 없다고 가정 할 때) 모든 가능성을 포함하며 일치하지 않는 경우 허용되는 답변보다 약간 더 빠릅니다.

여기 다른 답변과 다른 점은 표현식 A가 매우 복잡하지만 b가 단순한 경우 일반 표현식에서 A의 전체 표현식을 반복하지 않으려는 부정적인 미리보기를 사용하는 것이 좋습니다.

^(b(?!.*b$))?A+b?$ 

A가 복잡하면 두 번째가 더 읽기 쉽지만 성능이 문제가되는 경우 첫 번째 방법을 권합니다.

+0

을 편집해야한다면 잘못된 지시 사항입니다. 이제'^'는'|'의 처음 부분에만 적용되고'$'는 두 번째 부분에만 적용됩니다. – Amarghosh

+0

@Amarghosh : Fixed, thanks .... –

관련 문제