在HTML字符串中自动检测标点符号,并在其中拆分字符串

时间:2011-10-05 00:07:49

标签: php regex string

我有一组标点字符:

$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 个答案:

答案 0 :(得分:1)

如果你想知道你是否在标签内,你可能需要做某种状态机,然后在字符串上使用循环。您可以引用类似数组的字符串,因此您可以执行以下操作:

 $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;
    }
 }