2013-05-08 3 views
0

현재이 정규식을 가지고 있습니다 : this\.(.*)?\s[=,]\s, 그러나 나는 고칠 수없는 피클을 발견했습니다.욕심 많고 욕심이없는 정규식

나는 작동하는 다음 Regex를 시도했지만, 원하지 않는 공간도 캡처합니다 : this\.(.*)?(?<=\s)=|(?<!\s),. 내가하려는 것은 식별자 이름을 일치시키는 것이다. 예를 들어 내가 원하는 결과는 다음과 같습니다.

this.""W = blah; 이는 ""W과 일치합니다. 위의 두 번째 정규 표현식은 거의 완벽하게 처리하지만 첫 번째 그룹의 = 앞에있는 공간도 캡처합니다. 누군가가 올바른 방향으로 나를 고칠 수 있습니까?

편집 : this. "$ = blah;

EDIT2을 : 간단하게 와일드 카드 그룹에 [^\s]를 사용하지 않는 이유는 가끔 다음과 같은 라인을 얻을 수 있다는 것입니다 지금은 또 다른 문제가있다. 일치하지 않는 라인은 param1.readBytes(this.=!3,0,param1.readInt());입니다. 일치하는 =!3 대신 일치하는 =!3,0. 이 문제를 해결할 수있는 방법이 있습니까? 다시 과 같은 이름이있을 수 있기 때문에 다시 [^,]을 사용할 수 없습니다. ,3$과 일치해야합니다.

+0

어떤 언어로 프로그램을 작성하고 있습니까? –

+0

그래서 쉼표가 this.identifier에 속하는지 또는 함수 인수에 대한 분리 자로 사용되는지 어떻게 알 수 있습니까? –

+0

Regex에서 거꾸로 읽는 방법이 있습니까? 예를 들어,';'에서 시작하여 두 개의','를 통과 할 때까지 작업 한 다음'this '를 찾을 때까지 캡처를 시작하십시오. 아니면 그게 가능하지 않습니다 ... – jduncanator

답변

2

(.*)은 공백을 포함하여 모든 문자와 일치합니다. 는 (.*[^\s])

예에 공백 변화 거기에 끝을하지 강제로 : this\.(.*[^\s])?\s?[=,]\s

를 두 번째 편집를 들어, 언어 파서를하고있는 것처럼 보인다. 정규식은 강력하지만 제한이 있습니다. 이를 위해 문법 파서가 필요합니다.

+0

과 같은 것을 시도 할 수 있다고 생각한다. 새로운 예. – jduncanator

+0

다음이'this \. (. * [^ \ s])? \ s? [=,] \ s'을 시도하십시오 –

+0

매력처럼 작동합니다! 고마워요! 답변을 수정하면 올바른 것으로 표시됩니다. – jduncanator

1

아마 첫 번째 블록에서 공백이 아닌 문자를 캡처 할 수 있습니다.

this\.(\S*)?(?<=\s)=|(?<!\s), 
+0

죄송합니다, 내 질문을 업데이 트거야, 필드 이름에 공백을 포함 할 수 있습니다. – jduncanator