草庐IT

php - preg_match_all html 标签,双引号或单引号中的标签除外

给定这个DOM$html=Bye","info":"Wewin"}'>TheAAnythinghere"}'>EOD;我正在尝试使用此表达式来preg_match_allhtml标签:$tags=array();if(preg_match_all('~]*>|~im',$html,$matchall,PREG_SET_ORDER)){foreach($matchallas$m){$tags[]=$m[0];}}print_r($tags);这个表达式的输出是:Array([0]=>[1]=>[2]=>[3]=>[4]=>[5]=>[6]=>[7]=>[8]=>[9]=>[10]=>[1

php - 具有指数运行时间的 PCRE 正则表达式

在某些情况下,使用递归回溯的正则表达式实现可能会呈现指数级运行时间。我正试图为PCRE引擎找到这样一个病态的正则表达式。我已经尝试了几个正则表达式,这些正则表达式对于Perl正则表达式来说是指数级的(例如thisone),但是在我的测试中它们都没有表现出与PCRE的指数级运行时间。 最佳答案 在您的测试中,是否所有的正则表达式都预计会失败?当他们确实失败时,您是否找到了确切原因?可能匹配失败因为正则表达式引擎检测到过多的回溯。我不知道这种情况是否会发生,但请尝试使用应该会成功的正则表达式,例如:(?i)lorem(?:.|\s)*p

php - 正则表达式可选重复组

假设有以下字符串:一些文本在这里[baz|foo]和这里[foo|bar|baz]甚至这里[option]。我只成功地匹配了这个丑陋的正则表达式(Regex101.comdemo):/(?:\[(?:\|?([^\|\[\]]+))?(?:\|?([^\|\[\]]+))?(?:\|?([^\|\[\]]+))?\])/ugx重点是我需要用方括号对匹配项进行分组。所以目前我确实有我需要的结果:[{"match":1,"children":[{"group":1,"start":16,"end":19,"value":"baz"},{"group":2,"start":20,"end":

php - 逗号分隔列表的子字符串的正则表达式

我是正则表达式的初学者,所以如果这是一个幼稚的问题,我提前道歉!我有一个字符串,其中两个值用逗号分隔:12.345678,23.45678901我正在尝试使用正则表达式(这是一项要求)返回第一个带3位小数的值12.345和第二个带2位小数的值23.45。理想情况下,完整的正则表达式匹配为12.345,23.45我可以使用以下正则表达式获得第一个值12.345:^\d+\.\d{0,3}。这很有效,因为它只返回完整的匹配项(没有第1组匹配项)。但我对如何在同一字符串中返回第二个值23.45感到很困惑。我也试过这个正则表达式:(^.{0,6})(?:.*)(,)(.{0,5}),它正确解析

php - 正则表达式的较短方式

这必须仅匹配这些数字:110、220、330、440、550、660、770、880、990(不包括000)。这个正则表达式(pcre)有更短的方法吗?/^(1{2}|2{2}|3{2}|4{2}|5{2}|6{2}|7{2}|8{2}|9{2})0$/ 最佳答案 您可以使用:/\b([1-9])\g{1}0\b/RegExDemo正则表达式的分解:\b#wordboundary[1-9]#matchdigit1-9andgroupthemascapturedgroup#1\g{1}#back-referencetogroup#10

php - 用于验证 ip-list 中的 ip-range 的正则表达式

我有用于验证逗号分隔的50ips列表的正则表达式:^(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:,??)){1,50}$列表示例:10.10.10.1,127.0.0.1现在我需要支持列表,像这样:10.10.10.1,127.0.0.1-127.0.0.125我尝试使用子模式,但什么也没发生有人可以提供验证此字符串的正则表达式示例吗:127.0.0.1-127.0.0.125 最佳答案

php - PCRE: ^|$ 和\A|\Z?

在PCRE中,有什么区别:^和\A,以及$和\Z?我记得读过有细微差别,但不记得到底是什么。 最佳答案 默认情况下,两者没有区别,都是表示字符串的开始或结束。但是,如果您使用m修饰符,则^和$将分别匹配行的开头和结尾。 关于php-PCRE:^|$和\A|\Z?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6970552/

php - pcre正则表达式匹配前两个词,数字

我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母、数字、逗号和其他标点符号,但不包含空格、制表符或换行符)。我的解决方案是([^\s]+\s+){2}但如果它匹配类似这样的内容:'123word'*in'123word,hello'*,它不适用于只有两个单词且后面没有空格的字符串。这个任务的正确正则表达式是什么? 最佳答案 你几乎是对的:([^\s]+\s+[^\s]+)假设您不需要对要使用的字符进行更强的控制。如果您需要同时匹配两个词或只匹配一个词,您可以使用其中之一:([^\s]+\s+[^\s]+|[^\s]+

php - 用于匹配名称和可选值的正则表达式

我有一个PHP应用程序,它与支付处理器接口(interface)以处理信用卡。有时,处理器的后响应失败(例如矩阵中的暂时故障),我们没有收到付款的自动通知。在这些情况下,我们会回退到从始终发送的确认电子邮件中输入数据。我希望我的代码解析出电子邮件的文本以获取数据,这似乎是preg_match_all的完美用例。问题是电子邮件的格式不正确:它以name:value对出现,但它们都在一行上,而且通常值是空白,这让我很困惑。我非常擅长正则表达式基础知识(量词、分组、字符类、anchor、修饰符),但我真的没有前瞻和反向引用的经验,而且它们是否能提供帮助对我来说一点也不明显。示例数据可能看起来

php 将 preg_replace 转换为 preg_replace_callback

我正在处理这段旧代码,遇到了这个-但失败了:preg_replace('!s:(\d+):"(.*?)";!e',"'s:'.strlen('$2').':\"$2\";'",$sObject);它告诉我preg_replacee修饰符已弃用,改为使用preg_replace_callback。据我所知,我应该用回调函数替换's:'.strlen('$2').':\"$2\";'部分替补上场。我不太明白的是我将要替换的正则表达式的作用。获取填充在数据库字段中的php序列化数据(愚蠢,我知道......),长度字段损坏并修复它们以重新插入是有点的一部分。那么谁能解释一下那个位在做什么,或