{"id":35694011,"url":"https://github.com/MakarMS/text-probe","last_synced_at":"2026-01-11T20:00:32.732Z","repository":{"id":306154727,"uuid":"1025195740","full_name":"MakarMS/text-probe","owner":"MakarMS","description":"Simple and extensible PHP library for text analysis and pattern matching, designed to help developers probe, parse, and manipulate text efficiently.","archived":false,"fork":false,"pushed_at":"2025-12-18T13:56:25.000Z","size":319,"stargazers_count":10,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-21T08:30:51.120Z","etag":null,"topics":["addresses-parsing","contributions-welcome","datetime","discord","email","good-first-contribution","good-first-issue","good-first-pr","help-wanted","mbstring","open-source","phone-number","php","regex","regexp","slack","telegram","text-analysis","uuid"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MakarMS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-23T22:08:45.000Z","updated_at":"2025-12-17T22:25:20.000Z","dependencies_parsed_at":"2025-07-24T01:18:15.448Z","dependency_job_id":"589e4849-7876-4e13-9561-9360a814a249","html_url":"https://github.com/MakarMS/text-probe","commit_stats":null,"previous_names":["makarms/text-probe"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/MakarMS/text-probe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakarMS%2Ftext-probe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakarMS%2Ftext-probe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakarMS%2Ftext-probe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakarMS%2Ftext-probe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MakarMS","download_url":"https://codeload.github.com/MakarMS/text-probe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakarMS%2Ftext-probe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28321261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["addresses-parsing","contributions-welcome","datetime","discord","email","good-first-contribution","good-first-issue","good-first-pr","help-wanted","mbstring","open-source","phone-number","php","regex","regexp","slack","telegram","text-analysis","uuid"],"created_at":"2026-01-06T00:00:56.926Z","updated_at":"2026-01-11T20:00:32.692Z","avatar_url":"https://github.com/MakarMS.png","language":"PHP","funding_links":[],"categories":["Project Categories"],"sub_categories":[],"readme":"# TextProbe\n\n[![PHP Version Require](http://poser.pugx.org/makarms/text-probe/require/php)](https://packagist.org/packages/makarms/text-probe) [![Latest Stable Version](http://poser.pugx.org/makarms/text-probe/v)](https://packagist.org/packages/makarms/text-probe) [![PHP Tests](https://github.com/MakarMS/text-probe/actions/workflows/php-tests.yml/badge.svg?branch=main)](https://github.com/MakarMS/text-probe/actions/workflows/php-tests.yml) [![codecov](https://codecov.io/github/MakarMS/text-probe/graph/badge.svg?token=HFDSEGHGH4)](https://codecov.io/github/MakarMS/text-probe) [![License](http://poser.pugx.org/makarms/text-probe/license)](https://packagist.org/packages/makarms/text-probe)\n\n**TextProbe** is a simple and extensible PHP library for text analysis and pattern matching. It is designed to help\ndevelopers probe, parse, and manipulate text efficiently using customizable rules and matchers.\n\n## Features\n\n- 🧠 Easy-to-use API for text matching and parsing\n- 🔧 Extensible architecture — write your own matchers and rules\n- 💡 Suitable for parsing logs, user input, or any structured text\n\n## Installation\n\nYou can install the library via [Composer](https://getcomposer.org/):\n\n```bash\ncomposer require makarms/text-probe\n```\n\n## Available Probes\n\nThe library comes with several built-in probes to detect common patterns in text:\n\n### 🧑‍💻 Contact \u0026 Identity\n\n- `DiscordNewUsernameProbe` — extracts Discord usernames in the new format (e.g., `@username`), enforcing Discord’s\n  updated naming rules (length, characters, no consecutive dots).\n\n- `DiscordOldUsernameProbe` — extracts classic Discord usernames in the format `username#1234`, ensuring proper\n  structure and valid discriminator.\n\n- `EmailProbe` — extracts email addresses.\n\n- `RussianPassportNumberProbe` — extracts Russian internal passport numbers (series and six-digit number), supporting\n  spaces or dashes between parts with basic structure validation.\n\n- `PhoneProbe` — extracts phone numbers (supports various formats).\n\n- `RussianSnilsProbe` — extracts Russian SNILS numbers (11 digits with checksum),\n  supporting compact or dashed formats like `11223344595` or `112-233-445 95`.\n\n- `SlackUsernameProbe` — extracts Slack usernames (e.g., `@username`), supporting Slack-specific username rules such as\n  allowed characters, length limits, and no consecutive dots.\n\n- `InstagramUsernameProbe` — extracts Instagram usernames (e.g., `@username`), allowing letters, digits, underscores,\n  and dots while rejecting invalid boundaries or consecutive dots.\n\n- `TelegramUserLinkProbe` — extracts `t.me` links pointing to Telegram users.\n\n- `TelegramUsernameProbe` — extracts Telegram usernames (e.g., `@username`).\n\n- `UsSocialSecurityNumberProbe` — extracts U.S. Social Security Numbers (SSN) in the `XXX-XX-XXXX` format while\n  discarding structurally invalid area, group, or serial combinations.\n\n#### 🚗 Vehicle\n\n- `CarVinProbe` — extracts vehicle identification numbers (VINs), enforcing allowed characters and validating the\n  checksum digit.\n\n#### 🛂 Passports (MRZ)\n\n- `MrzTd1Probe` — extracts MRZ TD1 blocks (3 lines × 30 chars).\n\n- `MrzTd2Probe` — extracts MRZ TD2 blocks (2 lines × 36 chars).\n\n- `MrzTd3Probe` — extracts MRZ TD3 blocks (2 lines × 44 chars).\n\n- `InternationalPassportProbe` — extracts MRZ passport blocks across TD1/TD2/TD3 formats.\n\n#### 🧾 Tax Numbers\n\n- `DeSteuerIdProbe` — extracts German Steuer-ID numbers.\n\n- `DeSteuernummerProbe` — extracts German Steuernummer identifiers.\n\n- `FrNumeroFiscalReferenceProbe` — extracts French numero fiscal reference numbers.\n\n- `ItCodiceFiscaleProbe` — extracts Italian Codice Fiscale identifiers.\n\n- `EsNifProbe` — extracts Spanish NIF identifiers.\n\n- `NlBsnProbe` — extracts Dutch BSN numbers.\n\n- `PlPeselProbe` — extracts Polish PESEL numbers.\n\n- `PlNipProbe` — extracts Polish NIP numbers.\n\n- `SePersonnummerProbe` — extracts Swedish personnummer identifiers.\n\n- `NoFoedselsnummerProbe` — extracts Norwegian fødselsnummer identifiers.\n\n- `ChAhvNummerProbe` — extracts Swiss AHV numbers.\n\n- `GbUtrProbe` — extracts UK Unique Taxpayer Reference (UTR) numbers.\n\n- `RuInnProbe` — extracts Russian tax identification numbers (INN).\n\n- `UsEinProbe` — extracts US EIN numbers.\n\n- `TaxNumberProbe` — extracts tax numbers across supported regions.\n\n#### 🏥 Medical Policy\n\n- `DeKrankenversichertennummerProbe` — extracts German Krankenversichertennummer numbers.\n\n- `FrNirProbe` — extracts French NIR numbers.\n\n- `ItTesseraSanitariaProbe` — extracts Italian tessera sanitaria identifiers.\n\n- `EsSipNumberProbe` — extracts Spanish SIP numbers.\n\n- `NlBsnMedicalProbe` — extracts Dutch BSN medical identifiers.\n\n- `PlPeselMedicalProbe` — extracts Polish PESEL medical identifiers.\n\n- `SePersonnummerMedicalProbe` — extracts Swedish personnummer medical identifiers.\n\n- `NoFoedselsnummerMedicalProbe` — extracts Norwegian fødselsnummer medical identifiers.\n\n- `ChAhvMedicalProbe` — extracts Swiss AHV medical identifiers.\n\n- `GbNhsNumberProbe` — extracts UK NHS numbers.\n\n- `RuOmsEnp16Probe` — extracts Russian OMS ENP16 numbers.\n\n- `UsMemberIdProbe` — extracts US member identifiers.\n\n- `MedicalPolicyNumberProbe` — extracts medical policy numbers across supported regions.\n\n#### 🪪 Driver Licenses\n\n- `UkDrivingLicenceNumberProbe` — extracts UK driving licence numbers.\n\n- `DeFuehrerscheinnummerProbe` — extracts German driving licence numbers.\n\n- `FrNumeroPermisDeConduireProbe` — extracts French driving licence numbers.\n\n- `ItNumeroPatenteProbe` — extracts Italian driving licence numbers.\n\n- `EsNumeroPermisoConducirProbe` — extracts Spanish driving licence numbers.\n\n- `NlRijbewijsNummerProbe` — extracts Dutch driving licence numbers.\n\n- `PlNumerPrawaJazdyProbe` — extracts Polish driving licence numbers.\n\n- `SeKoerkortsnummerProbe` — extracts Swedish driving licence numbers.\n\n- `NoFoererkortnummerProbe` — extracts Norwegian driving licence numbers.\n\n- `ChFuehrerausweisNummerProbe` — extracts Swiss driving licence numbers.\n\n- `RuVoditelskoeUdostoverenieProbe` — extracts Russian driving licence numbers.\n\n- `UsDriverLicenseNumberProbe` — extracts US driving licence numbers.\n\n- `DriverLicenseProbe` — extracts driver licence numbers across supported regions.\n\n#### 🏢 Company Registration\n\n- `DeHandelsregisternummerProbe` — extracts German Handelsregister numbers.\n\n- `FrSirenProbe` — extracts French SIREN numbers.\n\n- `FrSiretProbe` — extracts French SIRET numbers.\n\n- `ItCodiceReaProbe` — extracts Italian codice REA numbers.\n\n- `EsCifProbe` — extracts Spanish CIF numbers.\n\n- `NlKvKNummerProbe` — extracts Dutch KvK numbers.\n\n- `PlKrsProbe` — extracts Polish KRS numbers.\n\n- `SeOrganisationsnummerProbe` — extracts Swedish organisation numbers.\n\n- `NoOrganisasjonsnummerProbe` — extracts Norwegian organisation numbers.\n\n- `ChUidiProbe` — extracts Swiss UIDI numbers.\n\n- `UkCompanyNumberProbe` — extracts UK company registration numbers.\n\n- `RuOgrnProbe` — extracts Russian OGRN numbers.\n\n- `UsCompanyRegistrationNumberProbe` — extracts US company registration numbers.\n\n- `CompanyRegistrationNumberProbe` — extracts company registration numbers across supported regions.\n\n### 🔐 Security \u0026 Auth\n\n- `ApiKeyProbe` — extracts API keys from common provider prefixes (Stripe, GitHub, Google, AWS).\n\n- `StripeSecretKeyProbe` — extracts Stripe secret keys (e.g., `sk_live_...`).\n\n- `StripePublishableKeyProbe` — extracts Stripe publishable keys (e.g., `pk_test_...`).\n\n- `GitHubClassicTokenProbe` — extracts GitHub classic personal access tokens (`ghp_...`).\n\n- `GitHubFineGrainedTokenProbe` — extracts GitHub fine-grained personal access tokens (`github_pat_...`).\n\n- `GoogleApiKeyProbe` — extracts Google API keys starting with `AIza`.\n\n- `AwsAccessKeyIdProbe` — extracts AWS access key IDs (`AKIA`/`ASIA` + 16 chars).\n\n- `BearerTokenProbe` — extracts bearer token strings (JWT or opaque).\n\n- `OpaqueTokenProbe` — extracts opaque token strings (base64url-ish).\n\n- `BasicAuthProbe` — extracts HTTP Basic auth base64 blobs.\n\n- `BasicAuthBase64Probe` — extracts base64 blobs suitable for Basic auth.\n\n- `OAuthAccessTokenProbe` — extracts OAuth access tokens in JWT or opaque form.\n\n- `OAuthAccessTokenJwtProbe` — extracts OAuth access tokens in JWT form.\n\n- `OAuthAccessTokenOpaqueProbe` — extracts opaque OAuth access tokens.\n\n- `OAuthRefreshTokenProbe` — extracts OAuth refresh tokens in JWT or opaque form.\n\n- `OAuthRefreshTokenJwtProbe` — extracts OAuth refresh tokens in JWT form.\n\n- `OAuthRefreshTokenOpaqueProbe` — extracts opaque OAuth refresh tokens.\n\n- `CsrfTokenProbe` — extracts CSRF tokens in hex, base64url, or UUID form.\n\n- `CsrfTokenHexProbe` — extracts 32–128 character hexadecimal CSRF tokens.\n\n- `CsrfTokenBase64UrlProbe` — extracts base64url-style CSRF tokens.\n\n- `CsrfTokenUuidProbe` — extracts UUID-shaped CSRF tokens.\n\n- `PasswordHashProbe` — extracts bcrypt and Argon2 password hashes.\n\n- `BcryptHashProbe` — extracts bcrypt hashes with supported cost factors.\n\n- `Argon2idHashProbe` — extracts Argon2id hashes with non-zero parameters.\n\n- `Argon2iHashProbe` — extracts Argon2i hashes with non-zero parameters.\n\n- `PrivateKeyProbe` — extracts PEM/OpenSSH private key blocks.\n\n- `PemRsaPrivateKeyProbe` — extracts PEM-encoded RSA private key blocks.\n\n- `PemPkcs8PrivateKeyProbe` — extracts PEM-encoded PKCS#8 private key blocks.\n\n- `OpenSshPrivateKeyProbe` — extracts OpenSSH private key blocks.\n\n- `PublicKeyProbe` — extracts PEM public keys and certificates.\n\n- `PemPublicKeyProbe` — extracts PEM public key blocks.\n\n- `PemCertificateProbe` — extracts PEM certificate blocks.\n\n- `SshPublicKeyProbe` — extracts OpenSSH public key lines.\n\n- `SshRsaPublicKeyProbe` — extracts ssh-rsa public keys.\n\n- `SshEd25519PublicKeyProbe` — extracts ssh-ed25519 public keys.\n\n- `SshEcdsaPublicKeyProbe` — extracts ECDSA OpenSSH public keys.\n\n### 📅 Date \u0026 Time\n\n- `DateProbe` — extracts dates in various formats (e.g., `YYYY-MM-DD`, `DD/MM/YYYY`, `2nd Jan 2023`).\n\n- `DateTimeProbe` — extracts combined date and time in multiple common formats.\n\n- `TimeProbe` — extracts times (e.g., `14:30`, `14:30:15`, optional AM/PM).\n\n### 💰 Finance\n\n#### 💱 Currency\n\n- `CurrencyCodeProbe` — extracts ISO-4217 currency codes (e.g., `USD`, `EUR`) using a whitelist validator.\n\n#### 🔗 Crypto transaction IDs\n\n- `BitcoinTxIdProbe` — extracts Bitcoin transaction IDs (64 hex characters).\n\n- `EthereumTxHashProbe` — extracts Ethereum transaction hashes (`0x` + 64 hex characters).\n\n- `LitecoinTxIdProbe` — extracts Litecoin transaction IDs (64 hex characters).\n\n- `RippleTxIdProbe` — extracts Ripple transaction IDs (64 uppercase hex characters).\n\n- `SolanaTxSignatureProbe` — extracts Solana transaction signatures (87–88 base58 characters).\n\n- `TronTxIdProbe` — extracts Tron transaction IDs (64 hex characters).\n\n- `UsdcAlgorandTxIdProbe` — extracts USDC Algorand transaction IDs (52 base32 characters).\n\n- `UsdcErc20TxHashProbe` — extracts USDC ERC-20 transaction hashes (`0x` + 64 hex characters).\n\n- `UsdcSolanaTxSignatureProbe` — extracts USDC Solana transaction signatures (87–88 base58 characters).\n\n- `UsdtErc20TxHashProbe` — extracts USDT ERC-20 transaction hashes (`0x` + 64 hex characters).\n\n- `UsdtOmniTxIdProbe` — extracts USDT Omni transaction IDs (64 hex characters).\n\n- `UsdtTrc20TxIdProbe` — extracts USDT TRC-20 transaction IDs (64 hex characters).\n\n- `CryptoTransactionIdProbe` — extracts transaction IDs across supported crypto networks.\n\n#### 🧾 Invoices \u0026 payment references\n\n- `InvoiceNumericIdProbe` — extracts numeric invoice identifiers (6+ digits).\n\n- `InvoiceAlnumIdProbe` — extracts alphanumeric invoice identifiers (uppercase letters, digits, `-` and `/`).\n\n- `InvoiceNumberProbe` — extracts invoice identifiers in numeric or alphanumeric form.\n\n- `SepaRfReferenceProbe` — extracts SEPA RF references and validates Mod-97 checksums.\n\n- `PaymentReferenceProbe` — extracts SEPA RF references or invoice identifiers.\n\n#### 🏛 VAT numbers\n\n- `AtUidProbe` — extracts Austria VAT numbers (`ATU########`).\n\n- `BeVatNumberProbe` — extracts Belgium VAT numbers (`BE0#########`).\n\n- `BgVatNumberProbe` — extracts Bulgaria VAT numbers (`BG#########` or `BG##########`).\n\n- `CyVatNumberProbe` — extracts Cyprus VAT numbers (`CY########X`).\n\n- `CzDicProbe` — extracts Czech VAT numbers (`CZ########`–`CZ##########`).\n\n- `DeUstIdNrProbe` — extracts Germany VAT numbers (`DE#########`).\n\n- `DkCvrProbe` — extracts Denmark VAT numbers (`DK########`).\n\n- `EeKmkrProbe` — extracts Estonia VAT numbers (`EE#########`).\n\n- `EsNifIvaProbe` — extracts Spain VAT numbers (`ES#########`).\n\n- `FiAlvNumeroProbe` — extracts Finland VAT numbers (`FI########`).\n\n- `FrNumeroTvaIntracommunautaireProbe` — extracts France VAT numbers (`FR**#########`).\n\n- `GrAfmVatProbe` — extracts Greece VAT numbers (`EL#########`).\n\n- `HrOibVatProbe` — extracts Croatia VAT numbers (`HR###########`).\n\n- `HuAdoazonositoJelVatProbe` — extracts Hungary VAT numbers (`HU########`).\n\n- `IeVatNumberProbe` — extracts Ireland VAT numbers (legacy and new formats).\n\n- `ItPartitaIvaProbe` — extracts Italy VAT numbers (`IT###########`).\n\n- `LtPvmMoketojoKodasProbe` — extracts Lithuania VAT numbers (`LT#########` or `LT############`).\n\n- `LuNumeroTvaProbe` — extracts Luxembourg VAT numbers (`LU########`).\n\n- `LvPvnRegNrProbe` — extracts Latvia VAT numbers (`LV###########`).\n\n- `MtVatNumberProbe` — extracts Malta VAT numbers (`MT########`).\n\n- `NlBtwNummerProbe` — extracts Netherlands VAT numbers (`NL#########B##`).\n\n- `PlNipVatProbe` — extracts Poland VAT numbers (`PL##########`).\n\n- `PtNifIvaProbe` — extracts Portugal VAT numbers (`PT#########`).\n\n- `RoCuiVatProbe` — extracts Romania VAT numbers (`RO##`–`RO##########`).\n\n- `SeVatNummerProbe` — extracts Sweden VAT numbers (`SE##########01`).\n\n- `SiDavcnaStevilkaVatProbe` — extracts Slovenia VAT numbers (`SI########`).\n\n- `SkDicVatProbe` — extracts Slovakia VAT numbers (`SK##########`).\n\n- `GbVatNumberProbe` — extracts Great Britain VAT numbers (`GB#########`).\n\n- `XiVatNumberProbe` — extracts Northern Ireland VAT numbers (`XI#########`).\n\n- `ChUidMwstProbe` — extracts Switzerland VAT numbers (`CHE#########MWST|TVA|IVA`).\n\n- `NoOrgnrMvaProbe` — extracts Norway VAT numbers (`NO#########MVA`).\n\n- `VatNumberProbe` — extracts VAT numbers across supported regions.\n\n#### 🏦 SWIFT references\n\n- `UetrProbe` — extracts SWIFT UETR identifiers (UUID-like with constrained version/variant).\n\n- `SwiftField20ReferenceProbe` — extracts SWIFT field 20 references (6–16 chars: A–Z, 0–9, `/` or `-`).\n\n- `SwiftReferenceProbe` — extracts SWIFT references (UETR or field 20 reference).\n\n#### 💸 PayPal\n\n- `PaypalTransactionIdProbe` — extracts PayPal transaction IDs (17 uppercase alphanumeric characters).\n\n#### 💳 Stripe object IDs\n\n- `StripePaymentIntentIdProbe` — extracts Stripe payment intent IDs (`pi_...`).\n\n- `StripeChargeIdProbe` — extracts Stripe charge IDs (`ch_...`).\n\n- `StripeCustomerIdProbe` — extracts Stripe customer IDs (`cus_...`).\n\n- `StripeInvoiceIdProbe` — extracts Stripe invoice IDs (`in_...`).\n\n- `StripeSubscriptionIdProbe` — extracts Stripe subscription IDs (`sub_...`).\n\n- `StripePaymentMethodIdProbe` — extracts Stripe payment method IDs (`pm_...`).\n\n- `StripeEventIdProbe` — extracts Stripe event IDs (`evt_...`).\n\n- `StripeObjectIdProbe` — extracts Stripe object IDs across supported types.\n\n#### 🧾 Prices\n\n- `PriceProbe` — extracts price expressions combining numeric amounts with currency symbols (e.g., `$199`, `1 500₽`) or\n  ISO currency codes, including slash-separated pairs (e.g., `100 USD`, `99 EUR/UAH`). Supports spaces or commas as\n  thousand separators and dots or commas for decimal fractions.\n\n#### 🏦 Bank Account\n\n- `BankBicCodeProbe` — Extracts SWIFT/BIC codes (8–11 characters, e.g., `DEUTDEFF500`).\n\n- `BankIbanNumberProbe` — Extracts IBAN numbers, supports spaces, validates using Mod-97.\n\n- `BankRoutingNumberProbe` — Extracts US Routing Numbers (9 digits), validates the checksum.\n\n#### 💳 Bank Cards\n\n\u003e Supported formats: plain digits (e.g., `4111111111111111`), digits separated by spaces (e.g., `4111 1111 1111 1111`)\n\u003e or\n\u003e dashes (e.g., `4111-1111-1111-1111`). Only Luhn-valid numbers by default.\n\n- `BankCardNumberProbe` — extracts major card schemes like Visa, Mastercard, Amex, and all other supported schemes\n  listed below.\n\n- `BankAmexCardProbe` — American Express (prefixes: 34, 37), 15 digits.\n\n- `BankDinersClubCardProbe` — Diners Club (prefixes: 30[0-5], 309, 36, 38, 39), 13–14 digits.\n\n- `BankDiscoverCardProbe` — Discover (prefixes: 6011, 65, 644–649, 622126–622925), 16 digits.\n\n- `BankJcbCardProbe` — JCB (prefixes: 3528–3589), 16 digits.\n\n- `BankMaestroCardProbe` — Maestro (prefixes: 5018, 5020, 5038, 5612, 5893, 6304, 6759, 6761–6763), 16–19 digits.\n\n- `BankMastercardCardProbe` — Mastercard (prefixes: 51–55, 2221–2720), 16 digits.\n\n- `BankMirCardProbe` — MIR (prefixes: 2200–2204), 16 digits.\n\n- `BankRupayCardProbe` — RuPay (prefixes: 508, 60, 65, 81, 82), 16 digits.\n\n- `BankTroyCardProbe` — Troy (prefixes: 9792), 16 digits.\n\n- `BankUnionpayCardProbe` — UnionPay (prefixes: 62), 16–19 digits.\n\n- `BankVerveCardProbe` — Verve (prefixes: 5060, 5061, 6500–6509), 13–19 digits.\n\n- `BankVisaCardProbe` — Visa (prefixes: 4), 13–19 digits.\n\n#### 🔒 Card Security \u0026 Expiration\n\n- `BankCardCvvCvcCodeProbe` — Extracts CVV/CVC codes (3–4 digits).\n\n- `BankCardExpiryProbe` — Extracts card expiration dates (formats `MM/YY`, `MM/YYYY`, `MM-YY`, `MM-YYYY`, etc.).\n\n#### 🔗 Crypto\n\n- `BitcoinAddressProbe` — Extracts Bitcoin addresses (Base58 and Bech32 formats).\n\n- `EthereumAddressProbe` — Extracts Ethereum addresses (0x-prefixed, 40 hex characters).\n\n- `LitecoinAddressProbe` — Extracts Litecoin addresses (Base58 or Bech32).\n\n- `RippleAddressProbe` — Extracts Ripple/XRP addresses (starts with 'r', Base58).\n\n- `SolanaAddressProbe` — Extracts Solana addresses (Base58, 32–44 chars).\n\n- `TronAddressProbe` — Extracts TRON addresses (Base58, starts with 'T', 34 chars).\n\n- `UsdcAlgorandAddressProbe` — Extracts USDC addresses on Algorand (Base32, 58 chars).\n\n- `UsdcErc20AddressProbe` — Extracts USDC ERC20 addresses (Ethereum-compatible, 0x-prefixed).\n\n- `UsdcSolanaAddressProbe` — Extracts USDC addresses on Solana (same format as Solana addresses).\n\n- `UsdtErc20AddressProbe` — Extracts USDT ERC20 addresses (Ethereum-compatible, 0x-prefixed).\n\n- `UsdtOmniAddressProbe` — Extracts USDT Omni addresses (Bitcoin-based, starts with 1 or 3, 26–35 chars).\n\n- `UsdtTrc20AddressProbe` — Extracts USDT TRC20 addresses (TRON-based, Base58, starts with 'T', 34 chars).\n\n### 📦 Logistics\n\n#### 📦 Tracking numbers\n\n- `Ups1ZTrackingProbe` — extracts UPS 1Z tracking numbers.\n\n- `Fedex12Probe` — extracts FedEx 12-digit tracking numbers.\n\n- `Fedex15Probe` — extracts FedEx 15-digit tracking numbers.\n\n- `Fedex20Probe` — extracts FedEx 20-digit tracking numbers.\n\n- `UspsNumeric20Probe` — extracts USPS 20-digit tracking numbers.\n\n- `UspsNumeric22Probe` — extracts USPS 22-digit tracking numbers.\n\n- `UspsIntlS10Probe` — extracts USPS S10-format tracking numbers.\n\n- `DhlExpress10Probe` — extracts DHL Express 10-digit tracking numbers.\n\n- `DpdTrackingProbe` — extracts DPD 14-digit tracking numbers.\n\n- `GlsTrackingProbe` — extracts GLS tracking numbers (11–14 digits).\n\n- `HermesEvriTrackingProbe` — extracts Hermes/Evri tracking numbers.\n\n- `RoyalMailS10Probe` — extracts Royal Mail S10 tracking numbers.\n\n- `LaPosteColissimoS10Probe` — extracts La Poste/Colissimo S10 tracking numbers.\n\n- `CorreosS10Probe` — extracts Correos S10 tracking numbers.\n\n- `PostnlTrackingProbe` — extracts PostNL tracking numbers.\n\n- `BpostS10Probe` — extracts bpost S10 tracking numbers.\n\n- `DeutschePostS10Probe` — extracts Deutsche Post S10 tracking numbers.\n\n- `SwissPostS10Probe` — extracts Swiss Post S10 tracking numbers.\n\n- `PosteItalianeS10Probe` — extracts Poste Italiane S10 tracking numbers.\n\n- `PocztaPolskaS10Probe` — extracts Poczta Polska S10 tracking numbers.\n\n- `PostNordS10Probe` — extracts PostNord S10 tracking numbers.\n\n- `RussiaPostS10Probe` — extracts Russia Post S10 tracking numbers.\n\n- `TrackingNumberProbe` — extracts tracking numbers across supported carriers.\n\n### 🏷 Barcodes\n\n- `Ean13Probe` — extracts EAN-13 barcodes.\n\n- `UpcAProbe` — extracts UPC-A barcodes.\n\n- `BarcodeValueProbe` — extracts barcode values across supported formats.\n\n### 🗺 Geolocation\n\n- `GeoCoordinatesProbe` — extracts geographic coordinates in various formats (`decimal` or `degrees/minutes/seconds`,\n  `N/S/E/W`).\n\n- `PostalCodeProbe` — extracts postal codes across multiple regions, including US ZIP (+4), Russian six-digit, UK,\n  Canadian, and Dutch-style codes.\n\n### 🏷 Social \u0026 Tags\n\n- `HashtagProbe` — extracts hashtags from text (e.g., `#example`), supporting Unicode letters, numbers, and underscores,\n  detecting hashtags in any position of the text.\n\n### ✍️ Text\n\n- `AllCapsSequenceProbe` — extracts sequences of two or more consecutive uppercase letters (Unicode-aware), making it\n  easy to detect acronyms or emphasised ALL CAPS tokens in text.\n\n### 🆔 UUID \u0026 Identifiers\n\n- `HexHashProbe` — extracts common hexadecimal hash strings such as MD5, SHA-1,\n  SHA-224, SHA-256, SHA-384, and SHA-512, matching 32–128 hex characters while\n  avoiding partial matches inside longer strings.\n\n- `UUIDProbe` — extracts any valid UUID (v1–v6) without checking the specific version. Supports standard UUID formats\n  with hyphens.\n\n- `UUIDv1Probe` — extracts UUID version 1, matching the format `xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx`, commonly used for\n  time-based identifiers.\n\n- `UUIDv2Probe` — extracts UUID version 2, matching the format `xxxxxxxx-xxxx-2xxx-xxxx-xxxxxxxxxxxx`, typically used in\n  DCE Security contexts.\n\n- `UUIDv3Probe` — extracts UUID version 3, matching the format `xxxxxxxx-xxxx-3xxx-xxxx-xxxxxxxxxxxx`, generated using\n  MD5 hashing of names and namespaces.\n\n- `UUIDv4Probe` — extracts UUID version 4, matching the format `xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx`, randomly\n  generated and commonly used for unique identifiers.\n\n- `UUIDv5Probe` — extracts UUID version 5, matching the format `xxxxxxxx-xxxx-5xxx-xxxx-xxxxxxxxxxxx`, generated using\n  SHA-1 hashing of names and namespaces.\n\n- `UUIDv6Probe` — extracts UUID version 6, matching the format `xxxxxxxx-xxxx-6xxx-xxxx-xxxxxxxxxxxx`, an ordered\n  version for better indexing and sorting.\n\n### ⚙️ Versioning\n\n- `SemanticVersionProbe` — extracts semantic version numbers in `MAJOR.MINOR.PATCH` format with optional pre-release\n  identifiers and build metadata, ensuring numeric identifiers avoid leading zeros while supporting dot-separated\n  alphanumeric segments.\n\n- `ComposerConstraintProbe` — extracts Composer constraint strings with operators, ranges, and wildcard segments.\n\n- `SemverRangeProbe` — extracts semantic version ranges, including Composer-style constraints.\n\n### 🌐 Web \u0026 Network\n\n- `DomainProbe` — extracts domain names, including internationalized (Unicode) domains.\n\n- `IPv4Probe` — extracts IPv4 addresses, supporting standard formats and excluding reserved/bogus ranges if necessary.\n\n- `PrivateIPv4Probe` — extracts private IPv4 addresses from the 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 ranges.\n\n- `IPv6Probe` — extracts IPv6 addresses, including compressed formats, IPv4-mapped addresses, and zone indexes (e.g.,\n  `%eth0`).\n\n- `LinkProbe` — extracts hyperlinks, including ones with IP addresses, ports, or without a protocol.\n\n- `GithubRepositoryLinkProbe` — extracts GitHub repository links over HTTP/HTTPS, supporting optional `.git` suffixes,\n  additional paths, and trimming trailing punctuation.\n\n- `GoogleDocsLinkProbe` — extracts Google Docs, Sheets, Slides, and Forms links hosted on docs.google.com.\n\n- `CookieProbe` — extracts HTTP cookie key/value pairs from `Set-Cookie` or `Cookie` headers, filtering out common\n  attributes like `Path` or `Expires`.\n\n- `HtmlTagProbe` — extracts HTML tags, returning full paired segments with their content or standalone/self-closing\n  tags.\n\n- `HexColorProbe` — extracts CSS-style hexadecimal color codes (`#fff`, `#ffffff`), ensuring only 3- or 6-digit values\n  are matched while ignoring longer hexadecimal tokens.\n\n- `RgbRgbaColorProbe` — extracts RGB/RGBA color strings (e.g., `rgb(255,0,0)`, `rgba(255,0,0,0.5)`, `255,0,0`).\n\n- `MacAddressProbe` — extracts MAC addresses in standard formats using colons or hyphens (e.g., `00:1A:2B:3C:4D:5E` or\n  `00-1A-2B-3C-4D-5E`), accurately detecting valid addresses while excluding invalid patterns.\n\n- `JwtTokenProbe` — extracts JSON Web Tokens (JWT) in compact format (`xxxxx.yyyyy.zzzzz`), supporting Base64url\n  segments\n  with optional padding.\n\n- `UserAgentProbe` — extracts User-Agent strings from text, supporting complex structures like multiple product tokens,\n  OS information, and browser identifiers.\n\n- `FilePathProbe` — extracts absolute file paths in Linux (e.g., `/etc/passwd`) and Windows (e.g.,\n  `C:\\\\Windows\\\\System32`)\n  formats.\n\n- `HttpStatusLineProbe` — extracts HTTP status lines like `HTTP/1.1 200` with valid status ranges.\n\n- `HttpStatusCodeProbe` — extracts HTTP status codes from status lines or standalone numeric codes.\n\n- `AbsoluteHttpUrlProbe` — extracts absolute HTTP/HTTPS URLs with optional ports and paths.\n\n- `AbsolutePathProbe` — extracts absolute paths that start with `/`.\n\n- `RestEndpointProbe` — extracts REST endpoints from absolute URLs or absolute paths.\n\n- `QueryParamPairProbe` — extracts query parameter key/value pairs.\n\n- `QueryStringProbe` — extracts full query strings starting with `?` and containing key/value pairs.\n\n- `QueryParameterProbe` — extracts query parameters or query strings.\n\n- `JsonQuotedKeyProbe` — extracts quoted JSON keys (e.g., `\"name\"`).\n\n- `JsonKeyProbe` — extracts unquoted JSON-like keys (e.g., `name`).\n\n- `JsonStringValueProbe` — extracts JSON string values.\n\n- `JsonNumberValueProbe` — extracts JSON numeric values.\n\n- `JsonBooleanValueProbe` — extracts JSON boolean values.\n\n- `JsonNullValueProbe` — extracts JSON null values.\n\n- `JsonValueProbe` — extracts JSON primitive values (string, number, boolean, null).\n\n- `GraphqlOperationKeywordProbe` — extracts GraphQL operation keywords (`query`, `mutation`, `subscription`).\n\n- `GraphqlSelectionSetProbe` — extracts GraphQL selection sets with balanced braces.\n\n- `GraphqlQueryProbe` — extracts GraphQL query components (operation keywords or selection sets).\n\n- `WsUrlProbe` — extracts `ws://` WebSocket URLs.\n\n- `WssUrlProbe` — extracts `wss://` WebSocket URLs.\n\n- `WebsocketUrlProbe` — extracts WebSocket URLs across `ws://` and `wss://` schemes.\n\n- `CorsAllowOriginProbe` — extracts `Access-Control-Allow-Origin` headers.\n\n- `CorsAllowMethodsProbe` — extracts `Access-Control-Allow-Methods` headers.\n\n- `CorsAllowHeadersProbe` — extracts `Access-Control-Allow-Headers` headers.\n\n- `CorsAllowCredentialsProbe` — extracts `Access-Control-Allow-Credentials` headers.\n\n- `CorsExposeHeadersProbe` — extracts `Access-Control-Expose-Headers` headers.\n\n- `CorsMaxAgeProbe` — extracts `Access-Control-Max-Age` headers.\n\n- `CorsHeaderProbe` — extracts CORS headers across supported variants.\n\n### ⚙️ System \u0026 DevOps\n\n- `K8sDnsLabelProbe` — extracts Kubernetes DNS labels (RFC1123 label format).\n\n- `K8sDnsSubdomainProbe` — extracts Kubernetes DNS subdomains (RFC1123 subdomain format).\n\n- `KubernetesResourceNameProbe` — extracts Kubernetes resource names.\n\n- `KubernetesNamespaceStrictProbe` — extracts Kubernetes namespaces using DNS label rules.\n\n- `KubernetesNamespaceProbe` — extracts Kubernetes namespaces using DNS subdomain rules.\n\n- `HelmSemverProbe` — extracts Helm semantic versions.\n\n- `HelmChartVersionProbe` — extracts Helm chart versions.\n\n- `EnvAssignmentProbe` — extracts environment variable assignments like `KEY=value`.\n\n- `EnvVariableProbe` — extracts environment variable names.\n\n- `GithubActionsRunIdUrlProbe` — extracts GitHub Actions run URLs.\n\n- `GitlabPipelineIdUrlProbe` — extracts GitLab pipeline URLs.\n\n- `CircleciWorkflowUuidProbe` — extracts CircleCI workflow UUIDs.\n\n- `CiPipelineIdProbe` — extracts CI pipeline IDs.\n\n- `GitFullShaProbe` — extracts 40-character Git commit SHAs.\n\n- `GitShortShaProbe` — extracts short Git commit SHAs.\n\n- `GitCommitHashProbe` — extracts Git commit hashes (short or full).\n\n- `GitRefHeadsProbe` — extracts `refs/heads/*` Git references.\n\n- `GitBranchNameProbe` — extracts Git branch names.\n\n- `GitRefTagsProbe` — extracts `refs/tags/*` Git references.\n\n- `GitTagProbe` — extracts Git tag names.\n\n### 🐳 Docker\n\n- `DockerImageProbe` — extracts Docker image names with tags only (e.g., `nginx:1.25.1`, `redis:latest`, `ghcr.io/app/api:\n  v2`). Supports registries, multi-level namespaces, semantic and custom tags, while ignoring invalid or tagless image\n  names (e.g., python, myapp/web).\n\n- `DockerContainerIdProbe` — extracts Docker container IDs in short and full formats from logs and CLI output (e.g.,\n  docker ps, docker logs, CI, orchestration traces). Detects lowercase hexadecimal IDs of 12 or 64 characters, ignoring\n  strings of other lengths or with non-hex characters.\n\n- `DockerLabelProbe` — extracts Docker label key/value pairs from Dockerfiles and CLI commands (e.g.,\n  `LABEL version=\"1.0.0\" description=\"API\" vendor=acme`). Detects fragments in the form `key=value` and `key=\"value\"`,\n  including multiple labels in a single instruction, without fully parsing Dockerfile syntax.\n\n- `DockerCliFlagProbe` — extracts Docker CLI flags from arbitrary text (e.g., `-p 8080:80`, `-v ./src:/app`,\n  `--env KEY=VALUE`, `--name api`, `--rm`). Detects short and long options in both space and equals forms, with or\n  without arguments, making it suitable for parsing docker run commands, CI scripts, and orchestration logs without\n  full CLI parsing.\n\n- `DockerfileInstructionProbe` — extracts Dockerfile instructions such as `FROM`, `RUN`, `COPY`, `ENV`, `HEALTHCHECK`,\n  including multiline continuations with `\\`. Matches instruction blocks regardless of indentation and supports\n  case-insensitive detection of all core Dockerfile directives.\n\n- `DockerImageDigestProbe` — extracts Docker image digests in the form `sha256:\u003c64-hex\u003e` from logs, Docker/registry\n  output\n  and SBOM metadata, including references like `image@sha256:\u003cdigest\u003e`, while always returning only the digest value.\n\nYou can implement your own probes by creating classes that implement the `IProbe` interface.\nEach probe also supports using a different validator for the returned values by passing an instance of a class\nimplementing the `IValidator` interface to the probe’s constructor. This allows you to override the default validation\nlogic.\n\nFor example, `BankCardNumberProbe` uses a default validator based on the Luhn algorithm, but you can provide your\nown validator if you want to enforce additional rules, such as limiting to specific card issuers or formats.\n\n## Usage Example\n\n```php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse TextProbe\\TextProbe;\nuse TextProbe\\Probes\\Contact\\EmailProbe;\n\n$text = \"Please contact us at info@example.com for more details.\";\n\n$probe = new TextProbe();\n$probe-\u003eaddProbe(new EmailProbe());\n\n$results = $probe-\u003eanalyze($text);\n\nforeach ($results as $result) {\n    echo sprintf(\n        \"[%s] %s (position %d-%d)\\n\",\n        $result-\u003egetProbeType()-\u003ename,\n        $result-\u003egetResult(),\n        $result-\u003egetStart(),\n        $result-\u003egetEnd()\n    );\n}\n```\n\n### Expected output\n\n```text\n[EMAIL] info@example.com (position 21-37)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMakarMS%2Ftext-probe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMakarMS%2Ftext-probe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMakarMS%2Ftext-probe/lists"}