2016-07-02 4 views
-1

Я пытаюсь подсчитать количество вхождений символа в строке. , например:Количество точных символов в строке

$string = "ab abc acd ab abd"; 
$chars = "ab"; 

Сколько раз $chars точно появится в $string, и правильный ответ в 2 раза, но с substr_count() он возвращается в 3 раза !!!

Есть ли какая-либо функция PHP или Regex, которые возвращают правильный ответ?

+0

Затем вы хотите использовать регулярное выражение и использовать границы слов. – Rizier123

+0

Он появляется в 'abc' тоже ... вы знаете – Farkie

+0

Omg" ab abc acd ab abd "содержит" ab "3 раза, в чем проблема? –

ответ

1

Для того, что вы сказали в комментариях уже, вы не пытаетесь найти точное слово, так как слово имеет определенные границы. Итак, что вы пытаетесь сделать что-то вроде этого:

/(?:\A|[^H])HH(?:[^H]|\z)/g 
preg_match_all('/(\A|[^H])HH([^H]|\z)/', $string, $matches); 

или с примером Вопрос по:

/(?:\A|[^a])ab(?:[^b]|\z)/g 
preg_match_all('/(?:\A|[^a])ab(?:[^b]|\z)/', $string, $matches); 

Объяснение:

(?: \A | [^a]) # very beginning of the input string OR a character except `a` 
ab     # match `ab` 
(?: [^b] | \z) # end of the input string OR a character except `b` 

Live demo

Выше было простое понимание того, что должно быть сделано, но это больше, чем лучше использовать раствор, который сделан для этой конкретной цели, названный lookarounds:

/(?<!a)ab(?!b)/g 
preg_match_all('/(?<!a)ab(?!b)/', $string, $matches); 
+0

Ничего себе !!! большое спасибо –

5

с регулярным выражением вы можете сделать следующее:

$count = preg_match_all('/\bab\b/', $string); 

будет рассчитывать occurrencies от слова «аб». \b в регулярном выражении означает положение между не-слово символ и слово знак. A "Слово" символ - любая буква или цифра или символ подчеркивания.

0

Существует несколько способов. Regex, как указано выше, или с помощью простого PHP вместо:

$string = 'ab abc acd ab abd'; 
$chars = 'ab'; 

$strings = explode(" ", $string); 
echo array_count_values($strings)[$chars]; 
// Outputs 2 

// IF you don't have php 5.6: 
$values = array_count_values($strings); 
echo $values[$chars]; 
// Outputs 2 
+0

Как это, если строка похожа на «HHTTHHHTHH», а число вхождений «HH» должно быть 2 раза. как он должен реализовываться? –

+0

Если это так, то в исходной строке ответ равен 3, а не 2? – Farkie

+0

в этом случае, есть ли способ подсчитать точную «ЧЧ»? –

Смежные вопросы