2017-11-09 1 views
0

문자열의 시작 부분에있는 문자 (또는 단어의 일부)를 제외한 문자열의 모든 문자를 바꿔야합니다. 예를 들어 입력preg_replace 문자열의 시작 부분을 제외한 모든 숫자와 별표 문자

:

MSFT *<E07004QY6W> 
WOOLWORTHS W1157 
GOOGLE*ADWS7924436927 
COLES 0829 
ROBLOX.COM 888-858-25 
7-ELEVEN 2179 
COLES EXPRESS 1896 

결과가 같아야

MSFT 
WOOLWORTHS 
GOOGLE 
COLES 
ROBLOX.COM 
7-ELEVEN 
COLES EXPRESS 

는 preg_replace이다 이것을 달성 PHP로 할 수

  • '/ \ D +/g'-하지만
  • 이 모든 숫자와 아무것도 제거 '/ (* | \ D + $) /'- 그러나 이것은하지 않습니다 :

    지금까지 시도 일부에서 잘 작동은 결과 "ROBLOX.COM 888-858-"

+4

당신이 지금까지 시도 것과 질문을 업데이트하시기 바랍니다. – Rahul

+0

처음으로 살펴보십시오. '([a-zA-Z0-9 \. \ -] +). + \ n' https://regex101.com/r/EtgztL/1/ 문제는 "COLES EXPRESS"와 "WOOLWORTHS W1157"을 일치시키지 않고 일치시키는 것입니다. – datagutten

+0

예,'preg_replace'가 올바른 정규식으로 이것을 할 수 있습니다. – chris85

답변

3

하지 않음이 다른 가장자리 경우에 작동하지만이 교체로 시도 할 수 있는지 :

$txt = preg_replace('~^[^*\s]+(?: \pL+(?!\S))*\K.*~m', '', $txt); 

demo

설명 :

^[^*\s]+ 걸립니다 모든 것을하지 공백이나 라인의 시작에 별표 (*).
(?: \pL+(?!\S))* 그리고 결국 공백으로 구분 된 문자 그룹.
\K은 일치하는 결과에서 이전에 일치하는 모든 문자를 제거합니다.
.*은 나머지 문자를 모두 사용합니다.

+0

니스! 고맙습니다. – Ben

0
$in = array(
    'MSFT *<E07004QY6W>', 
    'WOOLWORTHS W1157', 
    'GOOGLE*ADWS7924436927', 
    'COLES 0829', 
    'ROBLOX.COM 888-858-25', 
    '7-ELEVEN 2179', 
    'COLES EXPRESS 1896', 
); 

foreach ($in as $str) { 
    echo preg_replace('/[\h*]+[^\h*]+$/', '', $str),"\n"; 
} 

출력 :

MSFT 
WOOLWORTHS 
GOOGLE 
COLES 
ROBLOX.COM 
7-ELEVEN 
COLES EXPRESS 
관련 문제