2012-05-30 1 views
0

를 반환하지 :정규식 표현은 일부 내 정규식 표현과 함께 무엇인지 말해 주실 래요 올바른 용어

expression = (?<=current run date :)([^\.]*?) 
searchString = date : 2012-05-26 03:00:00.000 to current run date : 2012-05-26 04:00:00.000 

표현, 현재 나의 정규식 검색 용어입니다. 나는 계속 정확한 일치를 얻지 만 그것이 원하는 것을 반환하지는 않습니다. ""를 반환합니다.

다음은 가치입니다, 이것은 무엇을 반환하는 정규식을 찾고 있습니다.

value = 2012-05-26 04:00:00.000 

그래서 문자열의 마지막 날짜. 나는 C# .net 4를 사용하고있다.

고마워.

답변

0

원하는 것을 되돌리려면, 첫 번째 캡처 그룹 에서 값을 가져와야하지만 ? char을 제거해야합니다.

비 탐욕적인 운영자와 함께 작동하는 로직 sais이지만, 왜 그렇지 않은지 설명 할 수는 없습니다. 당신이 +* 승수를 변경하는 경우

당신은 숫자와 : 문자 사이의 최초의 우주를 반환 것을 볼 수 있습니다.

1

질문에 대한 대답은 바로 그 끝에 ". 나에게 일치하는 0 개 이상의 문자를주고, 가능한 한 저 많은 줄"

*?

는 일반적으로 * 수단 가능한 한 많이 "탐욕적인 일치"라고합니다. 그 심볼 ?은 욕심쟁이 매칭에서 비 탐욕적 매칭으로 전환하는 수정 자이므로 "0 개 이상의 문자를 매치시켜 가능한 한 FEW로 제공하십시오."가됩니다. 이 경우, 가장 적은 수는

0 그래서 수정이 표현에서 그 ? 문자를 제거하는 것입니다 :

(?<=current run date :)([^\.]*)

편집 : 그것은 또한 당신이를 사용하고 있는지 주목할 필요가 앞을 내다 보면서 할 필요는 없습니다. 미리보기는 비용이 많이 들기 때문에 필요할 때가 지 사용하지 않아야합니다.

current run date :([^\.]*)

당신은 여전히 ​​같은 결과를 얻을 수 있지만, 엔진은 결과 빨리 (적은 오버 헤드)을 반환 할 수 있어야한다 : 당신이 당신의 정규식을 변경할 수 있습니다.

1

?은 0이 아니면 하나 이상의 한정 기호 *이 게으르거나 비 탐욕적인 방식으로 일치하게 만듭니다. 다른 말로하면 가능한 한 일치 시키려고합니다. 이 경우 빈 문자열은 분명히 가능한 적은 양이므로 일치합니다. 그래서 우선, 그걸 제거해야합니다 ?.

는 다음까지, 당신의 문자 순서 [^\.]은 기간 .를 제외한 모든 문자와 일치해야 파서를 알려줍니다,하지만 예상 된 결과는 밀리 초 부분을 명확하게 기간을 포함 .000이 포함되어 있습니다. 이 부분은 문자 시퀀스와 일치하지 않으므로 대신 2012-05-26 04:00:00과 같은 것을 얻을 수 있습니다.

아마도 패턴과 관련이 있습니다.

expression = current run date :\s+(\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}) 

하거나 덜 엄격 할 수 있으며, 두 개의 다음 단어를

expression = current run date :\s+(\S+\s\S+) 

주 일치 : 당신이 형식의 날짜를 얻을 수 있습니다 알고 경우이 같은 작업을해야합니다 : \d은 소수 문자 [0-9]이고, \s은 공백, 탭, 줄 바꿈과 같은 공백 문자입니다. \S은 공백 문자 이외의 문자입니다.

+0

소수 부분을 잘 잡습니다. 나는 자신의 게으른 연산자를 수정하는 데 너무 바빠서 정규 표현식의 핵심 논리가 깨 졌음조차 알지 못했다. – ean5533