Teksto paieška
Greph teksto režimas atlieka eilučių paiešką baitų lygmeniu per peržiūrimą failų medį. Tai numatytasis režimas, naudojamas greph CLI ir Greph::searchText() fasado. Išvestis pateikiama kanoniniu file:line:content formatu, kurį analizuoja grep, ripgrep ir dauguma redaktorių integracijų.
Greiti pavyzdžiai
# Regex search across the current directory
./vendor/bin/greph "function\s+\w+"
# Fixed-string search across src/
./vendor/bin/greph -F "function" src
# Case-insensitive whole-word search
./vendor/bin/greph -F -i -w "function" src
# Two lines of context around each match
./vendor/bin/greph -F -C 2 "TODO" src
# Stop after the first three matches per file
./vendor/bin/greph -F -m 3 "TODO" src
# Files that contain the pattern
./vendor/bin/greph -F -l "TODO" src
# Files that do not contain the pattern
./vendor/bin/greph -F -L "TODO" src
# Count matches per file
./vendor/bin/greph -F -c "TODO" src
# Inverted match
./vendor/bin/greph -F -v "TODO" src/notes.txt
Šablonai
Pagal numatytuosius nustatymus šablonas laikomas PCRE2 reguliariąja išraiška. Variklio pagrindą sudaro PHP preg_* funkcijos, todėl sintaksė atitinka PCRE nuorodąPHP.
Išjunkite reguliariųjų išraiškų variklį naudodami -F, kad šablonas būtų laikomas pažodine baitų seka. Pažodinių eilučių režimas yra greitasis kelias: atitikmenų paieškai jis naudoja strpos() ir visiškai praleidžia PCRE2 kompiliavimo žingsnį.
-i įjungia abu režimus, neatsižvelgiančius į raidžių registrą. -w prideda viso žodžio ribas abiejose atitikmens pusėse.
Failų filtravimas
Greph prieš paiešką peržiūri failų medį. Failų peržiūros mechanizmas bendras AST ir indeksuotam režimams, todėl visur taikomos tos pačios filtravimo vėliavėlės.
| Vėliavėlė | Poveikis |
|---|---|
--type NAME |
Įtraukti tik failus, atitinkančius nurodytą tipo pseudonimą (php, js, md, ...) |
--type-not NAME |
Neįtraukti failų, atitinkančių nurodytą tipo pseudonimą |
--glob GLOB |
Įtraukti tik failus, kurių keliai atitinka GLOB. Galima kartoti. |
--no-ignore |
Nepaisyti .gitignore arba .grephignore |
--hidden |
Įtraukti paslėptus failus |
Pagal numatytuosius nustatymus failų peržiūros mechanizmas paiso .gitignore ir .grephignore, praleidžia dvejetainius failus (aptinkamus pagal nulinius baitus pirmuosiuose 512 baituose) ir riboja failo dydį iki 10 MiB. Abi ribas galima konfigūruoti per WalkOptions.
Visą įtaisytųjų tipų pseudonimų sąrašą rasite API / FileTypeFilter.
Kontekstas, skaičiai ir tik failų režimai
# Two lines before and after each match
./vendor/bin/greph -F -C 2 "needle" src
# Two lines after, no lines before
./vendor/bin/greph -F -A 2 "needle" src
# Two lines before, no lines after
./vendor/bin/greph -F -B 2 "needle" src
# Count matches per file
./vendor/bin/greph -F -c "needle" src
# List matching files only
./vendor/bin/greph -F -l "needle" src
# List non-matching files only
./vendor/bin/greph -F -L "needle" src
-c, -l ir -L trumpuoju keliu apeina formatuoklį, todėl nereikia sukurti kiekvienos eilutės. Tai tinkami režimai užklausoms „kiek“ ir „kur“.
Lygiagretus skenavimas
Perduokite -j N, kad skenavimas būtų paskirstytas N darbuotojų. Greph darbuotojų telkiniui naudoja pcntl_fork() ir grįžta prie vykdymo viename procese, kai ext-pcntl nepasiekiamas.
./vendor/bin/greph -F -j 8 "function" src
Fasadas apskaičiuoja, ar lygiagretus vykdymas vertas papildomų sąnaudų, atsižvelgdamas į failų skaičių, režimą ir šablono formą. Jei riba nepasiekta, vykdoma viename procese. Heuristiką rasite Išplėstiniai nustatymai / Lygiagretūs darbuotojai.
JSON išvestis
--json pateikia struktūruotą duomenų rinkinį, kurį paskesni įrankiai gali analizuoti, nebandydami nuskaityti grep formato iš ekrano:
./vendor/bin/greph --json -F "function" src
[
{
"file": "src/Greph.php",
"matches": [
{
"line": 31,
"column": 1,
"content": "final class Greph",
"matched_text": "function",
"captures": []
}
]
}
]
rg apvalkalas vietoj to pateikia ripgrep įvykių formos JSON. Naudokite jį, kai esamas vartotojas tikisi ripgrep schemos.
Naudojimas programoje
use Greph\Greph;
use Greph\Text\TextSearchOptions;
$results = Greph::searchText(
'function',
'src',
new TextSearchOptions(
fixedString: true,
caseInsensitive: true,
beforeContext: 1,
afterContext: 1,
jobs: 4,
),
);
foreach ($results as $file) {
foreach ($file->matches as $match) {
echo "{$file->file}:{$match->line}:{$match->content}\n";
}
}
Rezultatų objektai aprašyti API / Rezultatų objektai.
Kaip tai veikia
Teksto variklis turi du kelius:
- Pažodinis kelias: kai nustatyta
-F, paieška vykdoma naudojantstrpos()per 64 KiB buferizuotą skaitytuvą, o eilučių numeravimui sekamos naujos eilutės. Reguliarioji išraiška nekompiliuojama. - Reguliariųjų išraiškų kelias: kai
-Fnenustatyta, Greph iš šablono ištraukia pažodines poeilutes naudodamas nedidelį, į PCRE panašų analizatorių (Greph\Text\LiteralExtractor) ir jas taiko kaipstrpos()išankstinį filtrą. Tada eilutės, praėjusios išankstinį filtrą, tikrinamos pagal sukompiliuotą PCRE2 šabloną su įjungtu JIT.
Abu keliai įvesties ir išvesties operacijoms naudoja tą patį BufferedReader. Skaitytuvas skaito 64 KiB dalimis, o ne po fgets() kiekvienai eilutei, todėl dideliuose failuose sistemos iškvietimų skaičius gerokai sumažėja.
Pasikartojančioms užduotims indeksuotas teksto režimas buferizuotą skaitytuvą pakeičia įkeltu trijų simbolių sekų ir identifikatorių įrašų indeksu ir visiškai praleidžia daugumą failų.