2011-12-04 40 views
1

我需要在span標記之間的字符串中包含至少2個字符長度的每個單詞。所有的問號,標點符號等都應該留在跨度之外(它們只能包含a-z以及特殊字符,如ñ,á,é等)。如何用一個html標籤將一個字符串中的所有單詞括起來?

所以,這樣的:

Prenda de vestir que se ajusta? A la cintura y llega generalmente hasta el pie. 

應該是這樣的:

<a href=http://example.com/prenda>Prenda</a> <a href=http://example.com/de>de</a> <a href=http://example.com/vestir>vestir</a> <a href=http://example.com/que>que</a> 
<a href=http://example.com/se>se</a> <a href=http://example.com/ajusta>ajusta</a>? A <a href=http://example.com/la>la</a> 
<a href=http://example.com/cintura>cintura</a> y <a href=http://example.com/llega>llega</a> 
<a href=http://example.com/generalmente>generalmente</a> <a href=http://example.com/hasta>hasta</a> <a href=http://example.com/el>el</a> <a href=http://example.com/pie>pie</a>. 

任何想法?謝謝!

+0

也許如果你在[匹配開放標籤]啓動幫助(http://stackoverflow.com/q/1732348/首先是596781)。 –

+0

使用正則表達式來找到 – kol

回答

2

使用此:

$result = preg_replace('/\b[\p{L}\p{M}]{2,}\b/u', '<a href=http://example.com/$0>$0</a>', $subject); 

所有字母,所有的口音。

爲什麼:

" 
\b    # Assert position at a word boundary 
[\p{L}\p{M}] # Match a single character present in the list below 
       # A character with the Unicode property 「letter」 (any kind of letter from any language) 
       # A character with the Unicode property 「mark」 (a character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.)) 
    {2,}   # Between 2 and unlimited times, as many times as possible, giving back as needed (greedy) 
\b    # Assert position at a word boundary 
" 

編輯:

$result = preg_replace_callback(
     '/\b[\p{L}\p{M}]{2,}\b/u', 
     create_function(
      '$matches', 
      'return <a href=http://example.com/strtolower($matches[0])>$matches[0]</a>;' 
     ), 
     $subject 
); 
+0

工作得很好!任何方式,我可以用example/mb_strtolower($ 0)替換示例/ $ 0? – andufo

+0

@andufo檢查更新。 – FailedDev

+1

再次感謝! – andufo

1

使用此來代替:

\b(\w{2,})\b 

基本上,\b意思是一個「字定界符」(匹配的單詞的開始和結束,不含標點)。 \w是一個單詞字符,但大概可以用[a-zA-Z]替代,以排除[0-9_]個字符。然後你應用量詞{2,},意思是2個字符的長度。

代用品?

<a href="http://example.com/$1">$1</a> 

而且總是讚賞的example。 (一個例子轉換爲anchor tags instead。)

+0

這個詞呵呵,用我的解決方案打敗我,而我正在練習寫一段工作代碼:) – favoretti

+0

不錯:)但是用特殊字符打不好( - ) – andufo

0

下面是一個例子:

<? 
$without = "Prenda de vestir que se ajusta? A la cintura y llega generalmente hasta el pie."; 
$with = preg_replace("/([A-Za-z]{2,})/", "<a href=\"http://example.com/\\1\">\\1</a>", $without); 
print $with; 
?> 
+0

不好用與特殊字符(ñ,á) – andufo

相關問題