2009-06-11 6 views
2

나는 정규 표현식을 처음 접했고 간단한 경우 인 것처럼 보이는 데 어려움을 겪고 있습니다."foo-some white space-bar"를 "fubar"로 바꾸는 정규식

"foo bar"를 "fubar"로 바꿔야합니다. foo와 bar 사이에 다양한 공백이 있습니다.

그게 무슨 가치가 있는지, 나는 이것을 달성하기 위해 PHP의 eregi_replace()를 사용하고 있습니다.

도움을 미리 감사드립니다. ('/foo\s+bar/', 'fubar', ...);

답변

8

... =preg_replace은 내가 eregi_replace 구문에 대한 확실하지 않다,하지만 당신은 이런 식으로 뭔가 싶어 :

Pattern: foo\s*bar 
Replace with: fubar 
+3

아, 인쇄

$pattern = "foo[[:space:]]+bar"; $replacement = "fubar"; $string = "foo bar"; print ereg_replace($pattern, $replacement, $string); 

당신이 너무 '는 foobar'을 교체하려는 경우, 당신은해야 \ s * 대신 \ s *를 사용하십시오. "*"는 "0 번 이상"을 의미합니다 ("*"기호는 http://en.wikipedia.org/wiki/Kleene_star에서 직접 제공됨). "+"는 "하나 이상의 시간"을 의미합니다. "\ s"는 "모든 공백 문자"를 나타냅니다. 일반 이스케이프 처리되지 않은 영숫자에는 특별한 의미가 없습니다. – drdaeman

+2

ereg_ * 대신 preg_ * (drdaeman이 사용한 것과 같은)를 사용하는 것이 좋습니다. 전자는 PCRE (Perl 호환 정규 표현식)를 사용하는데, 사실상 표준이며 현재 웹에서 훨씬 더 잘 문서화되어 있습니다. –

+0

이 표현은 내가 원하는대로 정확하게 수행됩니다. Drdaeman 및 기타 도움, 도움이되는 추가 설명에 감사드립니다. –

1

0

을이 시도 :

find = '(foo)\s*(bar)' 
replace = '\\1\\2' 

\ S는 공백 문자에 대한 메타 문자.

+1

캡처 brackens를 사용하여 좋은 예를 들어 있지만 Lasoldo Solsifa는 "foobar"가 아닌 "foo bar"를 "foo bar"로 대체하려고합니다. – drdaeman

0

는 또한 preg_replace 선호하지만, 완성도, 여기가 ereg_replace 함께 "망가"

+1

사실, $ pattern = "foo [[: space :]] + bar"; $ replacement = "fubar"; 그렇지 않으면 행복하게 "foo baz"를 대체하게됩니다. 이는 우리가 원하는 것이 아닐 수도 있습니다. – drdaeman

+0

@drdaeman - ouch! 좋은 지적! 결정된. – artlung