[英]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.