如何根据第一行匹配不是的行?

时间:2016-04-12 14:54:49

标签: php regex

我有一个这样的字符串:

$str = "aacbbaaaa
        vvnmmvvvv
        bbtuucccc    // this
        rroxxrrrr";

字符串的第一行始终是主要模式。在上面的字符串中,除第三行外,所有行都具有相同的模式。因为最后4个字符应该是相同的两个第一个字符,所以为了使第三行正确,它应该是bbtuubbbb

让我再说一个例子:

$str = "abacb
        mrmyr
        qfqvf
        lelol";    // this

在上面的字符串中,最后一行有不同的模式。因为它的最后一个字符与第二个字符不同。为了使其正确,它应该是leloe

无论如何我想匹配不同的图案线。我可以使用正则表达式吗?

1 个答案:

答案 0 :(得分:2)

如果您需要一个有效的非RegEx 示例,此处为

<?
$str = "aacbbaaaa
        vvnmmvvvv
        bbtuucccc
        rroxxrrrr";

$lines = array_map('trim', explode("\n", $str));

define('STR_LEN', strlen($lines[0]));
define('STR_COUNT', count($lines));

$pattern = getPattern($lines[0]);

for ($i = 1; $i < STR_COUNT; $i++) {
    $line = $lines[$i];
    if ($pattern != getPattern($line)) {
        echo $line . "\n";
    }
}

//-------------------------

function getPattern($str) {
    $result = '';
    $dictionary = [];
    $counter = 0;
    for($i = 0; $i < STR_LEN; $i++) {
        if (!array_key_exists($str[$i], $dictionary)) {
            $dictionary[$str[$i]] = $counter++;
        }
        $result .= $dictionary[$str[$i]] . '.';
    }

    return $result;
}