草庐IT

php - 查找并替换文本 block 中的 URL,但排除链接标记中的 URL

我一直在尝试遍历一个字符串并查找URL并将其替换为一个链接,这里是我到目前为止所得出的结果,它似乎在大多数情况下工作得很好,但是有几件事我想打磨。此外,它可能不是执行此操作的最佳方式。我已经在SO上阅读了很多关于此的主题,虽然它帮助很大,但我仍然需要解决它的问题。我在字符串中运行了两次。我第一次用html标签替换bbtags;第二次我遍历字符串并用链接替换文本url:$body_str=preg_replace('/\[url=(.+?)\](.+?)\[\/url\]/i','\2',$body_str);$body_str=preg_replace_callback('!(?:^|

php - 在 html 代码上运行 preg_replace 花费的时间太长

冒着被重定向到thisanswer的风险(是的,我读了它并花了最后5分钟大笑),请允许我解释这个问题,这只是众多问题中的一个。我的雇主要求我审查一个用PHP编写的网站,使用Smarty作为模板,使用MySQL作为DBMS。它目前运行非常缓慢,最多需要2分钟(整个过程都是全白的屏幕,不少于此)才能完全加载。使用xdebug分析代码,我发现一个preg_replace调用大约需要30秒才能完成,它目前遍历所有HTML代码并将找到的每个URL替换为其SEO友好版本。一旦完成,它会将所有代码输出到浏览器。(正如我之前所说,这不是唯一的问题-代码相当陈旧,而且它显示-但我将重点关注这个问题。)进

PHP Rest API,重定向 POST 路由器

我正在尝试编写一个简单的RESTfulphp应用程序。我正在尝试编写一个index.php路由器。我目前拥有的.htaccess文件是RewriteEngineOnRewriteCond%{REQUEST_FILENAME}!-fRewriteCond%{REQUEST_URI}!(\.[a-zA-Z0-9]{1,5}|/)$RewriteRuleapi/^(.*)$api/index.php?_url=/$1[QSA,L]我添加了RewriteCond%{REQUEST_URI}!(\.[a-zA-Z0-9]{1,5}|/)$以强制使用尾部斜线here.调用var_dump($_PO

php - 正则表达式删除新行和空格

我创建了一个正则表达式来去除空格、制表符、换行等。(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+我的问题是它匹配了一些空格和一些新行,而不是全部。这是为什么?我试过:(^[\r\n]*|[\r\n]+)[\s\t+]*[\r\n]+但似乎还是不能匹配多个空格Regextesterdemo 最佳答案 我不太确定你想在这里实现什么。但是,如果您像您在问题中所说的那样,只需**您所要做的就是将\s替换为任何内容。参见regex101.(为清楚起见,替换为*)你的正则表达式的问题是(除了它过于复杂;)结尾的[\r\n]+需

php - 为什么\w 在 Mac OS X PHP 环境中匹配非英文字符?

我发现“\w”在我的MacOSXPHP环境下可以匹配汉字。但相同的代码在Linux上不起作用。php-r"echopreg_match('/^\w+$/','人1234',\$m).chr(10);var_dump(\$m);"带有PHP5.6.18(cli)、PHP5.4.45(cli)结果的MacOSX11.11.31array(1){[0]=>string(7)"人1234"}带有PHP5.6.18(cli)、PHP5.2.17p1(cli)结果的CentOS60array(0){}PHP手册说Thedefinitionoflettersanddigitsiscontrolled

Php Regex - 如何选择是否等于某物

classSomething{publicstaticfunctioncompile(&$subject,$replace,$with){$placeholders=array_combine($replace,$with);$condition='{[a-z0-9\_\-]+:[a-z_]+}';$inner='((?:(?!{/?if).)*?)';$pattern='#{if\s?('.$condition.')}'.$inner.'{/if}#is';while(preg_match($pattern,$subject,$match)){$placeholder=$match[

php - 正则表达式:按特定顺序匹配字符串中至少 3 个字符

如何在给定的字符串中进行搜索,以便捕获每3个(或更多)有序字符的巧合?我用它在HTML搜索输入中应用一些条件限制...到目前为止我最好的尝试:/[deleted]{3,}/g我需要“del”、“ele”、“let”、“ete”或“ted”被捕获...但也有“dele”、“eted”甚至完整的“deleted>”。前面的正则表达式可以解决问题,但现在的问题是字符的顺序,因为它还捕获像“ltd”或“eded”这样的字符串,这些字符串不在orderwiththewordandshouldnot.有什么帮助吗?提前致谢。 最佳答案 好的,我

PHP验证灵活有效的URI

我会验证URI是否有效。我知道以前有人问过这个问题,但我可以找到灵活的问题,它符合一些规则应该放http://或https://验证主机是真实且灵活的ex:localhost,example.com,www.example.com,sub.domain.com,198.123.456.678应包含顶级域(例如.com或.org以及任何其他域)如果规则被打破,响应应该指出哪个规则是错误的所以如果url:https://example.com,http://localhost,会返回trueexample.com应该是false,响应是domain应该是域必须使用http或httpshtt

PHP在json字符串变量前后添加双引号

我正在尝试为每个变量添加双引号,例如json字符串中的file:和label:。例如:{file:"File_Name.mp3"},{file:"File_Name.mp4",label:"720"},{file:"File_Name.mp4",label:"360"}应该是:{"file":"File_Name.mp3"},{"file":"File_Name.mp4","label":"720"},{"file":"File_Name.mp4","label":"360"}我该怎么做?我看了一篇stackoverflow的文章There但是我的问题没有解决。我应该使用正则表达式。不

php - 正则表达式用引号匹配单词边界

这个问题在这里已经有了答案:Regex:Specify"spaceorstartofstring"and"spaceorendofstring"(4个答案)关闭4年前。我正在尝试匹配单词边界内的字符串。preg_match('/\bTORUKCirqueduSoleil\b/ims','Show:TORUKCirqueduSoleilwithLadyGaga',$matches);Output:TORUKCirqueduSoleil这很完美。但是当字符串中有引号时,它不会按预期工作。例如,preg_match('/\bTORUK"CirqueduSoleil"\b/ims','Show