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

时间:2015-08-03 09:56:32

标签: php file diff

我想区分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

我想检查工具版本和Wersjashanzędzia:字符串之间是否有任何区别。

注意:文件没有逐行相同的模式 - 我想从文件中包含START的行启动diff行。

2 个答案:

答案 0 :(得分:1)

您应首先获取每个文件的内容,然后使用具有适当模式的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)

然后你应该随意区分版本。

答案 1 :(得分:0)

也许这会给出一个重点:

$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));
  • 两个比较字符串的大小是否相同
  • 如果相同则返回0
  • 如果不相同则返回1
  • 要获得更好的测试,您必须通过preg_match()pre_match_all()
  • 进行测试

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