2013-07-05 11 views
0

나는 stackoverflow 및 Google을 통해 스트립 방법을 검색하려고했습니다. (마침표)는 숫자 사이의 경우를 제외하고 문자열에서 오는 것입니다. 지금까지 운이 없었어요.정규식 문자 사이의 마침표

this is a file 1233 
another cool file v1.2.3 
oh wow this file again v1.2.4 
guess what v1.2.3 is now out 

이 정규식을 사용 가능 : 나는 그들을 표시 할 것이다 그러나

this.is.a.file.1233 
another.cool.file.v1.2.3 
oh.wow.this.file.again.v1.2.4 
guess.what.v1.2.3.is.now.out 

:

내가 좋아하는 파일 이름의 무리가? 나는 그것을 성공적으로 수행하는 방법을 이해할 수 없었고, 마침표를 공백으로 대체하는 간단한 방법을 사용하여 버전 번호의 모양을 엉망으로 만들었다.

답변

0

이 같은 패턴을 시도해보십시오 /\.(?![0-9])|(?<![0-9])\./을하고, 같이 것이라고, 코드에서 ' '

로 교체 :

$filename = preg_replace('/\.(?![0-9])|(?<![0-9])\./', ' ', $filename); 
  1. 기본적으로, 우리는 두 가지 옵션 /something|something/ 찾고 있습니다.
  2. 첫 번째 옵션은 숫자 뒤에 오지 않는 마침표입니다. 우리는이 점을 확인하기 위해 부정적 예측을 사용합니다 : \.(?![0-9])
  3. 두 번째 옵션은 숫자 앞에 붙지 않는 마침표입니다. (?<![0-9])\.

일치하는 경우 마침표가 숫자로 둘러싸여 있지 않으며 교체 할 수 있음을 알았습니다. 우리는 선견자와 lookbehinds를 사용하기 때문에 실제적으로 매치되는 기간 일뿐입니다. 그리고 우리는 그것을 하나의 공간으로 대체 할 수 있습니다.

귀하의 사례를 감안할 때,이 생산됩니다 다음

: 당신은 하나 이상의 숫자가 아닌 문자가 이전 또는 기간 이후에 표시해야 함을 명시 기간과 일치하도록 여기에 주장을 사용할 수 있습니다
this is a file 1233 
another cool file v1.2.3 
oh wow this file again v1.2.4 
guess what v1.2.3 is now out 
2

(?<=\D)\.|\.(?=\D) 

당신은 다음과 같은 PHP에서 사용할 것 :

$str = preg_replace('/(?<=\D)\.|\.(?=\D)/', ' ', $str); 

당신은 볼 수 있습니다 this demo에서이 인쇄 것을 :

this is a file 1233 
another cool file v1.2.3 
oh wow this file again v1.2.4 
guess what v1.2.3 is now out 
4

당신은 preg_replace이다과이 패턴을 사용할 수 있습니다

$pattern = '~(?<=[a-z])\.|\.(?=[a-z])~i'; 

및 교체와 같은 공간.

또는 더 급진적 :

$pattern = '~(?<=\D)\.|\.(?=\D)~'; 
관련 문제