Was wäre der beste reguläre Ausdruck für dieses Szenario?
Angesichts dieser URL:
http://php.net/manual/en/function.preg-match.php
Wie sollte ich vorgehen, um alles zwischen (aber nicht einschließlich) http://php.net
und .php
auszuwählen:
/manual/en/function.preg-match
Dies ist für eine Nginx Konfigurationsdatei.
Zum Beispiel so:
if (preg_match('/(?<=net).*(?=\.php)/', $subject, $regs)) {
$result = $regs[0];
}
Erläuterung:
"
(?<= # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind)
net # Match the characters “net” literally
)
. # Match any single character that is not a line break character
* # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
(?= # Assert that the regex below can be matched, starting at this position (positive lookahead)
\. # Match the character “.” literally
php # Match the characters “php” literally
)
"
Versuchen Sie dies:
preg_match("/net(.*)\.php$/","http://php.net/manual/en/function.preg-match.php", $matches);
echo $matches[1];
// prints /manual/en/function.preg-match
Diese allgemeine URL-Übereinstimmung ermöglicht es Ihnen, Teile einer URL auszuwählen:
if (preg_match('/\\b(?P<protocol>https?|ftp):\/\/(?P<domain>[-A-Z0-9.]+)(?P<file>\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?P<parameters>\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i', $subject, $regs)) {
$result = $regs['file'];
//or you can append the $regs['parameters'] too
} else {
$result = "";
}