2011-01-17 3 views
0

나는 텍스트 문자열을 가지고 있습니다. 이메일 주소가 포함되어있을 수도 있고 없을 수도 있습니다. 나는 모두를 대체하고 싶다. (fullstop)을 점으로 표시합니다.을 대체하십시오. 이메일 주소 :

blah blah [email protected] dot com fooo some content and email again 

나는이 사용하는 정규식을 할 수에

blah blah [email protected] fooo some content and email again 

?

고마워요 아룬

답변

3

.NET 정규 표현식 엔진을 마음대로 사용할 수있는 경우 (?:.(?=\[email protected])|(?<[email protected]\S+).)을 검색하고 모든 일치 항목을 dot으로 바꿔서 단일 정규식에서 수행 할 수 있습니다.

검색 \.(?=\[email protected])dot로 교체 :

PHP에서

, 당신은 반복적으로/두 단계를해야 할 것이 전에 발생 이메일 주소의 모든 점을 대체 할

$subject = preg_replace('/\.(?=\[email protected])/', ' dot ', $subject); 

@. 그런 다음 (@\S+)\.을 검색하고 \1 dot으로 바꿉니다. 더 이상 일치가 없을 때까지 이것을 반복하십시오.

뭔가

while (preg_match('/(@\S+)\./', $subject)) { 
    $subject = preg_replace('/(@\S+)\./', '\1 dot ', $subject); 
} 

처럼이는 @ 후 이메일 주소 안의 점과 일치하지만, PHP의 정규식 엔진이 무한 lookbehind를 지원하지 않기 때문에, 나는 문자열에 여러 번 정규식을 다시 적용해야 @ 이후의 최대 도트 수입니다. 예를 들어 @foo.bar.com 문자열의 경우 @foo.bar.과 일치하고 @foo.bar dot으로 바뀝니다. 그런 다음 다음 실행에서 @foo.@foo dot으로 바꿉니다.