php
  • regex
  • 2012-06-13 38 views 0 likes 
    0

    我有類似下面的變量:過濾名字和姓氏在我的PHP腳本的正則表達式

    $names = '<a href="%URL$%" rel="tag">Name Surname</a>, <a href="%URL$%" rel="tag">Name Surname</a>, <a href="%URL$%" rel="tag">Name Surname</a>'; 
    

    是否有可能以有這樣的結果過濾$名字?

    $names = '<a href="%URL$%" rel="tag">N. Surname</a>, <a href="%URL$%" rel="tag">N. Surname</a>, <a href="%URL$%" rel="tag">N. Surname</a>'; 
    
    +1

    是,使用[DOM操作(http://stackoverflow.com/questions/27222/dom-manipulation-in-php)。正則表達式[不會幫助](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)。 – CodeCaster

    +0

    你是什麼意思的過濾器?你只想用「N」替換「名稱」。還有其他要求嗎? – stema

    +0

    是的,我顯然有不同的名字,我想只帶第一個字符後跟一個點。例如:John Smith,Mark Twain => J. Smith,M. Twain – Pennywise83

    回答

    -1

    非常短的答案:使用HTML解析器(如http://simplehtmldom.sourceforge.net/

    的正則表達式和HTML只有當你確信你只拉開代碼真正預見的字符串工作。

    +0

    但是我的代碼字符串真的可以預測:) – Pennywise83

    0

    你可以使用preg_replace_callback

    $names = preg_replace_callback(
          '/(<a[^>]*>)(\w+)(\w+</a>)', 
          function($matches) { 
           return $matches[1] . substr($matches[2], 0, 1) . "." . $matches[3]; 
          }, 
          $names 
         ); 
    
    相關問題