2014-10-10 3 views
0

나는 이상한 문제가 있으며, 나는 그것이 간과하고있는 사소한 것이어야한다는 것을 알고 있습니다. 나는 캡처 그룹에 이름을 붙이고 이름을 붙일 때까지 잘 작동하는 간단한 정규식을 작성하고있다. 예를 들어 http://www.regexr.com/에서이를 재현 할 수 있습니다.Regex라는 이름의 캡처 그룹이 작동하지 않습니다.

텍스트에 맞게 :

'1.2.3.4' 

정규식 사용이 잘 작동하고 버전 번호와 일치

'(.*?)' 

. 나는에 정규식을 변경할 때 :

'(?<VersionNumber>.*?)' 

더 이상 일치하고 regexr는 첫 번째 물음표에 Error: Invalid quantifier for target 말한다. 또한 C# 응용 프로그램에서도 동일한 결과를 확인했습니다. 여기서 내가 뭘 잘못하고 있니?

이것은 매우 간단한 예이므로 올바르지 않은 부분을 잘 모르겠습니다. 나는 비슷한 문제를 설명하는 this post을 찾았지만 실제로는 원래의 정규식이 유효하지 않은 이유를 실제로 알려주지 않고 대신 새로운 정규식을 OP에 제공합니다.


UPDATE

답변 regexr.com가 더 이상 이름을 캡처 그룹을 지원하는 없었다, 나는 그것을 다시 썼다 때 잘 작동으로 나는, 주위에 C#으로 처음 내 정규식을 놓 쳤어해야합니다.

+1

[이 게으른 만드는 이유는, '(? . *)'] (http://regex101.com/r/xD7sU2/1) – anubhava

+0

일치하는 텍스트가 다음과 같이 변경된 경우를 대비하여 게으름을 피고 싶습니다. " '1.2.3.4' '5.6.7.8'". 기본적으로 미래의 교정입니다. 그리고 이것은 실제로 문제를 보여주는 단순한 예제입니다. 내가 최종 애플 리케이션에서 실제로 사용하는 정규 표현식이 아니다. 나는 게으른 것을 제거하려고 노력 했는가? 어쨌든,하지만 여전히 같은 문제가 있습니다. – deadlydog

+0

잘 작동하는 곳에 연결된 데모를 보았습니까? non-greedy로 만들려면'. *? '뒤에 무언가를 가져야합니다. – anubhava

답변

2

언어에주의해야합니다. 각 언어는 명명 된 그룹이 정의되는 방식이 서로 다릅니다.

JavaScript가 전혀 지원하지 않습니다.

PHP에서 귀하의 예는 (?P<VersionNumber>.*?)

는 C#에서 사용 할 수 있어야 할 것 중 하나 (?<VersionNumber>.*?) 또는 (?'VersionNumber'.*?)

당신이 여기에 몇 가지 더 예를 찾아 볼 수 있습니다 http://www.regular-expressions.info/named.html

관련 문제