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:我这么说是因为正则表达式不能仅仅通过查看字符串来识别模式。您必须构造正则表达式以匹配模式。。您可以解析同一类型的多个字符串,进行一些编程,并从许多可能性中找出简短的可能模式。