如何在 PHP 中区分文件的撇号文本

How to diff file's apostrophe text in PHP

我想比较 2 个文件并忽略 PHP

中没有撇号 ("text") 的检查行

例如: 文件 1:

START
    LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
        EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT

文件 2:

/*
 *    Translated by Saibamen
 *
 /

START    
    LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
        EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT

我想检查 Tool Version: 和 Wersja narzędzia: strings 之间是否有任何区别。

注意:文件没有逐行具有相同的模式 - 我想从文件中具有 START 的行开始差异行。

您应该首先获取每个文件的内容,然后使用具有适当模式的 preg_match 函数来查找版本行和版本字符串。

$fileContent1 = <<<TXT
dummy
dummy
LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT


dummy
TXT;

$fileContent2 = <<<TXT
dummy
LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT
dummy
dummy

TXT;

function diff_versions($leftContent, $rightContent) {
    $diff = true;
    $leftVersion = null;
    $rightVersion = null;

    $pattern = '/LTEXT "(Tool Version|Wersja narzędzia):", (.*)\R?/';

    if (preg_match($pattern, $leftContent, $matches) !== 1) {
        throw new Exception('Left content has no version line.');
    }

    $leftVersion = $matches[2];

    if (preg_match($pattern, $rightContent, $matches) !== 1) {
        throw new Exception('Right content has no version line.');
    }

    $rightVersion = $matches[2];

    return array(
        'diff' => $leftVersion === $rightVersion,
        'leftVersion' => $leftVersion,
        'rightVersion' => $rightVersion,
    );
}

var_dump(diff_versions($fileContent1, $fileContent2));


输出:

array (size=3)
   'diff' => boolean true
   'leftVersion' => string 'IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT' (length=89)
   'rightVersion' => string 'IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT' (length=89)

然后你应该根据自己的喜好区分版本。

也许这会给出一个起点:

$str1 = 'LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
    EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT';

$str2 = 'LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
    EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT';

$shortStr1 = substr($str1, 23);
$shortStr2 = substr($str2, 28);

echo "\n";
echo substr_compare($shortStr1, $shortStr2, 0, strlen($shortStr1));
echo "\n";
echo substr_compare($shortStr2, $shortStr1, 0, strlen($shortStr2));
  • 如果字符串大小不同则进行两次比较
  • 将return 0 如果相同
  • 将return 1 如果不相同
  • 为了更好的测试,您必须通过 preg_match() and pre_match_all()
  • 进行测试

我认为这个 - 或者至少是这个想法 - 会引导你找到答案。 下次提供更多信息和您已经尝试过的内容,这里的许多人甚至会提供完整的解决方案! 但为此你必须展示你已经得到和尝试过的东西。没有人愿意做你得到报酬的工作,但这里有很多人愿意帮助你,如果你有任何问题并且已经足够努力了!