簡體   English   中英

PHP Regexp(PCRE) - 查找所有子串的集合

[英]PHP Regexp (PCRE) - Find a set of all substrings

我有以下字符串,例如:

aaXXccYYeeXX_ZZkkYYmmXX_ZZnnXXooYYuuXX_ZZvv

如何在字符串中找到所有XX.*YY.*ZZ部分? (可能通過使用preg_match()

  • XX cc YY eeXX_ ZZ
  • XX _ ZZkk YY mmXX _ ZZ
  • XX _ ZZnnXXoo YY uuXX _ ZZ
  • XX oo YY uuXX_ ZZ

加上所有較長的比賽,如:

  • XX cc YY eeXX_ZZkkYYmmXX_ZZnnXXooYYuuXX_ ZZ

感謝大家的幫助。

我的解決方案基於' 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM