草庐IT

PHP:如何从字符串转储中提取 JSON 字符串

我有一个巨大的字符串转储,其中混合了常规文本和JSON。我想从字符串转储中分离/删除JSON对象并仅获取文本。这是一个例子:Thisissometext{'JSON':'Object'}Here'ssomemoretext{'JSON':'Object'}Yetmoretext{'JSON':'Object'}Again,sometext.我的目标是获得如下所示的文本转储(基本上删除了JSON):ThisissometextHere'ssomemoretextYetmoretextAgain,sometext.我需要用PHP完成这一切。文本转储总是随机的,JSON数据结构也是如此(其中

两种模式之间的 PHP Regex 匹配

我正在尝试解析包含大量跟踪的日志文件,其中一些跟踪有多行。例子:[trace-123]Thisisalogline[trace-124]Thisisanotherloglinethisispartof"[trace-124]"still.[trace-125]finallogline.我正在尝试使用preg_match_all获取所有轨迹的数组。$file=file_get_contents("traces.txt");$tracePattern="/(\[trace-[0-9]*+\]+[\s\S]*)(?|\)/";preg_match_all($tracePattern,$fil

php - 正则表达式抓取括号内的所有文本,而不是引号

我正在尝试匹配{brackets}之间的所有文本,但如果它在引号中则不会:例如:$str='我{想要}的值(value),对比“我{不}想要”的值(value)'我的结果应该抢夺“want”,但省略“NOT”。我已经拼命搜索stackoverflow以寻找可以执行此操作但没有运气的正则表达式。我看到的答案允许我在引号之间获取文本,但不能在引号外和括号中获取文本。这可能吗?如果是的话,它是如何完成的?到目前为止,这是我所拥有的:preg_match_all('/{([^}]*)}/',$str,$matches);但不幸的是,它只会获取括号内的所有文本,包括{NOT}

php - 使用 php,如何将 [0-9]、[0-9] 替换为 [0-9][0-9]?

假设我有一个字符串“1,000,786”。我希望将其转换为“1000786”。我知道preg_replace的第一部分类似于“[0-9],[0-9]”,但我不明白如何在preg_replace的“替换为”部分中取回数值。谢谢。编辑:抱歉,我忘了说这不像删除逗号那么简单,因为可能包含字母字符。仅当逗号介于2个数字之间时,我才希望它消失。示例:“Apple,Banana1,746”将是“Apple,Banana1746”。 最佳答案 下面的正则表达式只有在逗号前面有数字并且后面必须有数字时才会删除逗号。(?替换字符串:Emptystri

php - 在 Yii 2 中错误验证模式匹配有问题

我的rules方法中有一堆验证规则,所有错误似乎都有效,但这个有问题:['username','match','pattern'=>'/[a-zA-Z0-9_-]+/','message'=>'Yourusernamecanonlycontainalphanumericcharacters,underscoresanddashes.'],它验证,这是不正确的行为。我是不是做错了什么? 最佳答案 这个模式只检查第一个字符。您需要像下面这样更正它:['username','match','pattern'=>'/^[a-zA-Z0-9_

php - Laravel 正则表达式验证价格或为空

我正在尝试为价格或为空制作一个正则表达式。我有实际有效的价格部分(荷兰语使用逗号而不是点)/^\d+(,\d{1,2})?$/上面的正则表达式在值21,99上验证正常现在我尝试添加空白部分,这样该字段就可以...只是空白^$/(^$|^\d+(,\d{1,2})?$)/但是Laravel在我更改正则表达式后立即开始提示:“方法[validate^\d+(,\d{1,2})?$)/]不存在。”工作正常:$rules=['price'=>'regex:/^\d+(,\d{1,2})?$/'];Laravel拒绝...:$rules=['price'=>'regex:/(^$|^\d+(,\

php - 正则表达式 PHP,将所有链接与特定文本匹配

我正在寻找PHP中的正则表达式,它将anchor与上面的特定文本相匹配。例如,我想获得带有文本mylink的anchor,例如:mylink所以它应该匹配所有anchor,但前提是它们包含特定文本所以它应该匹配这些字符串:mylinkblablamylinkmylinkblablablablamylinkblabla但不是这个:blablablabla因为这个不包含单词mylink。另外这个不应该匹配:"mylinkisstring"因为它不是anchor。有人有什么想法吗?谢谢花岗岩 最佳答案 改用解析器:require_once

php - preg_replace 仅匹配的一部分

我正在使用preg_replace为基于modrewrite的分页链接创建url。我使用:$nextURL=preg_replace('%/([\d]+)/%','/'.($pageNumber+1).'/',$currentURL);效果很好,但是我想知道是否有更好的方法而无需在替换参数中包含'/'。我需要匹配两个/之间的数字,因为URL有时可以包含页面部分以外的数字。然而,这些数字绝不仅仅是数字,所以/[\d]+/阻止它们被替换。 最佳答案 你可以使用look-aroundassertions:%(?(?是一个积极的后视断言并且

php - 使用 preg_replace 匹配重复的空格

我正在编写一个WordPress插件,其中一个功能是删除重复的空格。我的代码是这样的:returnpreg_replace('/\s\s+/u','',$text,-1,$count);我不明白为什么我需要u修饰符。我见过其他插件使用preg_replace但不使用需要为Unicode修改它。我相信我有默认安装的WordPress。没有修饰符,代码用Unicode替换所有空格替换字形而不是空格。使用u修饰符,我不明白字形,它不会替换所有空格。下面每个空格有1-10个空格。正则表达式仅从每个组中删除空格。之前:Thissentencehasextraspace.Thisdoesn’t.E

PHP 正则表达式 : Problem with Smiley `:)` and `:))`

我想要什么嗨!我想将:)替换为smile.png并将:))替换为laugh.png。问题脚本在:))中找到:)所以laugh.png没有显示,只有smile.png+)这是我目前为:))所做的尝试:preg_replace("/:)+(?!))/i",$image,$string))我尝试过的其他一些正则表达式:"/\:\)+(?=\))/i""/\:+(?=\)\))/i"但没有什么比我尝试的更有效了。 最佳答案 对于:)–(:\)(?!\)))然后对于:))–(:\)\)) 关于PH