2011-01-27 3 views
1

어떻게 ... 않는 난 내가 PHP를어떻게이를 배열로 필터링합니까?

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

에서이 코드를 사용할 수 있도록이 태그에서 번호를 제거하려면이

search100 
web250 
seo36 
analytics5060 
traffic8000 
web2.0 

같은 태그가 할 수 있지만 손상없이 web2.0을 유지하려면 루프를 사용할 때 이것을 필터링합니다.이 태그는 100k 개가 넘습니다.

+0

스트립하지 않으려는 태그의 예를 더 제공 할 수 있습니까? 'web2.0'을 특별하게 만드는 것은 명확하지 않습니다. 두 숫자 사이에 '.'이 있습니까? 그것이 자릿수가 아닌 자릿수 앞에 있습니까? – marcog

답변

2

당신은 대체 패턴 /(\w)\d+$/m$1을 사용할 수

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

이 패턴은 숫자의 순서 전에 적어도 하나 개의 단어 문자가 있어야합니다. 내 예를 들어, 당신은 별도의를 정의 할 수 있습니다와 같은 (PHP 5.3부터 가능) anonymous function를 사용할 수없는 경우

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

:

그리고

array_map를 사용하여 배열의 각 요소에 대해이 교체 적용 대신 create_function을 사용하거나 foreach을 사용하면됩니다.

당신의 막연한 설명과 작은 샘플에서
+0

정말 고맙습니다. – leon

0

, 당신이 바로 사용할 수 있습니다 보인다는 최소한 두 개의 연속 번호를 검색하기 때문, 2.0 접미사를 아끼지 것

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

. 하지만이를 달성하는 또 다른 방법은 부정적인 표정이 될 것입니다. (?<!2\.)\d+$

관련 문제