2017-02-13 1 views
1

다음 요구 사항이 있습니다.preg_replace를 사용하여 출력 문자열에 하이픈을 유지하는 방법

입력 ---------- : z-edu-l1-^threat -emergency mk pl.jpg

필수 ---- : 내가 출력을 다음 얻을

$input = 'z-edu-l1-^threat -emergency mk pl.jpg'; 

echo strtolower(preg_replace('/\W(?![^.-]*$)/', '_', trim($input))); 

를 다음을 사용 z-edu-l1-_threat_-emergency_mk_pl.jpg

z_edu_l1__threat__emergency_mk_pl.jpg 

- 기호를 밑줄로 대체하고 싶지 않습니다. preg_replace를 사용하여 출력 문자열에 하이픈을 유지하는 방법은 무엇입니까?

+0

는 특수 문자도 제거해야 라이브를 참조하십시오? – RomanPerekhrest

+0

@RomanPerekhrest 예 특수 문자도 제거해야합니다. – Muk

답변

3

당신은 등가의 부정 문자 클래스 [^\w]\W을 교체하고 유지하는 데 필요한 기호를 부정 할 수

[^\w.-] 

regex demo

[^\w.-] 일치에게 편지/숫자가 아닌 모든 문자 참조 _, .-.

PHP demo 참조 : {뭔가} w \ 을 제외하고 일치하는 항목을 찾을 수

$input = 'z-edu-l1-^threat -emergency mk pl.jpg'; 
echo strtolower(preg_replace('/[^\w.-]/', '_', trim($input))); 
// => z-edu-l1-_threat_-emergency_mk_pl.jpg 
1
$input = "z-edu-l1-^threat -emergency mk pl.jpg"; 
$output = str_replace(["^", " "], "_", $input); 
echo $output; 
//output 
//z-edu-l1-_threat_-emergency_mk_pl.jpg 
+0

이 코드 스 니펫은 환영 받고 도움을 줄 수도 있지만 * how * 및 * why *가이 문제를 해결할 경우 [설명이 포함 된 경우 크게 개선됩니다] (// meta.stackexchange.com/q/114762) 문제. 지금 묻는 사람뿐만 아니라 앞으로 독자에게 질문에 답하고 있다는 것을 기억하십시오! 설명을 추가하려면 답을 편집하고 어떤 제한 및 가정이 적용되는지 표시하십시오. –

1

[^ 뭔가를] -> 알파벳 [^ \ w.-] 알파를 제외하고 아무것도 찾을 것입니다, 마침표 및 하이픈을 입력하고 밑줄을 사용하십시오.

$input = 'z-edu-l1-^threat -emergency mk pl.jpg'; 

echo strtolower(preg_replace('([^\w.-])', '_', trim($input))); 

demo here

+0

답장을 보내 주셔서 감사합니다 - 정규 표현식에 대한 설명과 OP의 질문을 해결하는 방법이 도움이 될 것입니다 – Tom

+0

@ WiktorStribiżew의 답변과 다른 점은 무엇입니까? – Toto

+0

@Toto 나는 그의 대답을 보지 못했습니다. 필자가 대답을하고 phpfiddle에서 테스트하는 동안 응답이 없었습니다. 게시 한 후에 만 ​​대답을 보았습니다. –

관련 문제