我有一个这样的字符串:
$str = "aacbbaaaa
vvnmmvvvv
bbtuucccc // this
rroxxrrrr";
字符串的第一行始终是主要模式。在上面的字符串中,除第三行外,所有行都具有相同的模式。因为最后4个字符应该是相同的两个第一个字符,所以为了使第三行正确,它应该是bbtuubbbb
。
让我再说一个例子:
$str = "abacb
mrmyr
qfqvf
lelol"; // this
在上面的字符串中,最后一行有不同的模式。因为它的最后一个字符与第二个字符不同。为了使其正确,它应该是leloe
。
无论如何我想匹配不同的图案线。我可以使用正则表达式吗?
答案 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;
}