[英]How can I match the second occurrence of a character with a regular expression?
[英]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.