Это звучит почти как домашнее задание вопрос, так что здесь несколько идей, не полностью отдать его:
- Предполагая, что вы просто должны знать, если есть несколько вхождений, вы можете предоставить выражение который соответствует двум символам «&» с чем-либо до, между ними или после них. Если выражение совпадает, то вы знаете, что у вас есть как минимум два.
- Если вам действительно нужно знать, сколько есть, укажите выражение, которое ищет один «&» и захватывает его, а затем проверит массив совпадений, возвращаемых функцией preg_match_all().
Update: Добавить детали за комментарий от плаката
Вот код:
<?php
$hay = 'abc&def&ghi';
//approach 1
if (preg_match('/&.*&/', $hay)) {
echo "There is more than one ampersand\n";
} else {
echo "There are no ampersands\n";
};
//approach 2
if (preg_match_all('/&/', $hay, $matches)) {
echo 'Ampersand count: ' . count($matches[0]) . "\n";
} else {
echo "There are no ampersands\n";
};
//approach 3
if ($count = preg_match_all('/&/', $hay)) {
echo "Ampersand count: $count\n";
} else {
echo "There are no ampersands\n";
};
Не стесняйтесь экспериментировать щипая значение $ сена.
Для первого подхода подвыражение «. *» Ищет нуль или более любого символа, поэтому все выражение ищет два символа амперсанда с нулевым или большим количеством символов - ничего (или ничего) - между ними , (Вы можете включить субэкпозицию «. *» В начале и конце выражения, но это не обязательно, потому что preg_match() будет соответствовать выражению в любом месте строки. Другими словами, ведущая и конечная фраза «. *» -выражения неявные.)
Для второго подхода выражение просто амперсанд само по себе. Мы позволяем preg_match_all() находить их, тогда мы видим, сколько их найдено. Поскольку выражение в данном случае это не более чем простая константа, по сравнению с динамическим выражением, он хорошо показывает, почему вы можете отойти от PREG _ *() и просто использовать substr_count(), например так:
$count = substr_count($hay, '&');
или если вы не заботитесь о подсчете:
$hasAmps = strpos($hay, '&') !== false;
Я также включал в себя бонусный третий подход, который идентичен второму подходу, за исключением, что мы позволим PHP выбросить список матчей. Функция preg_match_all() возвращает количество совпадений, поэтому мы можем просто посмотреть на это, чтобы получить наш счетчик. Эта версия также относится к второму подходу, но также говорит PHP о возврате списка совпадений. Теперь список совпадений в этом случае не полезен (вы знаете, что каждый матч будет просто амперсандом), но он может быть полезен в более реалистичных сценариях.
aaaand какие были те выражения, которые вы пытались, и как они не работали? и почему [substr_count] (https://secure.php.net/manual/en/function.substr-count.php) не вариант? –
Используйте 'substr_count ($ string, '&')' и получите обзор здесь http://php.net/manual/en/extensions.membership.php подробнее http://php.net/manual/en/book .strings.php. – JustOnUnderMillions
Я знаю, что есть несколько функций, которые могут работать ...но, как я уже говорил, я хочу использовать только функцию preg_match. – Abhijit