2012-05-13 4 views
1

링크의 앵커가 아닌 문자열에서 단어 (또는 표현식 : 두 단어처럼)를 찾으려고합니다. 문자열에 html이 들어 있습니다. 코드이며 대개 utf-8로 인코딩됩니다). 그 계획은 그 단어들을 몇 개의 링크로 대체하는 것입니다.정규식 링크가없는 앵커에있는 단어의 일치 단어

나는 정규식에별로 좋지 않다. 나는 웹과 stackoverflow를 검색해 내게 도움이되는 두 개의 정규식 패턴을 찾았지만, 각각에 문제가있다. 나는 누군가가 나에게 좋은 것을 얻기 위해 그 두 예를 결합하도록 도울 수 있기를 바라고있다.

In computing, a regular expression provides a concise and flexible means...

.. 난 돈 '

첫 번째 패턴 예에 의해 내가 문자열에서 발견 "표현"하기 위해 노력하고있어 경우 /('.$tag.')(?![^<]*<\/a>)/is

이 패턴은, 단어를 발견하지만, 일치하는 단어를 찾을 수는 없지만 단어 "표현식"에서 일치하는 단어를 찾을 수 있습니다.

두 번째 패턴 : \'(?!((<.*?)|(<a.*?)))(\b'.$tag.'\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'is

이 패턴 이전 문제를 가지고 있지만, 단어 나 표현, 내가 찾을려고하면 다음 마지막 문자로 내가 돈을 특별한 UTF-8 문자가되지 않습니다 일치하지 않습니다.

예 단어 : APA

예 문자열 : 두 번째 정규 표현식을 가정 ...care transformă umiditatea din aer în apă potabilă. Dacă iniţial a fost creată pentru situaţia ţărilor...

+1

[가능한 preg_replace에서 HTML 태그 무시] (http://stackoverflow.com/questions/8193327/ignore-html-tags-in-preg-replace) - UTF-8 인 경우 ' u '수정 자 :'...'isu'. – hakre

답변

0

내가 그것을 테스트하지 않은 난 정말 당신이 이런 종류의 정규 표현식에를 사용한다고 생각하지 않습니다 (당신을 위해 작동

\'(?!((<.*?)|(<a.*?)))(\b'.$tag.'\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'isu 

개인적으로, 나는이 작업을 위해 DOMDocument을 사용하십시오 : 물건), 당신이 할 필요가 @hakre 말처럼 u 수정을 추가 할 수 있습니다.

+0

이것이 현재 내가 사용하고 있기 때문에 효과가 있습니다. 'u'수정자는 내 문제를 해결하지 못했습니다. 다른 옵션에 관해서는, 나는 그것을 인식하고 결국이 경로를 갈 것이지만 나는이 경우에해야 할 관련 변경을 방지하기 위해 정규 표현식을 사용하기를 바랬다. – Gabriel