I'm working to do a "Wiki Game" with PHP, and i'd like to match all the links in a string starting by /wiki/something, for example /wiki/Chiffrement_RSA or /wiki/OSS_117_:_Le_Caire,_nid_d%27espions. I know just a few thigs about REGEX, so I'm struct. If someone could help me, it would be nice.
For the time, I just have \/wiki\/*...
Thanks for your help !
            Asked
            
        
        
            Active
            
        
            Viewed 28 times
        
    0
            
            
         
    
    
        BDeliers
        
- 74
- 1
- 12
- 
                    1I would recommend using the strpos as outlined below. But if you want to use a regex, this catches everything up to the first space, then \/wiki\/([^ ]+) works. If you're interested in testing regex's, try http://regexr.com – cody.codes May 22 '17 at 18:21
3 Answers
2
            
            
        You can do by regex or strpos:
<?php
$mystring = 'abc';
$find   = '/wiki/';
$statusLink = strpos($mystring, $find);
// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($statusLink === false) {
    echo "Not the link that you want";
} else {
    echo "You found the link";
}
 //or by explode
  $link = explode('/', $originalLink);
  if ($link[1] == 'wiki' && isset($link[2])){
    //is your link
  }
?>
 
    
    
        capcj
        
- 1,535
- 1
- 16
- 23
1
            
            
        You can reduce your output array size by by 50% using \K in your pattern.  It eliminates the need for a capture group and puts your desired substrings in the "fullstrings" array.
Pattern:
\/wiki\/\K[^ ]+
\K says "start the fullstring match from here".  This means no memory waste.  It may be a microimprovement, but I believe it to be best practice and I think more people should use it.
 
    
    
        mickmackusa
        
- 43,625
- 12
- 83
- 136
0
            I finally chose Cody.code's answer with this regex : \/wiki\/([^ ]+). 
I will use this code to check if i keep a link in an array or not (I will parse my html with DOMDocument an get all the <a>, it's faster) , so the preg_match() solution is the best for me, instead of strpos. 
Thanks for your help ! 
 
    
    
        BDeliers
        
- 74
- 1
- 12