2017-10-26 2 views
0

에서 나는 다음과 일치하는 정규 표현식을 가지고 : 사용 또는 정규식 표현

somedomain.com/services/something 

는 기본적으로 나는 그것을 확인해야합니다/서비스가 존재합니다.

\/services* 

하지만 /services 또는 /servicos 일치해야합니다

내가 사용하고 작업하는 정규식입니다. 나는 다음을 시도 :

(\/services|\/servicos)* 

그러나 이것은 24 경기를 보여줍니다! https://regex101.com/r/jvB1lr/1

이 정규 표현식을 만드는 방법은 무엇입니까?

+0

내 대답을 읽을 기회가 있었습니까? 네가 실제로하고 싶은게 궁금해. 어쩌면'/ servic [eo] s (? =/| $)'가 가장 잘 작동 할 것입니다. –

답변

2

(\/services|\/servicos)*은 0 회 발생 건수가 /services 또는 /servicos과 일치하며 이는 입력 문자열 내부의 빈 문자열과 일치 할 수 있음을 의미합니다.

당신은 그룹 /(services|servicos) 같은 대안과는 * 한정사를 제거 할 수 있지만이 경우에,이 문자열은 1 개 문자에 차이가 같은 문자 클래스 [oe]를 사용하는 것이 훨씬 낫다.

/servic[eo]s 

당신은, 패턴 끝에 /servic[eo]s(?:/|$)(?:/|$)를 추가 할 수있다, (가) regex demo

당신이 전체 subpart에 일치하는지 확인하는 방법을 참조하십시오 :

는 다음과 같은 패턴을 사용하고 싶습니다. 그렇지 않은 당신은 .NET 정규식에 /을 탈출 할 필요가 없습니다

var isFound = Regex.IsMatch(s, @"/servic[eo]s(?:/|$)"); 

참고 : 문자열에서 일치가있는 경우 C#에서

, 당신이 볼 수있는 패턴으로 Regex.IsMatch을 사용할 수 있습니다 특별한 정규식 메타 문자.

패턴

  • / 사항 - /
  • servic[eo]s-services 또는 servicos
  • (?:/|$) - 문자열의 / 또는 끝을.
1

물론 * 한정자는 0 이상을 의미하므로 문제가됩니다. 그것을 제거하고 그것을 잘 작동합니다 :

(\/services|\/servicos) 

는 의미로 제대로 아무것도 일치하지 않습니다 귀하의 예제에서, 당신은 URL에 오타가 있음을 유의하십시오.

Here is an example URL의 오타가 수정되어 예상대로 1 개의 일치를 표시합니다.

0

먼저이 항목에서는 C# (실제로 .Net은 정규 표현식이 아닌 라이브러리를 포함하는 라이브러리 임)을 지정하지만 example의 regex101은 PHP로 설정됩니다. 즉, 슬래시 /\/으로 이스케이프하는 데 필요한 정보와 같은 잘못된 정보를 제공합니다.이 정보는 .Net 정규식에서 필요하지 않습니다. 정규 표현식 언어는 동일하지만 다르게 동작하는 여러 도구가 있으며 PHP는 .NET 정규식과 다릅니다.


()에 두 번째 별 *는 괄호 안의 아무것도가 없을 수 있음을 말하고와 일치 아무것도 모든 단어에 일치하지 널 (null)을 받고있다.


셋째, 단어 전체를 분할 할 필요가 없습니다. 나는이 단어의 공통점을 [ ] 집합으로 추출한다. 그러면 서비스 또는 servicos에서 일치해야하는 "or-ness"가 허용됩니다. 서비스를 찾을 수 없거나하지 않는 경우 이러한

(/servic[oe]s)

으로 알려줍니다. 그 밖의 어떤 것도 필요하지 않습니다.