簡體   English   中英

正則表達式匹配特定字符的確切出現次數

[英]Regular expression to match an exact number of occurrence for a certain character

我試圖檢查一個字符串是否有一定數量的字符出現。

例子:

$string = '123~456~789~000';

我想驗證這個字符串是否正好有 3 個字符~實例。

使用正則表達式可以嗎?

是的

/^[^~]*~[^~]*~[^~]*~[^~]*$/

解釋:

  • ^ ... $在許多正則表達式方言中表示整個字符串
  • [^~]*零個或多個非波浪號字符的字符串
  • ~波浪號字符

字符串可以根據需要包含盡可能多的非波浪號字符,出現在字符串的任何位置,但必須恰好包含三個波浪號,不多也不少。

由於單個字符在技術上是一個子字符串,任務是計算其出現的次數,我認為最有效的方法在於使用特殊的 PHP 函數 - substr_count

$string = '123~456~789~000';
if (substr_count($string, '~') === 3) {
  // string is valid
}

顯然,如果您需要計算模式匹配的數量(例如,雖然您可以使用substr_count字符串中“0”的數量,但最好使用preg_match_all計算數字),這種方法將不起作用。

然而,對於這個特定問題,它總體上應該更快,因為substr_count是針對一個特定目標進行優化的 - 計算子字符串 - 當preg_match_all更適用於通用方面時。 )

我相信這應該適用於可變數量的字符:

^(?:[^~]*~[^~]*){3}$

這里的優點是您只需將 3 替換為您想要檢查的數量。

為了提高效率,可以寫成

^[^~]*(?:~[^~]*){3}$

這就是你要找的:

根據以下評論進行編輯

<?php

$string = '123~456~789~000';
$total  = preg_match_all('/~/', $string);
echo $total; // Shows 3

暫無
暫無

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

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