解析反斜槓轉義說我有一個功能templateMap
其中,對於$array
每個子陣列,取代的@n
每次發生(對於某些n
)在給定的$string
其值從該子陣列,子陣列返回的新的數組。也說,我想允許用戶反斜槓的@
符號,(這意味着允許\
到太反斜線)。與str_replace函數
例如:
function templateMap ($string, $array) {
$newArray = array();
foreach($array as $subArray) {
foreach($subArray as $replacements) {
...
}
}
return $newArray;
}
// for grouping mysql statements with parentheses
templateMap("(@)", array(" col1 < 5 && col2 > 6 ", " col3 < 3 || col4 > 7"));
這將產生
array("(col1 < 5 && col2 > 6)", "(col3 < 3 || col4 > 7)")
下面是使用多個參數更復雜的例子 - 可能不容易實現
templateMap("You can tweet @0 \@2 @1", array(
array("Sarah", "ssarahtweetzz"),
array("John", "jjohnsthetweetiest"),
...
));
/* output:
array(
"You can tweet Sarah @2 ssarahtweetzz",
"You can tweet John @2 jjohnsthetweetiest"
)
*/
有沒有一種辦法通過一系列str_replace
調用完成此操作? (與正則表達式或簡單的狀態機相反)。
我想到的一件事是用一些在當前字符串中找不到的奇特字符串(如zzzzzz
)取代\@
,但當然,那麼你必須檢查字符串是否在給定的字符串中,並相應地修改它。
我不知道是該爲OP一個問題,但這種解決方案將不會保留兩個百分號。對於'$ arr = templateMap(「(@ \ @)」,array(「hel %% o」));'它會產生'(hel%o @)'而不是'(hel %% o @)' – mhall 2015-03-19 07:57:15
@mhall,1)感謝上面的貢獻,我會有興趣閱讀它,2)(我是OP),3)很好的捕獲 - 我已經通過分割「@」來修改代碼,然後在替換之前進行解碼。 – 2015-03-19 15:32:33