2017-01-03 5 views
1

Ich habe versucht, URL-Muster einer Seite zu identifizieren. Für welche folgte ich die unten aber noch mit einem ProblemPHP Regex zur Identifizierung bestimmter URL-Muster

endete -> PHP Regex verwendet: es

~((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)~i 

Dies identifiziert hat fast alle Arten von URLs wie unten

example.com 
www.example.com 
http://example.com 
http://www.example.com  
https://example.com 
https://www.example.com 

Aber leider auch Dezimalwerte, Preiswerte, Telefonnummern, IP-Adresse als URL-Format (möglicherweise habe ich sie nicht früher berücksichtigt). Also dieses Problem beheben ich unten verwendet haben bestimmte numerische Wert von Muster zu finden, um

/^[0-9]+(\.[0-9]{1,})+\S+\w?$/ 

ausgeschlossen werden, die Nutzung dieser die URL-Kennung durch Ausschließen numerische Werte wie

Deciaml Werte (1,11)

festgesetzt hat

IP-Adresse (123.123.123.123)

Preis Werte ($ 11,11)

Jetzt kommt die neue Ausgabe „Abkürzungen werden auch prüfen, ed als URLs“

W.H.O (in jedem Fall alphabetisch)

Also, wie kann ich eine URL identifizieren PHP Regex haben, die die oben genannten Problem Fälle ausschließen würde?

oder

Kann ich eine PHP Regex einzelne Alphabet Werte umfasst Abkürzungen wie im obigen Beispiel zu identifizieren?

Dank

+0

Sie sollten keine Links zu gefälschten URLs posten. Das ist Code, also müssen Sie ihn so formatieren (es ist der '{}' Werkzeugleistenknopf): –

+0

Entschuldigen Sie mich für Tippfehler :) –

+0

Probieren Sie [''~ \ b (?! [AZ] (?: \. [AZ]) + \ b | \ d + (?: \. \ d +) + \ S + \ b) ((https?: //)? ([- \ w] + \. [- \ w.] +) + \ w (? :: \ d +)? (/ ([- \ w/_.] * (?: \? \ S +)?)?) *) \ b ~ ''] (https://regex101.com/r/ iuozYk/2) –

Antwort

0

Sie diese Ausschlüsse in eine negative Vorschau setzen kann und

$re = '~(?x)\b     # Word boundary 
    (?!       # Exclusion list 
    [A-Z](?:\.[A-Z])+\b   # No upper and 1+ sequences of . + an upper 
    |       # or 
    \d+(?:\.\d+)+\S+\b   # digits + 1+ dot and digits and 1+ non-whitespaces 
    )  
    (?:https?://)?    # Optional http/https protocol part 
    (?:[-\w]+\.[-\w.]+)+   # 1+ sequences of 1+ - or word chars, then . and 1+ -, ., or word chars 
    \w(?::\d+)?     # word char and 1 optional sequence of : and 1+ digits 
    (?:/(?:[-\w/.]*(?:\?\S+)?)?)* # 0+ sequences of /, 0+ -, word, /, . symbols, then 1 optional sequence of ? and 1+ non-whitespaces 
    \b~';       # word boundary 
$str = 'example.com www.example.com http://example.com http://www.example.com  https://example.com https://www.example.com Deciaml Values (1.11) IP Address (123.123.123.123) W.H.O Price values ($11.11)'; 
preg_match_all($re, $str, $matches); 
print_r($matches[0]); 

die PHP demo online, und ein regex demo here nachschauen.

+1

Es funktioniert! Vielen Dank @Wiktor Stribiżew –

Verwandte Themen