[英]PHP Regexp (PCRE) - Find a set of all substrings
我有以下字符串,例如:
aaXXccYYeeXX_ZZkkYYmmXX_ZZnnXXooYYuuXX_ZZvv
如何在字符串中找到所有XX.*YY.*ZZ
部分? (可能通過使用preg_match()
)
加上所有較長的比賽,如:
感謝大家的幫助。
我的解決方案基於' bobbogo '解決方案。 謝謝。
正則表達式:
(?=(XX.*?YY.*?ZZ))(?=(.*ZZ))
結果(來自RegexBuggy):
1 XXccYYeeXX_ZZ XXccYYeeXX_ZZkkYYmmXX_ZZnnXXooYYuuXX_ZZ
2 XX_ZZkkYYmmXX_ZZ XX_ZZkkYYmmXX_ZZnnXXooYYuuXX_ZZ
3 XX_ZZnnXXooYYuuXX_ZZ XX_ZZnnXXooYYuuXX_ZZ
4 XXooYYuuXX_ZZ XXooYYuuXX_ZZ
它可以通過更優化嗎? 我在正則表達式方面不是很專業。
乍一看這似乎很直接(如果我遺漏了某些東西,道歉)。 對於第一部分,使用重復匹配:
XX(.*?)YY(.*?)ZZ
對於較長的比賽,我建議單獨匹配:
XX(.*?)YY(.*)ZZ
編輯
啊哈! 模式重疊(感謝大家)。 在這種情況下,您將不得不循環。 在重新嘗試比賽之前,可能最容易剝離任何領先的.*?XX
。 在perl land你會使用
while (/XX(.*?)YY(.*?)ZZ/) {
print "[$1] [$2]\n";
s/^.*?XX//;
}
如果你迫切需要一個正則表達式,那么m//g
在數組上下文中就會出現。 (不確定相應的php可能是什么樣的。)
@a = /XX(?=(.*?YY.*?ZZ))/g;
數組@a
將包含重疊的字符串,但最初的XX
被剝離。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.