Skip to content

Repository files navigation

Diff-Match-Patch

Latest Stable VersionCI StatusTotal Downloads

The Diff Match and Patch libraries offer robust algorithms to perform the operations required for synchronizing plain text:

  • 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.

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.

Usage:

<?phpuseDiffMatchPatch\DiffMatchPatch;
$text1 = "The quick brown fox jumps over the lazy dog.";
$text2 = "That quick brown fox jumped over a lazy dog.";
$dmp = newDiffMatchPatch();
$diffs = $dmp->diff_main($text1, $text2, false);
var_dump($diffs);

Returns:

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

Match

Given a search string, find its best fuzzy match in a plain text near the given location. Weighted for both accuracy and location.

Usage:

<?phpuseDiffMatchPatch\DiffMatchPatch;
$dmp = newDiffMatchPatch();
$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

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.

Usage:

<?phpuseDiffMatchPatch\DiffMatchPatch;
$dmp = newDiffMatchPatch();
$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:

array(
"That quick red rabbit jumped over a tired tiger.",
array (
true,
true,
),
);

Demo

API

Currently this library available in:

Regardless of language, each library uses the same API and the same functionality.

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.

This library also implements a Bitap matching algorithm at the heart of a flexible matching and patching strategy.

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

About

PHP port of the Google's diff-match-patch library (https://github.com/google/diff-match-patch)

Resources

Stars

157 stars

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages