我一直收到这个错误:
警告:preg_match()[function.preg-match]:第235行的D:\ xampp\htdocs\administrator\components\com_smms\functions\plugin.php中的未知修饰符't'
上:
$PageContent = preg_replace($result->module_pregmatch, '', $PageContent);
Run Code Online (Sandbox Code Playgroud)
我在$ result-> module_pregmatch上做了一个var_dump,得到以下结果:
string '/<title>(.*)</title>/Ui' (length=23)
string '/<meta[^>]*name=["|\']description["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=77)
string '/<meta[^>]*name=["|\']keywords["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=74)
string '/<meta[^>]*name=["|\']author["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=72)
string '/<meta[^>]*name=["|\']copyright["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=75)
string '/<meta[^>]*name=["|\']robots["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=72)
string '/<meta[^>]*http=equiv=["|\']content-language["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=88)
string '/<meta[^>]*http-equiv=["|\']content-type["|\'][^>]*content=["|\'](.*)["|\']\s*\/>/Ui' (length=84)
string '/<link[^>]*href=["|\'](.*)["|\'][^>]*rel=["|\']shortcut[^>]*icon["|\'][^>]*type=["|\']image\/x-icon["|\']\s*\/>/Ui' (length=114)
string '/<link[^>]*href=["|\'](.*)["|\'][^>]*rel=["|\']alternate["|\'][^>]*type=["|\']application\/rss\+xml["|\'][^>]*title=["|\'](.*)["|\'][^>]\/>/Ui' (length=142)
string '/<link[^>]*href=["|\'](.*)["|\'][^>]*rel=["|\']alternate["|\'][^>]*type=["|\']application\/atom\+xml["|\'][^>]*title=["|\'](.*)["|\'][^>]\/>/Ui' (length=143)
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么吗?我一直坚持这个错误太久了...
我有一个匹配MySQL中的字段,我认为我可以使用正则表达式,但似乎MySQL没有我需要的功能.这是场景:
我在PHP中有一个名为$ url的变量.假设此变量设置为字符串"/ article/my-article/page/2".我还有一个MySQL表格,我想从中提取内容.但是,存储在我的表中的URL包括通配符.
以前,我进行了此设置,以便存储在表中的值如下所示:"/ article /%/ page /%".
使用该配置,我可以运行:
SELECT * FROM urls WHERE '$url' LIKE url
Run Code Online (Sandbox Code Playgroud)
这将匹配,这是所需的功能.
我现在要做的是允许更高级的通配符,这样我的MySQL数据可以是"/ article/{{slug}}/page/{{而不是"/ article /%/ page /%". page_no}}".
我想使用相同的$ url输入创建一个匹配此数据的SQL查询.LIKE不再是正确的比较,因为我没有使用内置的"%"通配符,而是使用{{.*}}.任何想法如何实现这一目标?
我需要以不区分大小写的方式查找和替换所有文本匹配项,除非文本位于锚标记内 - 例如:
<p>Match this text and replace it</p>
<p>Don't <a href="/">match this text</a></p>
<p>We still need to match this text and replace it</p>
Run Code Online (Sandbox Code Playgroud)
搜索"匹配此文本"只会替换第一个实例和最后一个实例.
[编辑]根据戈登的评论,在这个例子中可能更喜欢使用DOMDocument.我对DOMDocument扩展并不熟悉,并且非常感谢这个功能的一些基本示例.
我正在尝试找到一个可靠的解决方案,从一串字符中提取url.我有一个用户回答问题的网站,在源框中,他们输入了他们的信息来源,我允许他们输入网址.我想提取该URL并使其成为超链接.与Yahoo Answers的工作方式类似.
有谁知道可以做到这一点的可靠解决方案?
我找到的所有解决方案都适用于某些URL,但不适用于其他URL.
谢谢
很简单; 我似乎找不到任何关于PHP preg_replace()支持命名反向引用的确定性:
// should match, replace, and output: user/profile/foo
$string = 'user/foo';
echo preg_replace('#^user/(?P<id>[^/]+)$#Di', 'user/profile/(?P=id)', $string);
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,但我想知道这种语法(?P=name)是否完全不受支持.语法问题,还是不存在的功能?
我怎样才能删除(//<![CDATA[ , //]]>)块; script元素内的标签.
<script type="text/javascript">
//<![CDATA[
var l=new Array();
..........................
..........................
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)
看起来它可以完成,preg_replace()但还没有找到适合我的解决方案.
我会用什么正则表达式?
我做了一个功能,用PHP删除换行没有成功,我尝试了所有替换代码,我仍然得到这些换行,我创建一个json文件,我无法从jsonp与jquery读取它因为这些换行似乎打破一切.
function clean($text)
{
$text = trim( preg_replace( '/\s+/', ' ', $text ) );
$text = preg_replace("/(\r\n|\n|\r|\t)/i", '', $text);
return $text;
}
Run Code Online (Sandbox Code Playgroud)
当我查看源代码时,在所有href,img和br中都会出现一些换行符,这是一个json_encode输出示例:
<a
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">
Run Code Online (Sandbox Code Playgroud)
换行a.img src和br是hapenig
我可以删除这些的唯一方法打破它
$text = preg_replace("/\s/i", '', $text);
Run Code Online (Sandbox Code Playgroud)
但是你明白所有字符串都没有空间,这不是我们想要的.
我有一个具有名称的数据库,我想在名称空间后使用PHP替换,数据示例:
$x="Laura Smith";
$y="John. Smith"
$z="John Doe";
Run Code Online (Sandbox Code Playgroud)
我想要它回来
Laura
John.
John
Run Code Online (Sandbox Code Playgroud) 我正在屏蔽字符串中的单引号(包含)之间的所有字符preg_replace_callback().但我想只preg_replace()在可能的情况下使用,但一直无法弄清楚.任何帮助,将不胜感激.
这是我使用preg_replace_callback()它产生正确的输出:
function maskCallback( $matches ) {
return str_repeat( '-', strlen( $matches[0] ) );
}
function maskString( $str ) {
return preg_replace_callback( "('.*?')", 'maskCallback', $str );
}
$str = "TEST 'replace''me' ok 'me too'";
echo $str,"\n";
echo $maskString( $str ),"\n";
Run Code Online (Sandbox Code Playgroud)
输出是:
TEST 'replace''me' ok 'me too'
TEST ------------- ok --------
Run Code Online (Sandbox Code Playgroud)
我尝试过使用:
preg_replace( "/('.*?')/", '-', $str );
Run Code Online (Sandbox Code Playgroud)
破折号被消耗掉,例如:
TEST -- ok -
Run Code Online (Sandbox Code Playgroud)
我尝试过的其他任何东西都不起作用.(我显然不是正则表达式专家.)这可能吗?如果是这样,怎么样?
我试图转换,从textarea输入($_POST['content']),所有网址链接.
$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' <a href="$2" target="_blank">$2</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!(\s|^)((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$2" target="_blank">$2</a> ', $content." ");
Run Code Online (Sandbox Code Playgroud)
目标链接格式:www.hello.com或http(s)://(www).hello.com
但这似乎打破任何iframe,图像或类似,
正确的正则表达式如何忽略html标签中的url?
注意:我知道我需要两个表达式; 一个检测没有协议链接(比如www.hello.com,所以我需要预先添加)和另一个检测带协议的URL(所以不需要预先添加).
php ×10
preg-replace ×10
regex ×7
replace ×2
url ×2
cdata ×1
domdocument ×1
line-breaks ×1
linkify ×1
modifier ×1
mysql ×1
xpath ×1