我需要從簡單語法的字符串中提取一些數據。語法是這樣的:即使regex101.com QRegExp不匹配
_IMPORT:[any text] - [HEX number] #[decimal number]
所以我創建的正則表達式,你可以看到下面的代碼:
//SYNTAX: _IMPORT:%1 - %2 #%3
static const QRegExp matchImportLink("^_IMPORT:(.*?) - ([A-Fa-f0-9]+) #([0-9]+)$");
QRegExp importLink(matchImportLink);
QString qtWtf(importLink.pattern());
const int index = importLink.indexIn(mappingName);
qDebug()<< "Input string: "<<mappingName;
qDebug()<< "Regular expression:"<<qtWtf;
qDebug()<< "Result: "<< index;
出於某種原因,不能正常工作,我得到這樣的輸出:
Input string: "_IMPORT:ddd - 92806f0f96a6dea91c37244128f7d00f #0"
Regular expression: "^_IMPORT:(.*?) - ([A-Fa-f0-9]+) #([0-9]+)$"
Result: -1
我甚至試圖刪除錨點^
和$
但這並沒有幫助,也是不受歡迎的。令人討厭的是,如果我將輸出複製到regex101.com,此正則表達式完美工作,如您在此處看到的:https://regex101.com/r/oT6cY3/1
任何人都可以解釋這裏出現了什麼問題嗎?我偶然發現了Qt bug?我使用Qt 5.6。有沒有解決方法?
沒有經驗的正則表達式。但是'IMPORT:**(**'和所有其他)對我來說看起來很奇怪。 - 我希望RegExp匹配'('字符,這不在表達式中,但如果他們有regexp-semantik,請忘記我的評論。 –
@BernhardHeinrich他們使用(引用文檔)「*豐富的Perl-像模式匹配語法*「這意味着捕獲組存在,我已經在過去沒有使用過它們。 –
我發現將'(。*?)'改成'(。*)'有幫助,但不知道爲什麼改變了正則表達式。引擎也沒有幫助...... –