任何人都可以請告訴我如何找到匹配給定正則表達式的給定字符串的最長子字符串?拆分最長的正則表達式匹配子字符串
回答
通常,正則表達式引擎會查找字符串中最左邊最長的匹配項(除非您明確地告訴它不要)。
所以正則表達式X+
將永遠匹配在testXXXXX.
。
但是,如果字符串中存在多個潛在匹配項,則標準find
方法將始終找到第一個,而不一定是最長匹配(例如,在test1XXtest2XXXXX.
中)。要在這裏找到最長的匹配,您需要使用正則表達式引擎的findall
方法,然後測量所有匹配的長度。
在C#中,這可能是這樣的:
StringCollection resultList = new StringCollection();
Regex regexObj = new Regex("[ ]+");
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
resultList.Add(matchResult.Value);
matchResult = matchResult.NextMatch();
}
(在此之後,發現在中最長的字符串。)
這裏有一個問題,不過,如果潛在的匹配可以重疊。舉個例子,正則表達式
AB+A
和字符串
ABABBA
如果應用正則表達式,你只能找到ABA
因爲正則表達式引擎在第一場比賽之後消耗的第二A
,所以它開始第二次嘗試在B
的BBA
,當然失敗了。這是「最左邊最長」行爲的後果,如果你想規避這種情況,你必須「手動」重新應用正則表達式到整個字符串,然後到整個字符串減去第一個字符,然後到整串減去前兩個字符等。
爲了解決重疊問題,可以將可能會在預見中重疊的部分放置,以免它被佔用。 – 2011-03-15 02:19:20
循環遍歷匹配並比較長度。
如果潛在的匹配重疊,那將失敗。 – 2010-11-10 10:28:00
- 1. 包含正則表達式匹配的拆分字符串
- 2. 匹配正則表達式的字符串的最小長度
- 3. 匹配匹配字符串的正則表達式的子串
- 4. Javascript正則表達式 - 正則表達式拆分字符串
- 5. 正則表達式字符串拆分
- 6. 正則表達式拆分字符串
- 7. 正則表達式正則表達式匹配字符串
- 8. 正則表達式匹配字符串
- 9. 正則表達式匹配字符串
- 10. 正則表達式匹配字符串
- 11. 正則表達式匹配字符串
- 12. 正則表達式匹配字符串
- 13. 正則表達式匹配字符串
- 14. 正則表達式匹配字符串
- 15. 正則表達式匹配字符串
- 16. 正則表達式字符串匹配?
- 17. 正則表達式幫助,匹配長字符串,選擇子字符串
- 18. 正則表達式將幾行中的長字符串拆分
- 19. 正則表達式則表達式匹配的字符串
- 20. Java正則表達式最長匹配
- 21. 正則表達式通過其中間字符匹配拆分字符串
- 22. 重複字符匹配正則表達式匹配字符串
- 23. Postgres正則表達式子字符串或正則表達式匹配
- 24. VC++正則表達式匹配長的字符串
- 25. perl正則表達式匹配字符串長度
- 26. 如何快速匹配長字符串和正則表達式?
- 27. 正則表達式匹配字符串與最小字數
- 28. C#正則表達式匹配VS對同一個字符串的拆分
- 29. 從字符串開頭的正則表達式匹配和拆分
- 30. 正則表達式匹配最短匹配而不是最長
潛在匹配之間可以有重疊嗎?也許一些示例字符串和正則表達式有助於說明問題。 – 2010-11-10 10:27:34
例如,假設我有一個正則表達式「[] +」,它匹配一個或多個空格。如果我有字符串「測試<-spaces->」。我希望能夠匹配「測試」和「。」之間的所有空格。 – Miguel 2010-11-10 10:28:52
您可以編輯您的原始問題以添加示例。無需在評論框中填充它。 – 2010-11-10 11:01:13