在PHP中将爆炸和/或正则表达式文本分解为HTML链接

时间:2014-08-31 15:23:37

标签: php html regex href explode

我有一个文本数据库,在英语句子中间包含这种语法,我需要使用PHP转换为HTML链接

"text1(text1)":http://www.example.com/mypage

注意:

  • text1始终与括号中的文字相同

  • 整个字符串始终带有引号,括号,冒号,因此每种语法的语法相同。

  • 有时字符串末尾有空格,但有时会出现问号或逗号或其他标点符号。

  • 我需要将这些转换为基本链接,例如

<a href="http://www.example.com/mypage">text1</a>

我该怎么做?我是否需要爆炸或正则表达式或两者兼而有之?

4 个答案:

答案 0 :(得分:1)

"(.*?)\(\1\)":(.*\/[a-zA-Z0-9]+)(?=\?|\,|\.|$)

你可以使用它。

参见演示。

http://regex101.com/r/zF6xM2/2

答案 1 :(得分:0)

您可以使用此正则表达式:

"(.*?)\(.*?:(.*)

<强> Working demo

enter image description here

答案 2 :(得分:0)

适当的正则表达式可以是:

$str = '"text1(text1)":http://www.example.com/mypage';
preg_match('#^"([^\(]+)' .
           '\(([^\)]+)\)[^"]*":(.+)#', $str, $m);
print '<a href="'.$m[3].'">'.$m[2].'</a>' . PHP_EOL;

答案 3 :(得分:0)

您可以使用此替代品:

$pattern = '~"([^("]+)\(\1\)":(http://\S+)(?=[\s\pP]|\z)~'; 

$replacement = '<a href="\2">\1</a>'; 

$result = preg_replace($pattern, $replacement, $text);

模式细节:

([^("]+)此部分将捕获组1中的text1。使用否定字符类(不包括双引号和左括号)的优点是多个:

  • 它允许使用贪婪的量词,更快
  • 因为该类排除了左括号,并且在模式中立即后跟一个括号,如果在文本的另一部分中有双引号但内部没有括号的内容,则正则表达式引擎不会后退以测试其他可能性,它会跳过这个子串而不回溯。 (这是因为PCRE正则表达式引擎会在处理字符串之前自动将[^a]+a转换为[^a]++a

\S+表示所有不是空白的一次或多次

(?=[\s\pP]|\z)lookahead assertion,用于检查网址后面是空格,标点字符(\pP)或字符串的结尾。