Автоматически определять пунктуацию в строке HTML и разбивать ее там - PullRequest
2 голосов
/ 05 октября 2011

У меня есть набор знаков препинания:

$punctuation = array('.', '!', ';', '?');

Предельная переменная символов:

$max_char = 55; 

И строка с HTML:

$string = 'This is a test string. With <a href="http://google.com">HTML</a>.';

Какмогу ли я разделить эту строку до максимум $max_chr символов, используя один из символов в массиве $punctuation в качестве «ключей»?

Таким образом, в основном строка должна разбиваться на ближайший символ пунктуации, но не внутриОпределение / атрибут HTML-тега (не имеет значения, происходит ли разделение внутри содержимого тега, а тег остается незамеченным - потому что я проверяю наличие незамкнутых тегов позже).

1 Ответ

1 голос
/ 05 октября 2011

Если вы хотите знать, находитесь ли вы внутри тега или нет, вам может потребоваться сделать какой-то конечный автомат, а затем использовать цикл в строке. Вы можете ссылаться на строку sortof как массив, так что вы можете сделать что-то вроде:

 $punctuation = array('.', '!', ';', '?');
 $in_tag = false;
 $max_char = 55;
 $string = 'This is a test string. With <a href="http://google.com">HTML</a>.';
 $str_length = strlen($string) > $max_char ? $max_char : strlen($string);
 for($i = 0; $i < $str_length; $i++)
 {
    $tempChar = $string[$i]; //Get the character at position $i
    if((!$in_tag) && (in_array($tempChar, $punctuation)))
    {
         $string1 = substr($string, 0, $i);
         $string2 = substr($string, $i);
    }
    elseif((!$in_tag) && ($tempChar == "<"))
    {
        $in_tag = true;
    }
    elseif(($in_tag) && ($tempChar == ">"))
    {
        $in_tag = false;
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...