JasonCPT
JasonCPT

Reputation: 1

RegExp to match a segment of a URL

I'm trying to use RegExp to match a segment of a URL.

The URL in question is this:

http://www.example.com/news/region/north-america/

As I need this regex for the WordPress URL Rewrite API, the subject will only be the path section of the URL:

news/region/north-america

In the above example I need to be able to extract the north-america portion of the path, however when pagination is used the path becomes something like this:

news/region/north-america/page/2

Where I still only need to extract the north-america portion.

The RegExp I've come up with is as follows:

^news/region/(.*?)/(.*?)?/?(.*?)?$

However this does not match for news/region/north-america only news/region/north-america/page/2

From what I can tell I need to make the trailing slash after north-america optional, but adding /? doesn't seem to work.

Upvotes: 0

Views: 582

Answers (3)

JasonCPT
JasonCPT

Reputation: 1

georg's suggested rule work like a charm:

^news/region/(.*?)(?:/(.*?)/(.*?))?$

For those interested in the application of this regex, I used it in the WP Rewrite API to grab the custom taxonomy and page number (if present) and assign the relevant matches to the the WP re-write:

$newRules['news/region/(.?)(?:/(.?)/(.*?))?$']='index.php?region=$matches[1]&forcetemplate=news&paged=$matches[3]';

Upvotes: 0

anubhava
anubhava

Reputation: 784968

You should match using this regex:

^news/region/([^/]+)

This will give you news/region/north-america even when URI becomes /news/region/north-america/page/2

Upvotes: 0

Yash
Yash

Reputation: 1436

Try this:

preg_match('/news\/region\/(.*?)\//',"http://www.example.com/news/region/north-america/page/2",$matches);

the $matches[1] will give you the output. as "north-america".

Upvotes: 1

Related Questions