2016-11-21 41 views
-1

您好我现在有这样的:PHP preg_match前面还是没有字母?

$linkOcc = substr_count($text3, "**link("); 
     if($linkOcc < '1'){ 
      $text4 = $text3; 

     } 


     for ($i2=0; $i2 < $linkOcc; $i2++) { 
      if($i2=='0'){ 
       preg_match('/(?<=\*\*link)\((.*)\)/', $text3, $match2); 
       $linkTitle = ($match2[1]); 
       $linkTitle = str_replace("/","",$linkTitle); 
      } 
     } 

它会检测是否存在这样macthes以下段落中的一段文字:

**link(exampletext)** 

然后用别的东西代替它。这个伟大的工程,如果有对的

**link(examplesite)** 

两侧空间(S)但是,假设我有以下段落:

So then Bob went to this**link(examplesite)**and he found a cool picture. 

然后因为某些原因代码dosnt认识到它作为再**链接...我相当肯定这是因为**链接两边都没有空格......所以我该如何解决这个问题?要检测**链接...,并在其旁边没有空格?

回答

0

如果你只是想在括号之间的文本匹配:

**link(this text)** 

那么你的正则表达式必须为:

\*\*link\((.*)\)\*\* 

你只是简单地捕捉任何文本 - >(。 *)
括号内 - > \(\)

要测试正则表达式,您可以在这里: https://regex101.com/和有或没有之前或之后的空间测试**链接(一些文本)**

重要提示: 既然你只有一个捕获组,这场比赛将是比赛数组的第一个元素:比赛[0]

在你的情况,如果你想匹配的内容,则需要使用$ MATCH2 [0],而不是$ MATCH2 [1]

+0

我很抱歉,但这个wasnt问题。我想用*和链接部分获得整个**链接(文本)**,并且问题是当我在**前面有文本时,它会执行整个**链接(文本) **未被捕获。但是,如果**链接(文本)**之前有空格,则不会被捕获。 – user7133318

+0

如果您需要捕获整个事件** \ * * *链接(本文)\ * \ ***(\ * \ *链接\((。*)\)\ * \ *) – docliving

+0

如果您想要捕获整个事情,然后添加一个捕获组,如下所示:(\ * \ * * \ *(*。*)* * * *) 因此整个事情woild匹配[0]和括号之间的文本会匹配[1] – docliving