У меня есть этот код
$string = "23 asdasdasdasd.sma(33) asda sdas asd 23 2 3 54232 23d asd";
$reg = "??";
preg_match($reg, $string, $matches);
var_dump($matches);
Я хочу получить этот номер: 33
,
Потому что ты звонишь preg_match()
в вашем коде и в ваших входных данных доступен только один целевой номер, вы можете точно использовать этот самый быстрый / краткий шаблон:
~\(\K\d+~
(Образец Демо) (5 шагов & нет групп захвата & не бдительно)
Разбивка паттернов:
~ #pattern delimiter
\( #match (
\K #restart the fullstring match (forget previously matched characters)
\d+ #match one or more digits greedily
~ #pattern delimiter
* чтобы быть ясным, я хочу заявить, что мой шаблон предполагает, что число, которое следует сразу за (
Будет сопровождаться )
, Это то, что обеспечивает пример ввода.
Если )
Для обеспечения точности необходимо найти соответствие, тогда группа захвата (путь Тима) будет следующим наиболее эффективным способом. Все правильные шаблоны, которые используют обходные пути, будут медленнее, чем правильные шаблоны без.
Я считаю, что регулярное выражение должно быть таким
$reg = "\(([0-9]+)\)";
Попробуйте использовать шаблон \((\d+)\)
:
preg_match("/\((\d+)\)/", $string, $matches);
Первая группа захвата будет содержать число, заключенное в скобки.
Вы также можете использовать \(\K\d+(?=\))
Это будет соответствовать:
\( # Матч ( \ K # Сброс начальной точки сообщенного совпадения \ d + # Совпадение с одной или несколькими цифрами (? = \)) # Позитивный взгляд, который утверждает, что следует)
$reg = '/\(\K\d+(?=\))/';
Номер будет в $matches[0];