在span Clases PHP中包装第一个和第二个单词

时间:2014-08-14 08:43:08

标签: php regex preg-replace pcre

我正在使用php自行生成导航。我需要在单独的div类中包装第一个和第二个单词。 e.g。

<li> <span>First</span> <span class="word">Second</span> Word </li>

目前我可以使用

在span类中包装第一个单词
$name = preg_replace('/(?<=\>)\b(\w*)\b|^\w*\b/', '<span>$0</span>', $ni->name);

有谁知道如何改变这个来包装前两个单词?

2 个答案:

答案 0 :(得分:5)

您可以在数组中拆分单词并替换所需的索引。

// Split on spaces.
$name = preg_split("/\s+/", $name);

// Replace the first word.
$name[0] = "<span>" . $name[0] . "</span>";

// Replace the second word.
$name[1] = "<span>" . $name[1] . "</span>";

// Re-create the string.
$name = join(" ", $name);

答案 1 :(得分:0)

我不知道我是否理解你,但我认为你需要这个:

$string = '<li> <span>First</span> <span class="word">Second</span> Word </li>';
$name = preg_replace('/(<span(?:.*)>(\w*)<\/span>)/U', '<div>$2</div>', $string);

echo htmlspecialchars($name);
// <li> <div>First</div> <div>Second</div> Word </li>

$string = '<li> First   Second Word </li>';
$name = preg_replace('/<[\/]?\w*>(*SKIP)(*FAIL)|\b(\w+)\b(\s*)(\w+)\b/U', '<span>$1</span>$2<span class="word">$3</span>', $string);

echo htmlspecialchars($name);
// <li> <span>First</span> <span class="word">Second</span> Word </li>