펄에서 잘 작동 다음과 같은 정규 표현식이 있습니다QRegexp idiosyncracies (perl과 비교) : 게으른 수량 한정자없이이 regexp을 작성하려면 어떻게해야합니까?
Classification:\s([^\n]+?)(?:\sRange:\s([^\n]+?))*(?:\sStructural Integrity:\s([^\n]+))*\n
이 문자열에 일치하도록되어 데이터 형식의 유형은 다음과 같습니다
Classification: Class Name Range: xxxx Structural Integrity: value
Classification: Class Name Structural Integrity: value
Classification: Class Name
즉 다음 "범위"와 "구조 무결성"필드는 선택 사항입니다. 따라서 원하는 결과는 다음과 같습니다.
{
$& [Classification: Class Name Range: xxxx Structural Integrity: value ]
$1 [Class Name ]
$2 [xxxx ]
$3 [value ]
$& [Classification: Class Name Structural Integrity: value ]
$1 [Class Name ]
$2 [value ]
$& [Classification: Class Name ]
$1 [Class Name ]
}
표현식에? 게으른 한정어를 두 곳에서 사용합니다. Qt는 true로 설정하면, 표현이 정보 비 욕심
무장에 모든 한정사를 만드는 "최소한의"속성을 사용하는 대신이 연산자는 내 코드를 작성, QRegExp에 의해 지원되지 않습니다
QRegExp rx("Classification:\\s([^\\n]+)(?:\\sRange:\\s([^\\n]+))*(?:\\sStructural Integrity:\\s([^\\n]+))*\\n");
rx.setMinimal(true);
그러나 결과가 정확하지 않으며 많은 조정을 한 후에 올바른 캡처를 얻을 수 없었습니다. 이것을 더 많은 코드와 적은 정규식으로 나눌 수 있습니까? 또는 게으른 연산자없이 다시 작성 하시겠습니까? 이 같은
스타 트렉이나 뭐부터 욕심 한정사를 지원 QRegExp::RegExp2이있다? – hirschhornsalz
아니 스타 트랙 .. 아니지만 그것은 공간 관련;) – Casey