Как мне отфильтровать это в массиве? - PullRequest
1 голос
/ 27 января 2011

У меня есть такие теги

search100
web250
seo36
analytics5060
traffic8000
web2.0

Я хочу удалить цифры из этого тега, чтобы я мог использовать этот код в php

preg_replace("/\d+$/gm", "", input)

, но хочу сохранить web2.0без изменений ... как я могу отфильтровать это, когда я использую цикл .. У меня есть более 100 000 тегов, как это.

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Вы можете использовать шаблон /(\w)\d+$/m и $1 в качестве замены:

preg_replace('/(\w)\d+$/m', '$1', $input)

Этот шаблон требует, чтобы перед последовательностью цифр был хотя бы один символ слова.

И чтобы применить эту замену к каждому элементу массива, используйте array_map:

array_map(function($elem) { return preg_replace('/(\w)\d+$/m', '$1', $elem); }, $arr);

Если вы не можете использовать анонимную функцию (доступно начиная с PHP 5.3), как в моем примере, вы можете либо определить отдельную функцию, либо использовать create_function, либо просто используйте foreach.

0 голосов
/ 27 января 2011

Из вашего расплывчатого описания и небольшого примера, кажется, вы могли бы просто использовать:

$input = preg_replace("/\d\d+$/m", "", $input);

Это избавит от суффикса 2.0, потому что он ищет как минимум два последовательных числа. Но еще один способ сделать это - негативный взгляд (?<!2\.)\d+$

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...