簡體   English   中英

正則表達式匹配任何空格

[英]regex match any whitespace

我想使用正則表達式和 preg_replace 函數進行替換。 這是我的代碼

$verif = "/wordA(\s*)wordB(?! wordc)/i";
$replacement = 'wordA wordb wordc';
$newvar = preg_replace($verif, $replacement, $article->text);

如果我們只有在 wordA 和 wordB 之間有一個空格,那才有效。 我需要匹配 wordA 和 wordB 之間的空格數。

例子:

wordA(10 個或更多空格) wordB -> wordA wordb wordc 相同 wordA(1 個空格) wordB -> wordA wordb wordc ...

您的正則表達式應該“按原樣”工作。 假設它正在做你想要它做的事情。

wordA(\s*)wordB(?! wordc)

這意味着匹配wordA后跟 0 個或多個空格后跟wordB ,但如果后跟wordc則不匹配 注意?! wordc這意味着wordA wordB wordc將不匹配,但wordA wordB wordc將匹配。

以下是一些示例匹配和相關的替換輸出:

在此處輸入圖片說明

請注意,無論有多少空格,都會替換所有匹配項。 還有其他幾點: -

  • (?! wordc)是一個負面的前瞻,所以你不會匹配行wordA wordB wordc假設是預期的(這就是為什么最后一行不匹配)。 目前你是靠后的空間?! 以匹配空格。 您可能想要更精確並使用(?!\\swordc) 如果您想在 wordc 之前匹配多個空格,您可以使用(?!\\s*wordc)表示 0 個或多個空格,或者(?!\\s*+wordc)表示 1 個或多個空格,具體取決於您的意圖。 當然,如果您確實想在 wordB 之后匹配帶有 wordc 的行,那么您不應該使用負前瞻。

  • *將匹配 0 個或多個空格,因此它將匹配 wordAwordB。 如果您想要至少一個空格,您可能需要考慮+

  • (\\s*) - 括號表示捕獲組。 您是否出於某種原因將空格捕獲到組中? 如果沒有,您可以刪除括號,即只需使用\\s

根據評論更新

您好,問題不是表達式,而是不被視為空格的 HTML 輸出。 這是一個 Joomla 網站。

保留您可以使用的原始正則表達式:

wordA((?:\s| )*)wordB(?!(?:\s| )wordc)

唯一的區別是正則表達式不匹配空格或  . 我用\\swordc替換了wordc ,因為這更明確。 請注意,我已經指出負面前瞻?! 當 wordB 后跟單個空格和 wordc 時將匹配。 如果您想匹配多個空格,請參閱我上面的評論。 我還在空格周圍保留了捕獲組,如果您不想要這個,則如上所述刪除括號。

示例匹配:

在此處輸入圖片說明

我使用+而不是 '*' 的原因是因為加號被定義為一個或多個前面的元素,其中星號是零或多個。 在這種情況下,我們需要一個更具體的分隔符,所以“一個或多個”空格。

word[Aa]\s+word[Bb]\s+word[Cc]

將匹配:

wordA wordB     wordC
worda wordb wordc
wordA   wordb   wordC

在這個表達式中,單詞必須是具體的,並且按順序 (a, b, then c)

暫無
暫無

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

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