2013-08-14 7 views
0

는 그래서 아래 정규 표현식을 사용하여 문자열을 검색 할 :*에 관한 혼란? 정규 표현식 연산자

border-.*\.5pt 

.5pt의 테두리 두께를 가진 파일의 모든 border-top, border-bottom 등 CSS 호텔을 찾을 수 있습니다. 그것은 일반적으로 훌륭하지만 너무 탐욕 스럽습니다. 아래의 예를 들어

모두 한 번의 매치로 돌아 오면 :

border-top:solid #1F497D .5pt;border-bottom:solid #1F497D .5pt 

내가 두 CSS 속성은 두 개의 별도의 일치가되고 싶어요.

border-.*?\.5pt 

가 비 욕심 수 있도록 ? 사용 :

그래서 나는 내 정규 표현식을 수정했습니다. 그러나, 그 수정 후, 아무것도 일치하지 않습니다.

아무도 왜이 동작을 볼 수 있습니까? 내가 뭘 놓치고 있니?

(그것은 내가 사용하고, 알고있는 가치가있는 경우 마이크로 소프트 익스프레션 웹의이 검색을 할 때 '정규 표현식 찾기'.)

+1

(HTTP를 [나는 단지 그것을 여기에 작동하는지 알 수 있습니다] //regex101.com/r/wV7lF6), 어쩌면 그것은 당신의 앱의 정규식 엔진입니다. – Wrikken

+0

@Wrikken, 당신 말이 맞아요. 필자는 Microsoft 제품 전체에서 정규식 구문에 일관성이 있다고 가정했습니다. PowerShell (내가 사용했던 참조)에는 Expression Web과 다른 연산자가 있습니다. 수업은 배웠다. 그것을 살펴 주셔서 감사합니다! –

답변

8

은 아무도 "정규 표현식"언어가있다. 광범위한 공통점이 있지만 세부 사항은 구현마다 다릅니다. 많은 정규 표현식이 -을 사용하여 욕심없는 비속어 "0 이상", 기타는 *?을 사용합니다. 분명히 Microsoft Expression Web uses @.

간단히 말하면 regexes가 다를 수 있으므로 해당 기능 및 구문의 범위를 찾으려면 RTM을 자주 사용해야합니다 (예 : 변경/역 추적/기타 지원, 문자 그룹화, 집합 약식 등)

+0

고맙습니다. 이 문제가 해결되었습니다. 필자는 Microsoft 제품의 정규식 구문 변경에도 이러한 사실을 인식하지 못했습니다. PowerShell 정규식 참조를 사용하여 Expression Web에 적용 할 것이라고 가정합니다. 답변 해 주셔서 감사합니다. 미래에 대해 잘 알고 있습니다. –

3

.*? 정규 표현식에 대한 "반 패턴"이 가장 나쁘다. 그것은 일반적으로 "Match-something-until-the-string-i-want"패턴으로 사용되지만 그렇지 않습니다.

특히 .*?을 하나의 패턴으로 조합하면 매우 잘못되거나 예기치 않은 결과가 발생할 수 있습니다.

귀하의 경우 - 의견에 명시된대로 - 작동합니다. (어쩌면 당신이 뭔가 잘못한거야?)

그러나 정규식 패턴을 생성 할 때 더 구체적으로 생각하는 것이 좋습니다. 항상 .*?은 아무것도 될 수 없다는 점을 유의하십시오. 또한 당신은 정말로 일치하고 싶지 않아요! 그들이 작성하는 경우, border-(?:[^:]+):\s*(?:[^\s]+)\s+(?:\#[a-fA-F0-9]{6})\s+(?:\d*(?:\.\d+)?)pt;?

그것은, 더 구체적이지만, 주어진 요구 사항과 일치하는 테두리 폭을 sence을 해달라고 모든 공백을 무시하고도 일치 regardles을 : 당신의 예에서

, 나는 이런 식으로 뭔가를 사용하는 것이 .2, 3 또는 4.1입니다. 단일 일치 그룹에서 ?:을 삭제하면 필요한 경우 모든 속성을 일치시킬 수도 있습니다. : 위치, 테두리 유형, 색상 및 두께.

당신의 문자열 패턴 border-([^:]+):\s*([^\s]+)\s+(\#[a-fA-F0-9]{6})\s+(\d*(?:\.\d+)?)pt;?border-top:solid #1F497D .5pt;border-bottom:solid #1F497D .5pt은 일치합니다 :

첫 경기를 :

1.top 
2.solid 
3.#1F497D 
4..5 

두 번째 매치 :

1.bottom 
2.solid 
3.#1F497D 
4..5