Diff-Match-Patch
, (*1)
The Diff Match and Patch libraries offer robust algorithms to perform the operations required for synchronizing plain
text:, (*2)
- computes character-based diff of two texts
- performs fuzzy match of given string
- applies a list of patches.
This is the port of Google's diff-match-patch library to PHP., (*3)
Diff
Compare two plain text and efficiently return a array of differences. It works with characters, but if you want
to compute word-based or line-based diff — you can easily
tune
it for your needs., (*4)
Usage:, (*5)
<?php
use DiffMatchPatch\DiffMatchPatch;
$text1 = "The quick brown fox jumps over the lazy dog.";
$text2 = "That quick brown fox jumped over a lazy dog.";
$dmp = new DiffMatchPatch();
$diffs = $dmp->diff_main($text1, $text2, false);
var_dump($diffs);
Returns:, (*6)
array(
array(DiffMatchPatch::DIFF_EQUAL, "Th"),
array(DiffMatchPatch::DIFF_DELETE, "e"),
array(DiffMatchPatch::DIFF_INSERT, "at"),
array(DiffMatchPatch::DIFF_EQUAL, " quick brown fox jump"),
array(DiffMatchPatch::DIFF_DELETE, "s"),
array(DiffMatchPatch::DIFF_INSERT, "ed"),
array(DiffMatchPatch::DIFF_EQUAL, " over "),
array(DiffMatchPatch::DIFF_DELETE, "the"),
array(DiffMatchPatch::DIFF_INSERT, "a"),
array(DiffMatchPatch::DIFF_EQUAL, " lazy dog."),
)
Demo, (*7)
Match
Given a search string, find its best fuzzy match in a plain text near the given location. Weighted for both accuracy
and location., (*8)
Usage:, (*9)
<?php
use DiffMatchPatch\DiffMatchPatch;
$dmp = new DiffMatchPatch();
$text = "The quick brown fox jumps over the lazy fox.";
$pos = $dmp->match_main($text, "fox", 0); // Returns 16
$pos = $dmp->match_main($text, "fox", 40); // Returns 40
$pos = $dmp->match_main($text, "jmps"); // Returns 20
$pos = $dmp->match_main($text, "jmped"); // Returns -1
$pos = $dmp->Match_Threshold = 0.7;
$pos = $dmp->match_main($text, "jmped"); // Returns 20
Demo, (*10)
Patch
Apply a list of patches in
Unidiff-like format
onto plain text. Use best-effort to apply patch even when the underlying text doesn't match., (*11)
Usage:, (*12)
<?php
use DiffMatchPatch\DiffMatchPatch;
$dmp = new DiffMatchPatch();
$patches = $dmp->patch_make("The quick brown fox jumps over the lazy dog.", "That quick brown fox jumped over a lazy dog.");
// @@ -1,11 +1,12 @@
// Th
// -e
// +at
// quick b
// @@ -22,18 +22,17 @@
// jump
// -s
// +ed
// over
// -the
// +a
// laz
$result = $dmp->patch_apply($patches, "The quick red rabbit jumps over the tired tiger.");
var_dump($result);
Returns:, (*13)
array(
"That quick red rabbit jumped over a tired tiger.",
array (
true,
true,
),
);
Demo, (*14)
API
Currently this library available in:
* PHP
* C++
* C#
* Dart
* Java
* JavaScript
* Lua
* Objective-C
* Python, (*15)
Regardless of language, each library uses the same
API
and the same functionality., (*16)
Algorithms
This library implements Myer's diff algorithm which is
generally considered to be the best general-purpose diff. A layer of
pre-diff speedups and post-diff cleanups surround the diff algorithm, improving
both performance and output quality., (*17)
This library also implements a Bitap matching algorithm at the heart
of a flexible matching and patching strategy., (*18)
Requirements
Installation
composer require yetanotherape/diff-match-patch
License
Diff-Match-Patch is licensed under the Apache License 2.0 - see the LICENSE
file for details, (*19)