比较两个文本字符串并在开始和结束相同时合并它们

时间:2014-11-17 09:40:41

标签: php regex

被修改

如何比较两个文本字符串以检查string1的结尾是否与string2的开头相同。字符串长度和匹配部分是可变的。因此,我想合并两个字符串。

$string1 = 'Lorem ipsum dolor sit amet, consetetur';
$string2 = 'amet, consetetur sadipscing elitr 123';

$result = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr 123';

我不知道我能用哪种方式处理,所以我不知道如何开始。

3 个答案:

答案 0 :(得分:2)

function create_text_panorama(array $strings)
{
    $joined = array();
    $strings_length = count($strings);

    if ($strings_length <= 1) {
        return $strings;
    }

    $joined[] = $strings[0];

    for ($i = 1; $i < $strings_length; $i++) {
        $current  = $strings[$i];

        $prev     = $strings[$i-1];
        $prev_len = strlen($prev);

        $p = 0;

        for ($j = 0; $j < $prev_len; $j++) {
            if (!isset($current[$p]) || $prev[$j] !== $current[$p]) {
                $p = 0;
            } else {
                $p++;
            }
        }

        if ($p > 0) {
            $joined[count($joined) - 1] .= substr($current, $p + 1);
        } else {
            $joined[] = $current;
        }
    }

    return $joined;
}

echo '<pre>';

$strings = array('Lorem ipsum dolor sit amet, consetetur', 'amet, consetetur sadipscing elitr 123');
print_r(create_text_panorama($strings));

结果:

Array
(
    [0] => Lorem ipsum dolor sit amet, consetetur sadipscing elitr 123
)

很容易。

答案 1 :(得分:2)

基本上你必须找到与A的后缀相匹配的B的最长前缀。

function merge($a, $b)
{
    $suffix_len = strlen($b); // assume $b matches the suffix of $a

    // compare suffix of $a with prefix of $b
    while ($suffix_len && substr_compare($a, $b, -$suffix_len, $suffix_len) != 0) {
        --$suffix_len; // remove one character off the end
    }
    // test whether we have a match
    return $suffix_len ? $a . substr($b, $suffix_len) : $a;
}

echo merge('Lorem ipsum dolor sit amet, consetetur', 'amet, consetetur sadipscing elitr 123');

答案 2 :(得分:0)

这是一种方法:

<?php
$content = array('Lorem ipsum dolor sit amet, consetetur',
'amet, consetetur sadipscing elitr 123');
for ($i=0; $i <count($content)-1 ; $i++) { 
    $pos=0;
    $counter=0;
    while ($counter<strlen($content[$i+1])) {
        $end=substr($content[$i],strlen($content[$i])-$counter++);
        $start=$content[$i+1];
        if (strpos($start,$end)===0) {
            $pos=$counter-1;
        }
    }
    $content[$i]=$content[$i].substr($content[$i+1], $pos-1);
}
echo $content[0];