2015-02-03 4 views
0

문자열에서 십진수를 두 소수점으로 변경하려고합니다. 정규식은 잘 일치하는 것 같습니다. 문제는 교체 문제입니다. | 내가을 원하는 진수를 출력preg_match 괄호 안의 패턴

$input_lines = "-33.873293252 151.201538015999972,-33.873175 151.201689183999946"; 

print preg_replace("/[0-9]+(\.[0-9][0-9]?)?/", "$0 $2", $input_lines); 

:

내 코드입니다 내가
을 원하지 않는 립니다 소수는 :
-33.87 3293252 151.20 1538015999972 ,-33.87 3175 151.20 1689183999946 

그래서 나는 replacement$0에 변경했습니다. 하지만 지금은 작동을 중지 교체하고 대신에 저를주고있다 :

-33.873293252 151.201538015999972,-33.873175 151.201689183999946 

이 나에게 원하는 출력을 제공하므로 어떻게 내 정규 표현식을 다시 쓸 수 있습니까?

+1

예상되는 출력은 무엇입니까? 정규 표현식에 단일 캡쳐 그룹이 포함되어 있으므로'$ 2'는 어디에서 오는가요? –

+0

'/ [\ s,] /'와'round (number, 2)'는 각각 어리석은 편이라고 생각하니? –

답변

3

더 나은 :

preg_replace("/(?<=\.\d\d)\d+/","",$input_lines); 

은 아무것도 처음 두 후 모든 후행 소수를 대체합니다.

1
([-+]?\d+(?:\.\d{2})?)(\d*) 

시도해보십시오. $1으로 바꾸십시오. 데모를 참조하십시오.

https://regex101.com/r/vD5iH9/46

$re = "/([-+]?\\d+(?:\\.\\d{2})?)(\\d*)/m"; 
$str = "-33.873293252 151.201538015999972,-33.873175 151.201689183999946"; 
$subst = "$1"; 

$result = preg_replace($re, $subst, $str);