2011-08-02 5 views
0

두 줄 사이의 문자열 사이에 알려지지 않은 텍스트를 찾고 싶습니다. 예를 들어 :이 수행 할 작업내 문자열에서 알 수없는 문자열 찾기

$mystring = "blabalbla <b>sometext</b> <b>ssssss</b>" 

:

내가 "sometext"을 알고 있지만 내가 문자열에 넣을

<b>sometext</b>. 

하지만 내 문자열은 항상 예를 들어 다음과 같이 변경할 수 있습니다.

<s><b>sometext</b></s> 

이제 전체를 문자열에 넣어야합니다.

<s><b>sometext</b></s>. 

그래서 나는 그것을 주변에 알 수없는 문자열을 가질 수있는 경우에

<b>.mystring.</b> 

beacuse 내 변수를 부착 간단하게 사용할 수 없습니다.

어떻게하면됩니까? 또는 다른 방법을 찾아 삭제할 수 있습니까?

<b><s><i></b></s></i> etc.... around my string? 
Thnaks, Creep입니다.

답변

0

당신은 정규식 사용할 수 있습니다

$mystring = preg_replace('/(^|\s)(?:<[^>]*>)*sometext(?:<[^>]*>)*(\s|$)/i', '$1'.$some_new_text.'$2', $mystring); 

당신이 제공하는 무엇에 대해이 테스트를한다 꽤 잘 작동합니다. 그것은 문자열 자체의 시작 부분이나 끝 부분에있는 텍스트를 처리하며 무제한의 HTML 엔터티로 둘러싸여 있습니다.

설명

  • 일치 그래서 문자열의 시작, 또는 (^|\s)
  • 는 0 개 이상의 HTML 노드 (?:<[^>]*>)*이 비 캡처 그룹에
    • 한 칸 띄운 다음, 하나 그들은 그룹 번호가 부여되지 않는다.
  • 이 캐릭터 라인이 역동적 수있는에
    • 당신이 계획하는 경우 을 트링, 당신도 뒤에 공백이 0 개 이상의 HTML 노드 (?:<[^>]*>)*
    • 에 의해
  • 가 이어 특수 문자를 탈출 preg_quote 방법을 사용해야합니다 또는 문자열 (\s|$)
  • 일치 케이스 - insensitvely /i (옵션)

주의 사항의 끝이 선행 공백과 후미 공백 (있는 경우)은 대체 문자열 $1$2에 다시 추가됩니다.