簡體   English   中英

php正則表達式替換大括號中的空格,包括大括號

[英]php regex to replace spaces in braces including braces

我想知道是否可以使用 RegEx-es 解決這種模板解析問題,我的文本類似於:

'Hello, {{ Na me|{{Surname }}}}. Would you like some drink? {{CoffeePreferred? We have a special discount for coffee}} {{Tea Preferred? We have a special discount for tea}}'

首先,我需要修復變量名稱中的錯誤(變量必須始終緊跟在大括號后面的特殊符號,如“?”或“|”或其他可以是逗號或點的東西 - 這意味着將來可以添加規則)。

Na me , Tea Preferred Surname是變量名的拼寫錯誤。 此外,變量名應該在大括號之后不包含空格后立即開始 - 否則它也是一個錯誤。

然后我需要保持文本原樣。

但是親愛的朋友我們有咖啡特別折扣我們有茶特別折扣是簡單的文字。

所以我的問題是如何用變量中的下划線替換不必要的空格並將它們保留在文本中? 此外,我希望盡可能減少步驟(由於性能影響和我的文本可能占用兆字節)。

我希望我的文字是:

'Hello, {{Na_me|{{Surname}}}}. Would you like some drink? {{CoffeePreferred? We have a special discount for coffee}} {{Tea_Preferred? We have a special discount for tea}}'

我的第一步是提取大括號的內容:

preg_replace_callback(
    '/(\{\{)(.*?)(\}\})/ui',
    function ($matches) {
        echo $matches[2];
});

然后我嘗試用上述規則替換空格,但沒有成功。 我嘗試使用像/[\\s](?!<=\\|)/這樣的斷言和像(\\s(?!\\|))|((?!\\|)\\s)這樣的表達式有人知道嗎?

這是完成這項工作的一種方法:

$str = preg_replace_callback(
    '/\{\{([^|?{}]+)/',
    function ($matches) {
        $ret = trim($matches[1]);
        return preg_replace('/ /', '_', $ret);
    },
    $str
);

之后,您可以刪除所有大括號:

$str = preg_replace('/[{}]+/', '', $str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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