2013-10-14 3 views
0

텍스트 파일을 구문 분석하고 타임 스탬프 (있는 경우)를 색칠하고 굵게 표시하려고합니다. 기본적으로 텍스트는 다음과 같이 수 : 이제문자열의 처음 부분 만 바꾸기 WITH 오프셋

15:40 - User1: hey 
15:41 - User2: i was about to hit the road, but have at it 
15:42 - User1: i was just wondering 

, 나는 (라인 휴식 그 자체를 포함하지만, 지금은 그 옆을 떠날 수 있기 때문에 이미 바보이다 개) \ r \ n 폭발, 그래서 통과 그것은 foreach 루프와 함께.

$string = explode("\r\n", $file); 
foreach($string as $ex) { 
    echo "<p>".$ex."</p>\r\n"; 
} 

사용자 이름을 포함하여 전체 타임 스탬프를 과장하고 싶다고 가정 해 봅시다. str_replace는 작동하지 않습니다. 타임 스탬프에도 있습니다. 제 질문은, 어떻게 전체 부분을 대담하게합니까? "-"를 확인하는 strpos는 오프셋 5로 나를 남겨 둡니다. 그러나 콜론의 다음 존재 때까지 전체 부분을 과장하는 방법은 무엇입니까?

지옥, 만약 내가 스스로 할 수 있다면, $ timestamp, $ seperator, $ user 및 $ message로 변경 될 가능성이 있습니까? (예 : 사용자 이름 옆에 콜론이있을 수 있습니다.

종류와 관련,

웨슬리

답변

1

당신은 '여기에 정규 표현식을 사용하여 오프 훨씬 더 좋을 D :

$bolded = preg_replace('/^\d+:\d+\s*-\s*[^:]+/', '<b>$1</b>', $ex); 

이 패턴 ^\d+:\d+\s*-\s*[^:]+과 일치 <b>$1</b>, 정말 수단으로 대체 그 일치는 굵은 글씨로 표시됩니다 (의미 성을 높이려면 <strong>을 사용하십시오).

^\d+:\d+\s*-\s*[^:]+은 무엇입니까?

^  at the start of the string... 
\d+ one or more digits    -+ 
:  a double colon     +---> the time 
\d+ one or more digits    -+ 
\s* zero or more whitespace 
-  a dash 
\s* zero or more whitespace 
[^:]+ one or more of "not :"   -----> the username 
+0

감사합니다 순전히. 멋진 설명. 한 가지 언급 : $ 1은 $ 0이어야합니다! :) – Mave

1

당신은 offsetstrpos()를 사용할 수 있습니다

foreach($array as $value) { 
    $needle = ':'; 
    $pos1 = strpos($value, $needle); 
    $pos2 = strpos($value, $needle, $pos1 + strlen($needle)); 
    $bold = substr($value, 0, $pos2); 
    $notBold = substr($value, $pos2); 
    echo "<p><strong>$bold</strong>$notBold</p>"; 
} 

Demo!

관련 문제