Regex найти первое слово - PullRequest
0 голосов
/ 21 мая 2010

Я пытаюсь использовать регулярное выражение для добавления диапазона к первому слову контента для страницы, однако контент содержит HTML, поэтому я стараюсь убедиться, что выбрано только слово. Содержание меняется для каждой страницы.

Текущий скрипт:

preg_match('/(<(.*?)>)*/i',$page_content,$matches);
$stripped = substr($page_content,strlen($matches[0]));
preg_match('/\b[a-z]* \b/i',$stripped,$strippedmatch);
echo substr($page_content, 0, strlen($matches[0])).'<span class="h1">'.$strippedmatch[0].'</span>'.substr($stripped, strlen($strippedmatch[0]));

Однако, если $ page_content <p><span class="title">This is </span> my title!</p> Тогда мое регулярное выражение думает, что первое слово - это span, и добавляет теги вокруг него.

Есть ли способ это исправить? (или лучший способ сделать это).

Ответы [ 3 ]

1 голос
/ 21 мая 2010

Это похоже на работу ...

(?<=\>)\b\w*\b|^\w*\b

Если вы также хотите оставить пробелы впереди (не забудьте обрезать полученную строку):

(?<=>)\s*\b\w*\b|^\s*\w*\b
0 голосов
/ 21 мая 2010

Если я вас правильно понял, вы хотите, чтобы тег вокруг первого слова (без тега) с помощью регулярных выражений вы можете получить это с помощью этого регулярного выражения

$code = preg_replace('/^(<.+?>\s*)+?(\w+)/i', '\1<span class="h1">\2</span>', $code);

этот просто перебирает теги и ждет, пока не найдет текст вне тегов

0 голосов
/ 21 мая 2010

Вы не должны использовать регулярные выражения для этого, но если вы настаиваете, вы можете попробовать что-то вроде этого:

<?php

$texts = array(
  '<p><span class="title">This is </span> my title!</p>',
  '<1>   <2>   <3>   blah   blah   <4> <5> blah',
  'garbage <1> <2> real stuff begins <3> <4>',
);

foreach ($texts as $text) {
  print preg_replace('/(>\s*)(\w+)/', '\1{{\2}}', $text, 1)."\n";
}

?>

Это печатает:

<p><span class="title">{{This}} is </span> my title!</p>
<1>   <2>   <3>   {{blah}}   blah   <4> <5> blah
garbage <1> <2> {{real}} stuff begins <3> <4>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...