标签: preg-replace

PHP preg_replace - 使用匹配作为键从数组中查找替换

我有一个字符串,可以包含多个匹配(由百分比标记包围的任何单词)和一个替换数组 - 每个替换的键是正则表达式的匹配.有些代码可能会更好地解释......

$str = "PHP %foo% my %bar% in!";
$rep = array(
  'foo' => 'does',
  'bar' => 'head'
);
Run Code Online (Sandbox Code Playgroud)

期望的结果是:

$str = "PHP does my head in!"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下,没有一个工作:

$res = preg_replace('/\%([a-z_]+)\%/', $rep[$1], $str);
$res = preg_replace('/\%([a-z_]+)\%/', $rep['$1'], $str);
$res = preg_replace('/\%([a-z_]+)\%/', $rep[\1], $str);
$res = preg_replace('/\%([a-z_]+)\%/', $rep['\1'], $str);
Run Code Online (Sandbox Code Playgroud)

因此,我转向Stack Overflow寻求帮助.任何接受者?

php regex preg-replace

6
推荐指数
1
解决办法
6655
查看次数

preg_replace 只替换外部标签?(...我们不是在谈论完整的“html 解析”,只是一些 markdown)

应用突出显示某些文本(不包括偶尔标记“<...>”中的文本)的最简单方法是什么?

澄清:我希望保留现有标签!

$t = 
preg_replace(
  "/(markdown)/",
  "<strong>$1</strong>",
"This is essentially plain text apart from a few html tags generated with some
simplified markdown rules: <a href=markdown.html>[see here]</a>");
Run Code Online (Sandbox Code Playgroud)

应该显示为:

“除了使用一些简化的Markdown规则生成的一些 html 标签之外,这本质上是纯文本:请参见此处

...但不要弄乱锚标记内的文本(即<a href=markdown.html>)。

我听说过不使用正则表达式解析 html 的论点,但这里我们本质上讨论的是纯文本,除了一些 Markdown 代码的最小解析之外。

html php markup markdown preg-replace

6
推荐指数
1
解决办法
5196
查看次数

替换换行符,但保留空行

我想用空格替换换行符(\ r \n),但我想保留空白行.换句话说,如果\ r \n前面没有另一个\ r \n,我想用\'替换\ r \n.例如:

line 1

line 2
line 3
line 4
Run Code Online (Sandbox Code Playgroud)

Shold最终成为......

line 1

line 2 line 3 line 4
Run Code Online (Sandbox Code Playgroud)

但不是"1号线2号线3号线4号线",这就是我现在正在做的事情

preg_replace("/\r\n/", " ", $string);
Run Code Online (Sandbox Code Playgroud)

php regex newline preg-replace

6
推荐指数
1
解决办法
410
查看次数

PHP:PCRE:如何替换可重复的char

例如我有以下字符串:

a_b__c___d____e
Run Code Online (Sandbox Code Playgroud)

如何preg_replace char _到char' - ',但仅当部分'__...'包含多于N重复_时.

我希望你能理解我 ))

source: a_b__c___d____e
cond: change '_' where 2 or more
result: a_b--c---d----e
Run Code Online (Sandbox Code Playgroud)

要么

source: a_b__c___d____e_____f
cont: change '_' where 4 or more
result: a_b__c___d----e-----f
Run Code Online (Sandbox Code Playgroud)

谢谢!

ps有趣的解决方案,不使用循环.如何用循环实现它(我认为)知道任何人.只是一个正则表达式和preg_replace.

php regex pcre preg-replace

6
推荐指数
1
解决办法
395
查看次数

preg_replace删除独立数字

我想要从数字没有相邻字符(包括短划线)的字符串中替换所有独立数字,例如:

测试3弦49测试49test9 9

应该返回Test string 49Test 49Test9

到目前为止,我一直在玩:

   $str = 'Test 3 string 49Test 49test9 9';
   $str= preg_replace('/[^a-z\-]+(\d+)[^a-z\-]+?/isU', ' ', $str);
   echo $str;
Run Code Online (Sandbox Code Playgroud)

但是没有运气,这会回来

测试字符串9Test 9test9

遗漏了部分字符串,我想将[0-9]添加到比赛中,但无济于事,我错过了什么,看起来如此简单?

提前致谢

php regex preg-replace

6
推荐指数
1
解决办法
1393
查看次数

