草庐IT

PHP PCRE(正则表达式)不支持 UTF-8?

我试图在我的网站上运行一个正则表达式,我收到了这样的回复:Compilationfailed:supportfor\P,\p,and\Xhasnotbeencompiledatoffset1谷歌搜索了一下后,我发现我服务器上的PCRE显然没有启用UTF8,因此导致了问题。当我使用pcretest-Cssh时,我得到了PCRE6.6版2006年2月6日CompiledwithUTF-8supportNoUnicodepropertiessupportNewlinecharacterisLFInternallinksize=2POSIXmallocthreshold=10Defaultma

php - 解析搜索字符串

我有搜索字符串,类似于下面的字符串:energyfood"olympics2010"TerrorismOR"government"ORcupsNOTtransport我需要用PHP5解析它以检测内容是否属于以下任何集群:AllWords数组AnyWords数组NotWords数组这些是我设定的规则:如果在单词或引用的单词之前或之后有OR如果属于任何词。如果它在单词或引用的单词之前有NOT,则它属于NotWords如果它在单词或引用的短语之前有0个或更多空格属于AllWords。所以最终结果应该类似于:AllWords:(energy,food,"olympics2010")AnyWor

php - 您可以在正则表达式的模式部分使用反向引用吗?

有没有办法在正则表达式模式中反向引用?示例输入字符串:Hereis"somequoted"text.假设我想提取引用的文本,我可以创建以下表达式:"([^"]+)"此正则表达式将匹配somequoted。假设我希望它也支持单引号,我可以将表达式更改为:["']([^"']+)["']但是,如果输入字符串混合了引号怎么办,比如Hereis'somequoted"text.我不希望正则表达式匹配。目前,第二个示例中的正则表达式仍然匹配。我希望能够做的是,如果第一个引号是双引号,那么结束引号必须是双引号。如果开始引号是单引号,那么结束引号也必须是单引号。我可以使用反向引用来实现吗?我的其他相

php - 正则表达式从 Html 中删除带有样式标签的图像

我是Regex的新手,但我认为这是完成我需要做的事情的最简单途径。基本上我有一个字符串(在PHP中),其中包含一整套HTML代码......我想删除任何具有style=display:none的标签......例如等...到目前为止,我的正则表达式是:但这似乎会留下一些html,并且在php中使用preg_replace时也会带走下一个元素。 最佳答案 LikeMichaelpointedout,您不想为此目的使用正则表达式。正则表达式不知道元素标签是什么。与>foo一样有意义除非你教它区别。但是,教授差异非常乏味。DOM非常方便:

php - 使用正则表达式删除 HTML 标签

我需要转换$text='Wehadfun.LookatthisphotoofJoe';[编辑]文本中可以有多个链接。到$text='Wehadfun.Lookatthisphoto(http://example.com)ofJoe';所有HTML标签都将被删除,href值来自需要像上面一样添加标签。用正则表达式解决这个问题的有效方法是什么?任何代码片段都会很棒。 最佳答案 首先做一个preg_replace来保持链接。你可以使用:preg_replace('(.*?)','$\2($\1)',$str);然后使用strip_tags

php - 如何让这个正则表达式匹配</span>

这是我要执行匹配的HTML字符串类型:+12SpellPowerand+10HitRating我想得到+12SpellPowerand+10HitRating从上面的HTML中。这是我写的代码:preg_match('/(.*)/',$gem,$match);但是由于它正在逃避/在所以它不会停止比赛,所以我得到的数据比我想要的多得多。我怎样才能逃脱/在同时仍将其作为模式的一部分?谢谢。 最佳答案 我认为你的正则表达式得到的比你想要的多的原因是因为*是贪婪的,尽可能多地匹配。相反,使用*?,它将尽可能少地匹配:preg_match('

php - 如何使用 CodeIgniter 的正则表达式捕获不以 "ajax/"开头的字符串?

我正在为我的CodeIgniter应用程序处理一些路由,我需要声明一个“包罗万象”/除了一个正则表达式。任何不以“ajax/”开头的路由都应重定向到“main”路由器。像这样:$route['regexmagichere']="main";所以这绝对超出了我的正则表达式技能范围,我需要一些帮助。正则表达式应在所有不以“ajax/”开头的字符串上返回true,如下所示:$string_one="ajax/someotherstuffhere";$string_two="ajax/test";$string_three="somestuffhere";此处$string_one将是唯一返回

php - 正则表达式 int 或 float

我的正则表达式不适用于个位数/^[0-9]{1,7}\.?[0-9]{1,2}$/我需要它来处理无符号数:1(singledigitnumbers,withoutfractions)-currentlyitfailsonthem1.0;0.31(floatingpointnumbers)小数前的数字可以是1-7位;在小数1-2位数之后。谢谢! 最佳答案 您指定必须有1-7位数字,然后是可选的小数点,然后是1-2位数字。尝试:/^[0-9]{1,7}(?:\.[0-9]{1,2})?$/请注意,这不允许尾随小数位(即“1.”)。如果你

php - preg_match 到 domain.tld

如何获取只包含domain.tld的字符串?if(preg_match('^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$',$domain))echo"domain.tldfound!";但对于正则表达式^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$,子域是还可以。但我只想检查“domain.tld”。我应该使用什么正则表达式?谢谢。 最佳答案 if(preg_match('/^[-a-z0-9]+\.[a-z]{2,6}$/',strtolower($domain)))echo"do

php - 关于如何解析此数据集的任何优雅想法?

我正在使用PHP5.3从Web服务调用中接收数据集,该调用返回一个或多个事务的信息。每个交易的返回值由竖线(|)分隔,交易的开始/结束由空格分隔。2109695|49658|25446|4|NSF|2010-11-2413:34:00Z2110314|45276|26311|4|NSF|2010-11-2413:34:00Z2110311|52117|26308|4|NSF|2010-11-2413:34:00Z(etc)由于日期时间戳中的空间,对空间进行简单的分割是行不通的。我非常了解正则表达式,知道总是有不同的方法来分解它,所以我认为听取一些专家的意见会帮助我想出最严密的正则表达式