簡體   English   中英

正則表達式preg_match_all PHP,用於%variable%

[英]Regular Expression preg_match_all PHP for %variable%

preg_match_all尋找正則表達式,它可以檢測封裝在%文本中的變量,如下所示:

Lorem ipsum dolor就座,協約%variable1% ,請與臨時勞動者和勞動者共同訴訟。 盡量不要抽煙,不要進行任何鍛煉,以免造成經濟損失%variable2% Duis aute irure dolor in reprehenderit in voltate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur燒結靶occaecat cupidatat非proident,必須遵守的過失%variable3%魁正式開通了deserunt mollit阿尼姆ID EST laborum。

將要檢測的變量封裝在%符號中。 變量可以包括小寫字母(az),數字(0-9)和連字符(-)。 我想在數組中用%符號返回變量的名稱,如下所示,但無法使其匹配。

Array (
    [0] => 'variable1',
    [1] => 'variable2',
    [3] => 'variable3'
}

有什么建議嗎?

像這樣

<?php
$txt='Lorem ipsum dolor sit amet, consectetur adipisicing %variable1%, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip %variable2% ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa %variable3% qui officia deserunt mollit anim id est laborum.';
preg_match_all('/%(.*?)%/', $txt, $matches);
print_r($matches[1]);

OUTPUT :

Array
(
    [0] => variable1
    [1] => variable2
    [2] => variable3
)

演示版

<?php

$text = <<<TEXT
Lorem ipsum dolor sit amet, consectetur adipisicing %variable1%, sed do eiusmod tempor incididunt 
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco 
laboris nisi ut aliquip %variable2% ex ea commodo consequat. Duis aute irure dolor in reprehenderit 
in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa %variable3% qui officia deserunt mollit anim id est laborum.
TEXT;

preg_match_all('/%(?P<variables>.*?)%/', $text, $matches);
print_r($matches['variables']);

將輸出:

Array
(
    [0] => variable1
    [1] => variable2
    [2] => variable3
)

獎金

function process ($text, array $variables) {
  preg_match_all('/(?P<variables>%(.*?)%)/', $text, $matches, PREG_OFFSET_CAPTURE);
  if (isset($matches['variables'])) {
    foreach (array_column($matches['variables'], 0, 1) AS $offset => $var) {
      $value = isset($variables[$var]) ? $variables[$var] : NULL;
      $text = substr_replace($text, $value, $offset, strlen($var));
    }

    return $text;
  }

  // whoopz!
  return NULL;
}

使用它(PHP 5.4+) echo process($text, ['%variable1%' => 'hello']);
服務器版本小於5.4? 您可以從https://github.com/ramsey/array_column下載array_column函數。

如果問我這不是一個好主意,因為您可能最終會在25%和35%之類的值之間出現“變量”。 現在,如果您假設變量名不能以空格開頭,甚至更好,只能以字母開頭,那么您可以使用如下代碼:

'/%([a-zA-Z][a-zA-Z0-9_]*?)%/'

作為正則表達式。

使用“。” 就像別人提到的那樣會惹上你的麻煩。

請注意,如果您想用其他內容替換變量,也有一個preg_replace_callback()函數。

暫無
暫無

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

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