草庐IT

regex_replace

全部标签

PHP preg_replace : How can I match something but not replace it?

例如,如果我想preg_replace一个HTML元素的标题:$str=preg_replace('/title=\"([^\"]+)\"/','foo',$str);请不要为这个特定示例提供其他解决方案(非正则表达式),这只是一个示例。我需要一个适用于任何正则表达式的解决方案。 最佳答案 如果你想用preg_replace匹配部分,但只是部分替换其他东西,那么有两种选择。您可以重新插入匹配的部分(包含在捕获组中,然后使用$1和$3):$str=preg_replace('/(title=")([^"]+)(")/','$1foo$

php - REGEX 获取注释标签之间的字符串 (/* string */)

我需要获取/**/注释标记之间的字符串。我正在尝试解析一个文件,并只获取其中注释标签之间的字符串。我是使用正则表达式的新手。所以任何建议将不胜感激。我已经尝试了一些,但都没有用。示例字符串将是。是的,在/*之后和*/之前有一个换行符/*CommentHereCommentHere*/ 最佳答案 你没有说你使用的是什么语言,但是这个正则表达式将适用于java(不需要转义/):(?s)/\*(.*?)\*/第1组(即\1)有您要查找的内容 关于php-REGEX获取注释标签之间的字符串(/*

php - preg_replace,正则表达式获取文本部分

我有以下问题:我有一个文本,例如以下格式:min:34.0max:79.0383lifetime:17%code:iweo7373333不是固定的textType,意思是min也可以是-7.94884444左右。我怎样才能提取零件,例如像这样的数组$result['min']=34.0;$result['max']=79.0383andsoon...我现在通过替换空格来做到这一点,然后将“min:”替换为空,“max:”、“lifetime:”……替换为“,”,然后爆炸……主要问题是有时其他变量介于最小值、最大值、...之间,因此位置不保持正确的值。另外-我认为-这不是一个很好的编码风

php - 如何在 PHP 中使用 RegEx 替换所有十六进制?

所以我一直在研究正则表达式,我的friend向我提出挑战,要求我编写一个脚本来替换字符串中的所有十六进制。他给了我一个混合了不同字符的大文件,当然还有一些十六进制字符串。每次出现的十六进制都以\x开头,例如:\x55。我觉得这很容易,所以我在一些在线正则表达式测试器上尝试了这个模式:/\\x([a-fA-F0-9]{2})/它工作得很好。但是,当我将它放入一些PHP代码中时,它根本无法替换它。任何人都可以在我出错的地方向我指出正确的方向吗?这是我的代码:$toDecode=file_get_contents('hex.txt');$pattern="/\\x(\w{2})/";$rep

php - preg_replace 用于以冒号结尾的单词

我试过研究preg_replace,只是我对正则表达式没有太多经验。我想做的是替换一部分以冒号结尾的文本,并将其设为粗体,并在前面放一个换行符,在后面放两个换行符。IE转换此文本title1:issometexthere.title2:anotherpieceoftext.到**title1:**issometexthere.**title2:**anotherpieceoftext我试过做这样的事情......preg_replace("!\*(.*?)\*!$:","\\!\*(.*?)\*!\\",$text);我似乎无法让它工作。有人能帮忙吗?谢谢安迪

PHP Regex匹配最后一次出现的字符串

我的字符串是$text1='A373R12345'我想找到此字符串最后一次出现的非数字编号。所以我使用这个正则表达式^(.*)[^0-9]([^-]*)然后我得到了这个结果:1.A3732.12345但我的预期结果是:1.A373R(它有'R')2.12345另一个例子是$text1='A373R+12345'然后我得到了这个结果:1.A373R2.12345但我的预期结果是:1.A373R+(它有'+')2.12345我要包含最后一个无数字的数字!!请帮忙!!谢谢!! 最佳答案 $text1='A373R12345';preg_m

php - preg_replace 双重替换

我从正则表达式中得到了一些意想不到的结果,这意味着要替换命名空间上的类名。替换似乎发生了两次,因此被替换的类名是重复的(请参见下面的示例)。我实际上已经通过更改正则表达式以匹配1个或多个(+)而不是0个或多个(*)来解决问题,这实际上更准确为了我想要的。但是,我对为什么一开始会遇到问题感到有点困惑。这是问题的一个例子:$classns='components\groups\GroupsController';$newclass='GroupsAccess';$classns=preg_replace('/[^\\\\]*$/',$newclass,$classns);echo$clas

php - 使用 preg_replace 将字符串转换为 <img> 标签

这些正则表达式快要死了,无论我读什么我都无法理解这个概念。这是我的问题,我相信它非常容易解决。[img:http://example.com/_data/025_img.jpg]我想要的只是用更改[img:...]的位标记并得到如下结果我尝试了各种愚蠢的变体,但都没有用。不过,我对此并不感到惊讶。编辑附加信息:我的情况如下。用户将图片上传到他们的个人资料图像名称存储在数据库中。它们列在带有文本区域的表单旁边在键入文本时,我想通过添加以下标签[img:...]向用户提供他们的一张或多张图片,其中...是点击图片时将被复制的链接从用户图库中列出。我正在使用Codeigniter并将文本区域

php - pre_replace 一个字符串以将下划线后面的每个单词大写

这是一个示例字符串:hello_world_again所以它会被转换成:HelloWorldAgain所以它应该能够删除下划线并将下一个字母大写。第一个字母也应该大写。我发现了这个:preg_replace('/(?但现在我想把这个过程倒过来。非常感谢您的帮助!谢谢! 最佳答案 单独使用正则表达式在这里是行不通的。但是,您可以使用preg_replace_callback相反:$val='hello_world_again';functionmatch_toupper($m){returnstrtoupper($m[1]);}$va

php - 如何使用 RegEx 检测用户电子邮件是否为 hotmail 和实时

我正在尝试检测用户的电子邮件是hotmail还是live地址,如果是则回显错误。这是我尝试过的:if((preg_match('[a-zA-Z0-9_\.+]+@(live|hotmail)(\.[a-z]{2,3}){1,2}'))){echo"Wedonotaccepthotmailandlive";}它不起作用。我做错了什么? 最佳答案 鉴于您的唯一目的是检查电子邮件是用于live还是hotmail,不值得将正则表达式复杂化,只需执行以下操作即可:--更新--正如上面的评论所指出的,您错过了preg_match()的第二个参数