使用php preg_replace更改html链接的href属性

我正在尝试用不同的URL替换大字符串中的所有链接href.使用以下代码它似乎只替换第二个链接,保留第一个完整,有人可以帮助我吗?

$string_of_text = '<a href="http://www.php.net/">PHP</a> <a href="http://www.apache.org/">Apache</a>';
echo preg_replace('/<a(.*)href="(.*)"(.*)>/','<a$1href="javascript:alert(\'Test\');"$3>',$string_of_text);
Run Code Online (Sandbox Code Playgroud)

php preg-replace

6
推荐指数
2
解决办法
3万
查看次数

即使没有协议,也可以将URL从文本转换为链接

可以说$ content是textarea的内容

/*Convert the http/https to link */
     $content = preg_replace('!((https://|http://)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="$1">$1</a> ', nl2br($_POST['helpcontent'])." ");
/*Convert the www. to link prepending http://*/
     $content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$1">$1</a> ', $content." ");
Run Code Online (Sandbox Code Playgroud)

这对于链接工作正常,但意识到当图像在文本中时它正在打破标记...

我现在这样想:

$content = preg_replace('!\s((https?://|http://)+[a-z0-9_./?=&-]+)!i', ' <a href="$1">$1</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$1">$1</a> ', $content." ");
Run Code Online (Sandbox Code Playgroud)

因为图像是受到尊重的,但问题是现在不会转换带http://或https://格式的网址..:

google.com - >未转换(按预期)

www.google.com - >转换得很好

http://google.com - >未转换(意外)

https://google.com - >未转换(意外)

我错过了什么?

-编辑-

当前几乎可行的解决方

$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' <a href="$2" target="_blank">$2</a> ', nl2br($_POST['content'])." ");
$content …
Run Code Online (Sandbox Code Playgroud)

php url preg-replace

6
推荐指数
2
解决办法
1498
查看次数

preg_replace()只有字符串的特定部分

我一直有正则表达式的麻烦,我基本上有一个网址,例如:

http://somedomain.com/something_here/bla/bla/bla/bla.jpg

我需要的是一个preg_replace()来替换something_here一个空字符串,并保留其他所有内容.

我尝试了以下内容,它取代了错误的部分:

$image[0] = preg_replace('/http:\/\/(.*)\/(.*)\/wp-content\/uploads\/(.*)/','$2' . '',$image[0]);
Run Code Online (Sandbox Code Playgroud)

这最终只留下我想要替换的部分,而不是实际替换它!

php regex replace preg-replace

6
推荐指数
2
解决办法
1万
查看次数

从字符串中替换{} []()括号之间的所有内容

嗨,我想删除大括号内的所有内容,例如,如果字符串是helloz,我希望输出只是helloz 我使用下面的代码,但必须有一些简单的方法来做.有人请告诉我how.thanks

[hi] helloz [hello] (hi) {jhihi}
Run Code Online (Sandbox Code Playgroud)

php regex string replace preg-replace

6
推荐指数
1
解决办法
1万
查看次数

如何在不重叠结果的情况下替换字符串中的多个字符串?

我正在尝试从字符串创建常见的掩码,如下所示:

012abc.d+e_fg~hijk => 012{start}.d+{middle}_fg~{end}jk
Run Code Online (Sandbox Code Playgroud)

更换:

$arrFromTo = array(
              'st' => '{pre}',
              'abc' => '{start}',
              'e' => '{middle}',
              'hi' => '{end}',
              'dd' => '{post}'
             );
Run Code Online (Sandbox Code Playgroud)

相反,我保持重叠的替换,并得到这样的东西(使用循环的str_replace's):

012{{pre}art}.d+{mi{post}le}_fg~{end}jk
Run Code Online (Sandbox Code Playgroud)

因为st在已经被替换的中发现{start}并且dd被发现{middle}.

你会如何取代以下?

$str = 'abc.d+e_fg~hijk';

echo replace_vars($str); // Desired output: 012{start}.d+{middle}_fg~{end}kJ
Run Code Online (Sandbox Code Playgroud)

php regex replace preg-replace str-replace

6
推荐指数
1
解决办法
200
查看次数

标签 统计

php ×10

preg-replace ×10

regex ×7

replace ×3

html ×1

markdown ×1

markup ×1

newline ×1

pcre ×1

str-replace ×1

string ×1

url ×1