2010-12-11 2 views
2

이 패턴에 대한 정규식을 찾으려고 시도했습니다. HTML 소스에서 선택한 것과 같은 문자열이 있습니다.문자열의 특정 부분을 정규식으로 선택하려고 시도했습니다.

<!-- TAG=Something/Something else -->

그리고 가끔은 그냥 : 나는 정규식 그냥 "뭔가", 즉 TAG 사이에있는 모든 = 및 옵션 /를 일치시킬 두 경우 모두

<!-- TAG=Something -->

.

내 첫 번째 시도했다 :

TAG=(.*)[/]?(.*) -->

그러나 첫 번째 괄호 태그 사이에있는 모든 일치하지 = 및 -> 상관없이. 그럼 여기서 올바른 길은 무엇입니까?

답변

2

이 시도 :

TAG=([^/]*)(?:/(.*))?--> 

그룹 1 "뭔가"가 포함됩니다.
그룹 2에는 "Something else"또는 null이 포함됩니다.

Test it.

+0

감사합니다.이 작업은 훌륭하고 간결한 방식으로 이루어졌습니다. 나는^/를 사용하여 시도했으나 어떤 이유로 애플 리케이션이 정규식 (http://www.gethifi.com/tools/regex)을 테스트하기 위해 사용하고 있었다고해서 그것이 유효하지 않다고 말했다. 다시 한번 감사드립니다. – Fredrik

2
<!--.*?=(.*?)(-->|/) 

그것은 당신이 필요한 모든 것을 일치합니다.

TAG=(.*?)[/]?.* --> 

또한 [/]의 사용량이 이상한 것 같다 - 단일 문자를 작성하는 문자 클래스를 필요로하지 않습니다

1

이 아닌 욕심 수정 ?를 사용합니다. 이 특별한 구문에 대한 가장 일반적인 설명은 /을 정규식 구분 기호로 사용했기 때문일 수 있습니다. 즉, /은 특수 문자로 처리됩니다. 많은 (모든 것은 아님) 정규 표현식에서는 #과 같은 다른 구분자를 사용하여이 문제를 해결할 수 있습니다. 이렇게하면 슬래시를 벗어날 필요가 없습니다.

+0

그는'\ /'대신'[/]'를 사용했습니다. 나는 그들이 그것을하는 이유를 모른다. 그러나 나는 다른 사람들에 의해 여기에 그렇게 행해진 것을 보았다. –

+1

@Alin Purcaru : 사람들은 기울기 이쑤시개 증후군을 피하기 위해'\ /'대신'[/]'를 사용한다고 생각합니다. http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome - 괜찮습니다. 그러나 제 의견으로는 구분자를 변경하는 것이 훨씬 더 좋습니다. –

+0

많은 경우 가능하지 않습니다. RegEx를 리터럴로 정의 할 때와 같습니다. 그러나 당신의 주장은 여전히 ​​의미합니다. –

관련 문제