2010-12-14 3 views
1

나는 텍스트 섹션의 더 똑똑한 발췌를하고 싶습니다. 나는 Movable Type의 regex_replace 함수를 사용할 것이므로, 처음 몇 문장 뒤에 모든 것을 집어 넣으려고 노력할 것입니다.모든 정규식 * 첫 번째 완전한 문장 (마침표 및 공백) * 후 * N 문자

\..*은 첫 번째 기간 이후 모든 항목을 가져 오지만 너무 짧아서 발췌 한 경우가 많습니다. 어떻게하면 첫 번째 기간 이후에도 모든 것을 수행 할 수 있지만 처음 100자를 건너 뛸 수 있습니까?

또는 두 번째 또는 세 번째 기간 이후에 모든 것을 어떻게 잡을 수 있습니까? regex_replace에 익숙하지

답변

0

, 나는 PHP preg_replace 기능을 사용할 것이다 당신이 따라 적응할 수 :

$truncated = preg_replace('/^(.{100}.*?\.).*$/s', '$1', $long); 

편집 : 나는 구문이 전체 것 등을 치료하는 출력에 대한 강조와 함께 무엇을 모른다 문자열, 그것은 미리보기에서 잘 보인다.

그리고 현명하게하려고합니다 다른 버전 (문장의 끝 부분 이외의 곳을 발생할 수있는 기간 또는 다른 장소) 소수점으로 숫자를 파괴하지 약 :

$truncated = preg_replace('/^(.{100}.*?\.(?![a-z0-9])).*$/s', '$1', $long); 

설명 :

  1. 보관할 부분이 괄호로 묶입니다.
  2. 당신은 적어도 100 자하겠습니다 : .{100}
  3. 그런 다음 첫 번째 소수점까지 모든 다음과 같은 문자를하겠습니다 : 두 번째 버전에서 .*?\.
  4. , 내가 부정적인 lookahead- (?![a-z0-9])을 사용 - 어떤 것 마침표 뒤에 숫자 나 문자가 오는 경우 마지막 부분을 다음 소수점 자리까지 계속하십시오.
  5. 점은 개행 문자와 일치합니다 (패턴 끝에있는 s 수식어). Movable Type의 regex_replace 함수가 구분 기호없이 선행 슬래시와 후행 /s 패턴을 취하는 경우 패턴 시작 부분에 (?s)을 사용할 수 있습니다.
  6. 첫 번째 캡처 된 그룹을 유지하려면 교체시 $1을 사용하십시오.
0

다른 언어가 문장의 끝을 인코딩하는 다양한 방법을 가지고 있기 때문에 완전한 문장은 모호합니다. 마침표 뒤에 공백이 EOS라고 가정합시다. /^.*?\.\s+(?:.{N})(.*)/ N을 원하는 수로 대체하십시오.

관련 문제