{"id":3097,"date":"2026-10-17T14:55:29","date_gmt":"2026-10-17T12:55:29","guid":{"rendered":"https:\/\/nyamsprod.com\/blog\/?p=3097"},"modified":"2026-10-17T14:55:29","modified_gmt":"2026-10-17T12:55:29","slug":"league-uri-toolkit-7-9-from-uri-matching-to-data-extraction","status":"publish","type":"post","link":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/","title":{"rendered":"League URI Toolkit 7.9: From URI Matching to Data Extraction"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">League URI Toolkit 7.9 introduces a new way to work with URIs: extracting data from them and converting that data into meaningful PHP values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This release also updates the <code>uri-polyfill<\/code> to keep pace with the URI functionality available in PHP&#8217;s native <code>ext\/uri<\/code> extension. But the most significant addition is the introduction of extraction APIs for <code>UriTemplate<\/code> and <code>UrlPattern<\/code>, opening up new possibilities for applications that need to retrieve structured data from URIs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s take a closer look at what&#8217;s new.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Extracting data from URIs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">URI templates have traditionally been used to expand variables into a URI, following the rules defined by RFC 6570. With version 7.9, <a href=\"https:\/\/uri.thephpleague.com\/uri\/7.0\/uri-template\/#variable-extraction\" target=\"_blank\" rel=\"noopener\">the league\/uri package<\/a> adds the ability to match existing URIs against a template and extract the values they contain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The new API offers two complementary operations: <code>match()<\/code> to determine whether a URI conforms to a template, and <code>extract()<\/code> to retrieve the data captured by it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, given the template:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$template = &#039;https:\/\/example.com\/hotels\/{hotel}\/bookings\/{booking}&#039;;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And the URI:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$uri = &#039;https:\/\/example.com\/hotels\/Rest%20%26%20Relax\/bookings\/42&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">You can first check whether the URI matches the template:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nuse League\\Uri\\UriTemplate;\n\n$uriTemplate = new UriTemplate($template);\n\n$uriTemplate-&gt;match($uri); \/\/ true\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">When you need the values captured by the template, use <code>extract()<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nuse League\\Uri\\UriTemplate;\n\n$uriTemplate = new UriTemplate($template);\n$result = $uriTemplate-&gt;extract($uri);\n\n$result-&gt;isSuccessful(); \/\/ true\n$result&#x5B;&#039;hotel&#039;];   \/\/ &#039;Rest &amp; Relax&#039;\n$result&#x5B;&#039;booking&#039;]; \/\/ &#039;42&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The new <code>UriTemplate::extract()<\/code> API returns an <code>ExtractionResult<\/code>, giving you access to the extracted values as well as information about the extraction process. You can inspect missing variables, identify extraction failures, and distinguish between complete and partial values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you need extraction to succeed completely or fail explicitly, <code>extractOrFail()<\/code> provides a strict alternative.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This feature extends the usefulness of URI templates beyond URI generation, making them a practical tool for interpreting existing URIs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">URL patterns can extract data, too<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Version 7.9 brings the same matching and extraction capabilities via the <code>UrlPattern<\/code> class, based on the <a href=\"https:\/\/urlpattern.spec.whatwg.org\/\" target=\"_blank\" rel=\"noopener\">WHATWG URL Pattern specification.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unlike URI templates, URL patterns support component-specific matching, wildcards, named groups, and regular-expression constraints. This makes them particularly useful for applications that need to recognize URL structures, including routers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, you can define a pattern that matches book URLs with numeric identifiers:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nuse League\\Uri\\UrlPattern;\n\n$pattern = UrlPattern::from(\n    pattern: &#039;\/books\/:id(\\\\d+)&#039;, \n    baseUrl: &#039;https:\/\/example.com&#039;\n);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">As with URI templates, <code>match()<\/code> lets you check whether a URI conforms to the pattern:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$pattern-&gt;match(&#039;https:\/\/example.com\/books\/123&#039;); \/\/ true\n$pattern-&gt;match(&#039;https:\/\/example.com\/books\/abc&#039;); \/\/ false\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And when you need the captured values, <code>extract()<\/code> gives you access to them:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$result = $pattern-&gt;extract(&#039;https:\/\/example.com\/books\/123&#039;);\n\n$result-&gt;path&#x5B;&#039;id&#039;]; \/\/ &#039;123&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Here, the regular-expression constraint ensures that the identifier contains only digits, while the extraction result exposes the captured value.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Although both APIs provide matching and extraction, they follow different models. <code>UriTemplate<\/code> implements RFC 6570 and extracts variables without being aware of the URI component they represent. <code>UrlPattern<\/code>, on the other hand, follows the WHATWG URL Pattern model and processes values according to their URI components.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This distinction also affects how extracted values can be converted. Consider the hostname label <code>xn--fi8h<\/code>, which represents the Unicode character &#x1f345;. With <code>UriTemplate<\/code>, the extracted value remains in its original Punycode form until you explicitly interpret it as a hostname:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$uriTemplate = new UriTemplate(&#039;{host}.example.com&#039;);\n$result = $uriTemplate-&gt;extract(&#039;xn--fi8h.example.com&#039;);\n\n$result-&gt;string(&#039;host&#039;); \/\/ &#039;xn--fi8h&#039;\n$result-&gt;host(&#039;host&#039;);   \/\/ &#039;&amp;#x1f345;&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">With <code>UrlPattern<\/code>, hostname parsing and decoding are already handled by the URL Pattern algorithm:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$pattern = new UrlPatternBuilder(host: &#039;{:foo}.example.com&#039;)-&gt;build();\n$result = $pattern-&gt;extract(&#039;xn--fi8h.example.com&#039;);\n\n$result-&gt;host-&gt;string(&#039;foo&#039;); \/\/ &#039;&amp;#x1f345;&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The two APIs also differ in their extraction behavior. <code>UriTemplate::extract()<\/code> returns an inspectable result even when extraction is incomplete, whereas <code>UrlPattern::extract()<\/code> returns <code>null<\/code> when the URI does not match.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Together, these APIs let you match URIs, extract structured data, and convert values into the forms your application needs, while respecting the different semantics of URI templates and URL patterns.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">From extracted strings to typed PHP values<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Extracting values is only part of the problem. Once a value has been retrieved from a URI, it often needs to be converted before it can be used by an application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a pagination URI:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nhttps:\/\/example.com\/search?limit=10\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The extracted value of <code>limit<\/code> is a string. An application may need it as an integer instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Version 7.9 introduces typed accessors that make these conversions part of the extraction API:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nQuery::fromUri($uri)-&gt;integer(&#039;limit&#039;); \/\/ 10\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Depending on the extraction API, you can retrieve values as strings, booleans, integers, floats, arrays, dates, or enums. Collection-oriented accessors also support converting lists of extracted values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, a URI template can extract a date and a status:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$template = new UriTemplate(&#039;\/articles\/{date}{?status}&#039;);\n$result = $template-&gt;extract(&#039;\/articles\/2026-10-17?status=published&#039;);\n\n$result-&gt;date(&#039;date&#039;, &#039;!Y-m-d&#039;);\n$result-&gt;enum(&#039;status&#039;, ArticleStatus::class);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This allows the application to work with a <code>DateTimeImmutable<\/code> instance and an enum case rather than manually converting the extracted strings.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conversions are deliberately safe: when a value is missing or cannot be converted, the typed accessor returns <code>null<\/code>. This gives applications an explicit way to handle invalid or unavailable values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The result is a more direct path from a URI to application-level data, with less repetitive conversion code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Keeping the URI polyfill up to date<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alongside these new APIs, the <code>uri-polyfill<\/code> has been updated to follow the functionality provided by PHP&#8217;s native <code>ext\/uri<\/code> extension.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The polyfill remains important for projects that need the newer URI parsing capabilities while supporting PHP versions where the extension is unavailable. Keeping the implementation aligned helps maintain consistent behavior across supported environments.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">League URI Toolkit 7.9 expands the role of URI handling in PHP applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With extraction support in both <code>UriTemplate<\/code> and <code>UrlPattern<\/code>, URIs can now serve not only as values to parse, construct, and manipulate, but also as structured sources of application data. Typed accessors take that one step further by making it easier to convert extracted values into the PHP types an application expects.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>uri-polyfill<\/code> update complements these additions by keeping the toolkit aligned with PHP&#8217;s evolving native URI support.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Together, these changes make working with URIs more expressive and reduce the amount of custom code needed to turn them into useful application data.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>League URI Toolkit 7.9 introduces a new way to work with URIs: extracting data from them and converting that data into meaningful PHP values. This release also updates the uri-polyfill to keep pace with the URI functionality available in PHP&#8217;s native ext\/uri extension. But the most significant addition is the introduction of extraction APIs for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[5],"tags":[887,412,886,794,820,884,885],"class_list":["post-3097","post","type-post","status-publish","format-standard","hentry","category-web","tag-data-extraction","tag-php","tag-rfc6570","tag-uri","tag-uri-template","tag-url-pattern","tag-whatwg"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"nyamsprod\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"nyamsprod | Not a single one of your ancestors died young. They all copulated at least once.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-17T12:55:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-17T12:55:29+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#article\",\"name\":\"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod\",\"headline\":\"League URI Toolkit 7.9: From URI Matching to Data Extraction\",\"author\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/author\\\/nyamsprod\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#organization\"},\"datePublished\":\"2026-10-17T14:55:29+02:00\",\"dateModified\":\"2026-10-17T14:55:29+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#webpage\"},\"articleSection\":\"WebDevs, data-extraction, PHP, RFC6570, uri, uri-template, url-pattern, WHATWG\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/category\\\/web\\\/#listItem\",\"name\":\"WebDevs\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/category\\\/web\\\/#listItem\",\"position\":2,\"name\":\"WebDevs\",\"item\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/category\\\/web\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#listItem\",\"name\":\"League URI Toolkit 7.9: From URI Matching to Data Extraction\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#listItem\",\"position\":3,\"name\":\"League URI Toolkit 7.9: From URI Matching to Data Extraction\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/category\\\/web\\\/#listItem\",\"name\":\"WebDevs\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#organization\",\"name\":\"nyamsprod\",\"description\":\"Not a single one of your ancestors died young. They all copulated at least once.\",\"url\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/author\\\/nyamsprod\\\/#author\",\"url\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/author\\\/nyamsprod\\\/\",\"name\":\"nyamsprod\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f00cf7288f0a1ab059d3f5b7391c212c667ace0c369836df5d4a038c7cb88246?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"nyamsprod\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#webpage\",\"url\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/\",\"name\":\"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/author\\\/nyamsprod\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/author\\\/nyamsprod\\\/#author\"},\"datePublished\":\"2026-10-17T14:55:29+02:00\",\"dateModified\":\"2026-10-17T14:55:29+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/\",\"name\":\"nyamsprod\",\"description\":\"Not a single one of your ancestors died young. They all copulated at least once.\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/nyamsprod.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod","description":"","canonical_url":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#article","name":"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod","headline":"League URI Toolkit 7.9: From URI Matching to Data Extraction","author":{"@id":"https:\/\/nyamsprod.com\/blog\/author\/nyamsprod\/#author"},"publisher":{"@id":"https:\/\/nyamsprod.com\/blog\/#organization"},"datePublished":"2026-10-17T14:55:29+02:00","dateModified":"2026-10-17T14:55:29+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#webpage"},"isPartOf":{"@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#webpage"},"articleSection":"WebDevs, data-extraction, PHP, RFC6570, uri, uri-template, url-pattern, WHATWG"},{"@type":"BreadcrumbList","@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/nyamsprod.com\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/category\/web\/#listItem","name":"WebDevs"}},{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/category\/web\/#listItem","position":2,"name":"WebDevs","item":"https:\/\/nyamsprod.com\/blog\/category\/web\/","nextItem":{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#listItem","name":"League URI Toolkit 7.9: From URI Matching to Data Extraction"},"previousItem":{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#listItem","position":3,"name":"League URI Toolkit 7.9: From URI Matching to Data Extraction","previousItem":{"@type":"ListItem","@id":"https:\/\/nyamsprod.com\/blog\/category\/web\/#listItem","name":"WebDevs"}}]},{"@type":"Organization","@id":"https:\/\/nyamsprod.com\/blog\/#organization","name":"nyamsprod","description":"Not a single one of your ancestors died young. They all copulated at least once.","url":"https:\/\/nyamsprod.com\/blog\/"},{"@type":"Person","@id":"https:\/\/nyamsprod.com\/blog\/author\/nyamsprod\/#author","url":"https:\/\/nyamsprod.com\/blog\/author\/nyamsprod\/","name":"nyamsprod","image":{"@type":"ImageObject","@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/f00cf7288f0a1ab059d3f5b7391c212c667ace0c369836df5d4a038c7cb88246?s=96&d=mm&r=g","width":96,"height":96,"caption":"nyamsprod"}},{"@type":"WebPage","@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#webpage","url":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/","name":"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/nyamsprod.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/#breadcrumblist"},"author":{"@id":"https:\/\/nyamsprod.com\/blog\/author\/nyamsprod\/#author"},"creator":{"@id":"https:\/\/nyamsprod.com\/blog\/author\/nyamsprod\/#author"},"datePublished":"2026-10-17T14:55:29+02:00","dateModified":"2026-10-17T14:55:29+02:00"},{"@type":"WebSite","@id":"https:\/\/nyamsprod.com\/blog\/#website","url":"https:\/\/nyamsprod.com\/blog\/","name":"nyamsprod","description":"Not a single one of your ancestors died young. They all copulated at least once.","inLanguage":"en-US","publisher":{"@id":"https:\/\/nyamsprod.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"nyamsprod | Not a single one of your ancestors died young. They all copulated at least once.","og:type":"article","og:title":"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod","og:url":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/","article:published_time":"2026-10-17T12:55:29+00:00","article:modified_time":"2026-10-17T12:55:29+00:00","twitter:card":"summary","twitter:title":"League URI Toolkit 7.9: From URI Matching to Data Extraction | nyamsprod"},"aioseo_meta_data":{"post_id":"3097","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"URI","score":0,"analysis":[]},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-10-17 12:02:41","updated":"2026-10-17 13:01:47","seo_analyzer_scan_date":null,"focus_keyword":"URI","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/nyamsprod.com\/blog\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/nyamsprod.com\/blog\/category\/web\/\" title=\"WebDevs\">WebDevs<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tLeague URI Toolkit 7.9: From URI Matching to Data Extraction\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/nyamsprod.com\/blog\/"},{"label":"WebDevs","link":"https:\/\/nyamsprod.com\/blog\/category\/web\/"},{"label":"League URI Toolkit 7.9: From URI Matching to Data Extraction","link":"https:\/\/nyamsprod.com\/blog\/league-uri-toolkit-7-9-from-uri-matching-to-data-extraction\/"}],"_links":{"self":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/3097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/comments?post=3097"}],"version-history":[{"count":5,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/3097\/revisions"}],"predecessor-version":[{"id":3106,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/3097\/revisions\/3106"}],"wp:attachment":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/media?parent=3097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/categories?post=3097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/tags?post=3097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}