Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何匹配非';t基于第一行?_Php_Regex - Fatal编程技术网

Php 如何匹配非';t基于第一行?

Php 如何匹配非';t基于第一行?,php,regex,Php,Regex,我有这样一个字符串: $str = "aacbbaaaa vvnmmvvvv bbtuucccc // this rroxxrrrr"; 始终字符串的第一行是主模式。在上面的字符串中,除第三行外,所有行都具有相同的模式。因为最后4个字符应该与前两个字符相同,所以要使第三行正确,它应该是bbtuubbbb 让我再举一个例子: $str = "abacb mrmyr qfqvf lelol";

我有这样一个字符串:

$str = "aacbbaaaa
        vvnmmvvvv
        bbtuucccc    // this
        rroxxrrrr";
始终字符串的第一行是主模式。在上面的字符串中,除第三行外,所有行都具有相同的模式。因为最后4个字符应该与前两个字符相同,所以要使第三行正确,它应该是
bbtuubbbb


让我再举一个例子:

$str = "abacb
        mrmyr
        qfqvf
        lelol";    // this
在上面的字符串中,最后一行具有不同的模式。因为它的最后一个字符和第二个字符不一样。要使其正确,它应该是
leloe



无论如何,我想匹配不同的图案线。我是否可以使用正则表达式来实现这一点?

如果您需要一个工作的非正则表达式示例,请看这里

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

您无法生成查看输入测试的模式抱歉!我不明白你的问题。你的意思是说正则表达式应该从第一个字符串中识别模式并匹配后续字符串吗?@noob是的,完全正确。@stack:等待有一天某些AI能够识别它。@stack:我这么说是因为正则表达式不能仅仅通过查看字符串来识别模式。您必须构造正则表达式以匹配模式。。您可以解析同一类型的多个字符串,进行一些编程,并从许多可能性中找出简短的可能模式。