yusitnikov / php-diff
PHP 文本差异库
1.0.1
2023-06-17 21:11 UTC
Requires
- php: ^7.0|^8.0
This package is not auto-updated.
Last update: 2024-09-22 03:29:34 UTC
README
PHP 文本差异库
安装
composer require yusitnikov/php-diff
使用方法
创建一个 LevenshteinDiffCalculator
实例。参数
string $separatorRegex
- 分隔符正则表达式,用于将字符串分割成单元。默认情况下,字符串将按字母分割。OperationCostCalculator $operationCostCalculator
- 指定以应用自定义操作成本。默认情况下,每个操作(插入、删除、替换)的成本为 1。StringDiffCalculatorInterface $itemDiffCalculator
- 当替换单元时应用的差异计算器。
示例 1. 简单用法 - 逐字符计算距离和差异。
use Chameleon\PhpDiff\LevenshteinDiffCalculator; $s1 = 'Levenshtein'; $s2 = 'Einstein'; $differ = new LevenshteinDiffCalculator(); var_dump($differ->calcDistance($s1, $s2)); var_dump($differ->calcDiff($s1, $s2));
输出
int(5)
class Chameleon\PhpDiff\StringDiffResult#14 (2) {
public $distance =>
int(5)
public $diff =>
array(5) {
[0] =>
class Chameleon\PhpDiff\StringDiffOperation#12 (2) {
public $operation =>
string(6) "DELETE"
public $content =>
string(4) "Leve"
}
[1] =>
class Chameleon\PhpDiff\StringDiffOperation#13 (2) {
public $operation =>
string(6) "INSERT"
public $content =>
string(2) "Ei"
}
[2] =>
class Chameleon\PhpDiff\StringDiffOperation#7 (2) {
public $operation =>
string(5) "MATCH"
public $content =>
string(2) "ns"
}
[3] =>
class Chameleon\PhpDiff\StringDiffOperation#5 (2) {
public $operation =>
string(6) "DELETE"
public $content =>
string(1) "h"
}
[4] =>
class Chameleon\PhpDiff\StringDiffOperation#4 (2) {
public $operation =>
string(5) "MATCH"
public $content =>
string(4) "tein"
}
}
}
相应的差异
- Leve + Ei ns - h tein
示例 2. 复杂比较 - 比较行和单词
use Chameleon\PhpDiff\LevenshteinDiffCalculator; use Chameleon\PhpDiff\OperationCostCalculator; $s1 = 'And now here is my secret, a very simple secret: it is only with the heart that one can see rightly, what is essential is invisible to the eye. "The Little Prince", Antoine de Saint-Exupéry'; $s2 = '> So here is my secret, > its only with heart that somebody can see rightly, > what is essential is always invisible to the eye. > I can promise it to you. - Le Petit Prince, Antoine Marie Jean-Baptiste Roger, comte de Saint-Exupéry'; $lineDiffer = new LevenshteinDiffCalculator(LevenshteinDiffCalculator::SPLIT_WORDS_REGEX); $textDiffer = new LevenshteinDiffCalculator( LevenshteinDiffCalculator::SPLIT_LINES_REGEX, (new OperationCostCalculator())->setReplaceDistanceCalculator($lineDiffer), $lineDiffer ); $result = $textDiffer->calcDiff($s1, $s2);