Qt 4.6을 사용하여 프로그램을 작성 중이므로 "SUM(A1:A3)+B1-B3+SUM(D1:D3)/COUNT(D1:D3)"
, , 즉 A1, A3, D1, D3이 아닌 B130, B3과 같은 표현식에서 범위 외 리터럴을 모두 캡처해야합니다. 나는 QRegExp를 사용하려고 시도했지만 negative lookbehind 단정을 지원하지 않으므로 A3, D3과 같은 리터럴을 제외 할 수 없습니다. 내 regexp (?<!:)([A-Z]{1,4}[1-9]\\d{0,3})(?!:)
이 작동하지 않습니다. 귀하의 의견이 필요합니다. 감사. 귀하의 경우에는Qt regexp에서 부정적인 lookbehind 어설 션을 에뮬레이션하는 방법은 무엇입니까?
답변
당신은
(?:^|[^:])\b([A-Z]{1,4}[1-9]\d{0,3})\b(?!:)
첫 번째 그룹은 처음에 빈 문자열이나 콜론을 제외한 모든 문자와 일치를 사용할 수 있습니다. 또한 단어 경계를\b
으로 추가하여 패턴이 A4a
과 일치하지 않게했습니다.
종종 "긍정적 인"패턴을 쓰는 것이 더 간단합니다. 예를 들어, ...
는 셀 참조를 일치하도록 [A-Z]
패턴을 나타내는 함께
(...)(:...)?
를 사용하여, 당신은 결과를 통해 반복 할 때 모든 범위를 버리고, 한 번에 범위와 비 범위를 일치시킬 수 있습니다. 두 번째 캡처 그룹이 비어 있는지 확인하여 일치 항목이 범위인지 여부를 쉽게 감지 할 수 있습니다.
해결 방안을 지원하지 않는 엔진에 대한 검색을 필요로하는 솔루션의 경우, 한 가지 대안을 찾았습니다. 더 복잡한 기술이 있다고는하지만, "combinatoric brute-forcing"이라고 부릅니다. 한 예가 여기에 있습니다 : Validate proxy URL using XML regex pattern.
그러나 두 개 이상의 일치를 찾으려면을 찾아야합니다. 당신은 아마이 자신과 같은 시도했다 : (.. 좀 더 안전 할 수 \b
을 추가 또한, 다시 백 슬래시를 이스케이프 기억)
/[^:]\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:]/
을
를 그리고, 당신이 시도 않은 경우 problem을 확인하십시오. +B1-
까지 읽은 후 첫 번째 일치 항목이 발견됩니다. 따라서 -
이 이미 읽혀 졌으므로 [^:]
에 적절한 문자가 없으므로 다음 셀 참조 B3
을 일치시킬 수 없습니다.
위의 정규 표현식은 문제를 다시 설명하기 위해 일련의 셀 참조 체인에서 다른 모든 일치를 잡을 수 있습니다 (예 : 문자열에 대한
(A1+A2+A3+A4+A5+A6)/(B1+B2+B3+B4+B5+B6)
^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
는 ...에만 표시된 부분은
here 표시, 일치합니다.
단일 정규식에서이 문제를 해결할 방법이 없습니다. 대안 :
비 정규식 방식을 사용하십시오.
당신이 어떤 이유로 해야 사용 정규식, 다음 아마 당신의 유일한 희망은 적어도 이 정규 표현식에 사용할 수하는 경우 (예를 들어,첫 번째 셀 참조를 사용하여 모든 셀 참조 문자열과 같은 공백을 삽입하여 연속적인 셀 참조 체인이 없음).
또는 가능한 경우에는
.cap(1)
,.cap(2)
등을 통해 액세스 할 수있는 부분 집합으로 캡처하는 것이 좋습니다. 다음 작업을 수행 할 수 있습니다.
/[^:]\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:](?:(\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:](?:(\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:](?:(\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:](?:(\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:](?:(\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:](?:(\b([A-Z]{1,4}[1-9]\d{0,3})\b[^:]))?))?))?))?))?))?/
음, 즉, 그래서 여기에 읽기 불가능보다 읽기 쉬운 버전입니다. 척도 XY
은 \b([A-Z]{1,4}[1-9]\d{0,3})\b
셀 참조 표현식으로 확장됩니다. 그런 다음 위와 동일합니다 :
패턴을 참조 하시겠습니까? 앞으로 나아 가기 전에 this regex matches our example perfectly을 볼 수 있습니다. 단점은 정규 표현식을 정의하는 한 일련의 연속 셀 참조 만 처리 할 수 있다는 것입니다. 위의 코드는 7을 처리 할 수 있으며 그 이상의 코드는 breaks입니다.
아,이 솔루션을 게시하기 전에 Qt가 look-_aheads_를 지원하는지 확인 했어야합니다. 나는 오해했다. :) –
QR 5.0의 QRegularExpression은 (고정 길이) lookbehind 어설 션을 지원합니다.
https://bugreports.qt-project.org/browse/QTBUG-2371은 2011 년 3 월 22 일에 폐쇄되었습니다. Qt 5.0은 1920 년 12 월에 릴리스되었습니다.
- 1. lookbehind 어설 션을 lex에서 어떻게 사용할 수 있습니까?
- 2. 파이썬 정규식 부정적인 lookbehind
- 3. 프로그래밍 방식으로 어설 션을 설정하는 방법은 무엇입니까?
- 4. Eclipse에서 스칼라 어설 션을 비활성화하는 방법은 무엇입니까?
- 5. regex에서 선택적 어설 션을 만드는 방법은 무엇입니까?
- 6. 개미에 어설 션을 활성화
- 7. 가장 좋은 방법은 SAML 어설 션을 보냅니다.
- 8. 어떻게이 부정적인 lookbehind 정규식을 고칠 수 있습니까?
- 9. 자바 부정적인 lookbehind 정규 표현식 버그?
- 10. NSUInteger가 포함 된 ocunit 어설 션을 단순화하는 방법은 무엇입니까?
- 11. node.js의 navigator.id.get에서 반환 한 어설 션을 확인하는 방법은 무엇입니까?
- 12. JUnit 테스트에서 다중 어설 션을 피하는 방법은 무엇입니까?
- 13. cython에서 컴파일 할 때 python 어설 션을 제거하는 방법은 무엇입니까?
- 14. Visual Studio를 사용하여 어설 션을 자동으로 기록하는 방법은 무엇입니까?
- 15. 정규식 lookbehind 주장 문제
- 16. CString :: Format()은 디버그 어설 션을 발생시킵니다.
- 17. C 컴파일러가 어설 션을 구현하는 방법?
- 18. 라이브러리 빌드 시스템에서 기본적으로 어설 션을 해제해야합니까?
- 19. 원숭이 주자에서 어설 션을 추가하는 방법
- 20. NodeUnit에 사용자 정의 어설 션을 추가하는 방법
- 21. Eclipse v3.7.2에서 어설 션을 활성화하는 방법
- 22. 왜이 ViewResult가 MSpecMVC의 ShouldBeAView 어설 션을 실패합니까?
- 23. Tomcat에서 java 어설 션을 활성화하는 방법
- 24. 포인터 연산을 포함하는 어설 션을 증명하는 방법
- 25. 어설 션을 켜고 끌 수있는 방법이 있습니까?
- 26. Play에서 어설 션을 활성화하십시오! 개발 모드
- 27. Nexus 4를 에뮬레이션하는 방법은 무엇입니까?
- 28. boost :: lower가 is_singular 어설 션을 실패하게하는 원인은 무엇입니까?
- 29. 정규식 문제 내가 알아낼 수 없다 (부정적인 lookbehind)
- 30. 암호화 된 SAML 어설 션을 생성하는 Java 코드
"긍정적 인"방식으로 패턴을 개조했으며 정상적으로 작동합니다. 고맙습니다! – VinS