1

;으로 끝나는 문자열을 매치하여 선택적으로 만들고 필요치 않으므로 해당 그룹을 캡처하지 않습니다. 그러나 첫 번째 조건 이후에 발생하는 문자열의 나머지를 캡처합니다.문자열을 기호까지 일치시켜 선택적으로 만듭니다. 일치하는 선택적 문자열을 포착하지 마십시오.

텍스트 1 : transfer from source not possible; snapmirror may be misconfigured, the source volume may be busy or unavailable.

텍스트 2 : snapmirror may be modified, the destination volume is unavailable.

원하는 출력 :

snapmirror may be misconfigured, the source volume may be busy or unavailable

snapmirror may be modified, the destination volume is unavailable

내가 내 정규식 '수없는 소스에서 전송'을 찾고 싶을 또는 전에 그 방법으로 발생하는 문자열 세미콜론 및 그룹으로 이것을 캡처하지 내 정규식 싶습니다.

또한 세미콜론 뒤에 나오는 모든 것을 캡처하고 싶습니다.

정규식 시도 : (?:.*;)? (.+)\..*

위의 정규식은 텍스트 2에 대한 텍스트 1 작동하지만. 누구든지이 문제를 해결하도록 도와 주시겠습니까?

+1

(? :. *;)? (. +) \ .. * 이것은 내가 사용하는 RegeX입니다 – Designerztouch

+0

"RegeX 시도"는 후크 무장 괴물과 그의 조수처럼 보입니다. – CornSmith

+0

사실, 그 정규식은 제가 사용한 다른 정규식의 마지막 비트였습니다. 더 나은 제안하나요? 선택 캡쳐가 수정 된 것 같습니다. 내가 필요한 문자열의 나머지 부분을 캡처하기위한 제안이 필요하다. 예를 들어 <게으른 여우가 창문에서 튀어 나오다>를 잡기 위해 어느 것이 사용 되었습니까? – Designerztouch

답변

0

정규식이 작동해야하는 것처럼 보이지만 개선 될 수 있습니다.

  • 일치 항목은 항상 문자열의 시작 부분에서 시작해야합니까? (그건 꼭 맞는 질문 이니, 그 가정을 할 수 없다면 그 질문은 전혀 말이되지 않습니다.)

  • 둘 이상의 세미콜론이 있을까요? 그렇다면 비 캡처 부분을 첫 번째 부분 또는 마지막 부분까지만 확장 하시겠습니까?

  • 문자열의 끝에서 항상 끝나야합니까, 아니면 마침표 만 일치해야합니까? 한 번 이상의 기간이있을 수 있습니까?

이 최소한의 변경 정규식은 당신이 원하는 것을 할 것, 그리고 추가 된 앵커는 아마 당신의 요구를 충족하기에 충분한 성능을 향상시킬 수 :

^(?:.*?;\s*)?(.+)\..*$ 

이 하나가 상당히 빨리해야한다; 부정 문자 클래스 ([^;]*[^.]+)와 .*를 교체하는 것은 거의 완전히 되돌아 제거 :

^(?:[^;]*;\s*)?([^.]+) 

당신이 정규식을 지원하는 맛, 원자 그룹을 사용하고 있고 소유 한정사가 할 수 있으면 더 빨리 :

^(?>[^;]*+;\s*+)?+([^.]++) 
+0

고마워 앨런. 아주 유용한 팁. 귀하가 제안한 RegEx가 이전 근무일보다 크게 도움이되어야한다고 생각하십시오. – Designerztouch

관련 문제