matecat / whole-text-finder
用PHP编写的简单全文搜索工具
v1.0.15
2022-01-05 10:01 UTC
Requires
- php: >=5.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- fzaninotto/faker: ^1.8
- phpstan/phpstan: ^0.11.12
- phpunit/phpunit: ^8.2
This package is auto-updated.
Last update: 2024-09-05 15:57:57 UTC
README
WholeTextFinder 是一个简单的全文搜索工具。
基本用法
使用 find
方法。这里是一个基本的搜索
//.. use Finder\WholeTextFinder; $haystack = "PHP PHP is the #1 web scripting PHP language of choice."; $needle = "php"; // 3 matches $matches = WholeTextFinder::find($haystack, $needle); // $matches is equals to: // // array(3) { // [0] => // array(2) { // [0] => // string(3) "PHP" // [1] => // int(0) // } // [1] => // array(2) { // [0] => // string(3) "PHP" // [1] => // int(4) // } // [2] => // array(2) { // [0] => // string(3) "PHP" // [1] => // int(32) // } // }
多字节字符串
请注意,WholeTextFinder::find
函数是多字节安全的,并返回原始短语中的正确单词位置。请参考这里
//.. use Finder\WholeTextFinder; $haystack = "La casa è bella bella"; $needle = "bella"; $matches = WholeTextFinder::find($haystack, $needle, true, true, true); // $matches is equals to: // array ( // 0 => // array ( // 0 => 'bella', // 1 => 10, // ), // 1 => // array ( // 0 => 'bella', // 1 => 16, // ), //)
查找和替换
还有一个可用的 findAndReplace
方法
//.. use Finder\WholeTextFinder; $haystack = 'Δύο παράγοντες καθόρισαν την αντίληψή μου για την Τενεσί Ουίλιαμς και τη σκηνική παρουσίαση των κειμένων: η Maria Britneva και η Annette Saddik, αφετέρου.'; $needle = 'και'; $replacement = 'test'; $matches = WholeTextFinder::findAndReplace($haystack, $needle, $replacement); // $matches is equals to: // // array(2) { // ["replacement"]=> // string(252) "Δύο παράγοντες καθόρισαν την αντίληψή μου για την Τενεσί Ουίλιαμς test τη σκηνική παρουσίαση των κειμένων: η Maria Britneva test η Annette Saddik, αφετέρου." // ["occurrencies"]=> // array(2) { // [0]=> // array(2) { // [0]=> // string(6) "και" // [1]=> // int(66) // } // [1]=> // array(2) { // [0]=> // string(6) "και" // [1]=> // int(123) // } // } // } //
此方法会自动 排除 HTML 和一些 Matecat 特殊标签,但允许替换 HTML 标签内的内容。
例如,
//.. use Finder\WholeTextFinder; // Example 1 $haystack = "Beauty -> 2 Anti-Akne Gesichtsreiniger Schlankmacher <g id=\"2\">XXX</g>"; $needle = 2; $replacement = "test"; $matches = WholeTextFinder::findAndReplace($haystack, $needle, $replacement); // $matches is equals to: // // array(2) { // ["replacement"]=> // string(252) "Beauty -> test Anti-Akne Gesichtsreiniger Schlankmacher <g id="2">XXX</g>" // ["occurrencies"]=> // array(1) { // [0]=> // array(2) { // [0]=> // string(1) "2" // [1]=> // int(10) // } // } // } // // Example 2 $haystack = "Beauty -> 2 Anti-Akne Gesichtsreiniger Schlankmacher <g id=\"2\">XXX</g>"; $needle = 'XXX'; $replacement = "test"; $matches = WholeTextFinder::findAndReplace($haystack, $needle, $replacement); // $matches is equals to: // // array(2) { // ["replacement"]=> // string(252) "Beauty -> 2 Anti-Akne Gesichtsreiniger Schlankmacher <g id="2">test</g>" // ["occurrencies"]=> // array(1) { // [0]=> // array(2) { // [0]=> // string(1) "test" // [1]=> // int(55) // } // } // } //
搜索选项
一些选项是可用的
您还可以指定四个选项
- $skipHtmlEntities (默认为
true
) - $exactMatch (默认为
false
) - $caseSensitive (默认为
false
) - $preserveNbsps (默认为
false
)
以下是一些示例
//.. use Finder\WholeTextFinder; $haystack = "PHP PHP is the #1 web scripting PHP language of choice."; // 0 matches $needle = "php"; $matches = WholeTextFinder::find($haystack, $needle, true, true, true); // 1 match $needle = "#1"; $matches = WholeTextFinder::find($haystack, $needle, true, true, true); // 1 match, even if the haystack contains an invisible nbsp and the needle has an ordinary spacer $haystackWithNbsp = "Lawful basis for processing including basis of legitimate interest"; $needleWithoutNbsp = "Lawful basis for processing including basis of legitimate interest"; $matches = WholeTextFinder::find($haystackWithNbsp, $needleWithoutNbsp, true, true, true);
支持
如果您发现了一个问题或有一个想法,请参考 本节。
作者
- Mauro Cassani - github
许可协议
本项目采用 MIT 许可协议 - 请参阅 LICENSE.md 文件以获取详细信息