我有一个字符串,可以包含多个匹配(由百分比标记包围的任何单词)和一个替换数组 - 每个替换的键是正则表达式的匹配.有些代码可能会更好地解释......
$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寻求帮助.任何接受者?
应用突出显示某些文本(不包括偶尔标记“<...>”中的文本)的最简单方法是什么?
澄清:我希望保留现有标签!
$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 代码的最小解析之外。
我想用空格替换换行符(\ 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) 例如我有以下字符串:
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.
我想要从数字没有相邻字符(包括短划线)的字符串中替换所有独立数字,例如:
测试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]添加到比赛中,但无济于事,我错过了什么,看起来如此简单?
提前致谢
我正在尝试用不同的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) 可以说$ 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) 我一直有正则表达式的麻烦,我基本上有一个网址,例如:
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)
这最终只留下我想要替换的部分,而不是实际替换它!
嗨,我想删除大括号内的所有内容,例如,如果字符串是helloz,我希望输出只是helloz
我使用下面的代码,但必须有一些简单的方法来做.有人请告诉我how.thanks
[hi] helloz [hello] (hi) {jhihi}
Run Code Online (Sandbox Code Playgroud) 我正在尝试从字符串创建常见的掩码,如下所示:
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)