假设输入字符串+123-321+123345,使用PHP的正则表达式函数我想删除所有非数字([^\d])字符,除了开头的+字符。+可能存在也可能不存在,因此给定字符串123-321+123345结果应该相同(123321123345)。目前的解决方法是检查+,然后运行preg_replace('/[^\d]+/','',$string),但我确信必须有一个纯正则表达式的解决方案来解决这个问题。谢谢! 最佳答案 试试这个/(?\D与[^\d]相同(?是一个负向后视,确保在非数字之前没有字符串的开头。这个表达式将匹配所有不是字符串开
我正在尝试从这样的uris列表中解析一个整数:uri.com/upload/123456789_abc.ext我正在使用这种模式:preg_match("#uri\.com\/upload\/(.*?)_#is",$uri,$match);哪个有效并返回:Array([0]=>uri.com/upload/123456789_[1]=>123456789)但我想知道是否有办法使$match=="123456789"而不是返回具有多个值的数组。只修改模式是否可以做到? 最佳答案 它将始终返回一个数组,但您可以更改模式,以便它只匹配您想
我正在用PHP为基于MVC的站点重新编写路由处理类,并且需要一个正则表达式来检测URL中的分页字符串。分页字符串由三个不同的部分组成;页码检测:/page/[NUMERIC]/每页项目检测:/per_page/[NUMERIC]/顺序检测:/sort/[ALMOST_ANY_CHARACTER]/[ascordesc]/由于之前的开发方式,这三部分可以任意顺序。我需要继续工作的许多现有链接以及用于处理分页的代码(尚无重写计划)-因此不可能更改分页代码以始终生成一致的url。因此,我需要构建一个正则表达式模式来检测分页结构的所有可能组合。我有三种模式来检测每个部分,如下所示:页码检测:(
我正在使用这个:$t="#hashtag#goodhash_tagunitedstates#l33tthis";$queryVariable="";if(preg_match_all('/(^|\s)(#\w+)/',$t,$arrHashTags)>0){array_filter($arrHashTags);array_unique($arrHashTags);$count=count($arrHashTags[2]);if($count>1){$counter=1;foreach($arrHashTags[2]as$strHashTag){if(preg_match('/#\d*[
我正在执行正则表达式匹配以查找文本中某些特定单词集的首次出现。因为我不想在它们是其他单词的子字符串时生成误报,所以我想使用模式。例如,我想找到整个单词“DOM”,而不是“RANDOMIZER”中的子字符串DOM,比方说。因此,我将模式用作"\bDOM\b"来考虑所有出现的DOM,两侧都有单词边界。但是DOM和其他此类模式字符串来自数组$tags。将每个标签从$tags读入$tag,比较实际上是:preg_match("/\b$tag\b/",...)但如果$tag=".NET",这会遇到麻烦。然后"\b$tag\b"将开始匹配CNET、INET等字符串,将.解释为通配符。那么,我们如何
我正在尝试返回列表的计数。该列表如下所示:1234我只是不知道如何计算li标签的数量。我不在乎内容,只在乎数量。这是我的:preg_match_all('!.*?.*?.*?!',$content,$matches);丑陋的我知道,当我count($matches[0]);时我只收到一个匹配项谁能指出我做错了什么和/或为什么?谢谢编辑:我知道用正则表达式解析HTML是bad,但我现在在这件事上别无选择。 最佳答案 .*?.*?.*?^^^我要指出的部分是消耗所有字符直到(甚至是部分)。消耗它们后,没有更多的匹配,它到此结束,只给出一
以下代码在通过CLI和Apache/mod_php运行时产生不同的结果:$pattern."u",//Addu(PCRE_UTF8)modifier"Non-unicode"=>$pattern);echo"Text:\n'$text'\n";foreach($regexpsas$type=>$regexp){$matches=array();$total=preg_match_all($regexp,$text,$matches);echo"\n\n";echo"$typeregex:\n'$regexp'\n\n";echo"Total$typematches:";var_dump
这个问题在这里已经有了答案:Reference-Whatdoesthisregexmean?(1个回答)关闭7年前。模式在PHP中是什么意思:'#^/abc/(?P[^/]++)$#si';//pleaseexpandthispattern'smeaning.什么是字符串可以匹配此模式与preg_match_all?
我试图在执行查询之前验证查询,如果查询不是mysqlselect语句,那么我必须向用户显示消息。我从这个链接找到了下面的正则表达式:ValidatesimpleselectqueryusingRegularexpression$reg="/^Select\s+(?:\w+\s*(?:(?=from\b)|,\s*))+from\s+\w+\s+where\s+\w+\s*=\s*'[^']*'$/i";接下来我写了下面的代码,但它总是打印不选择查询($match每次都是空的)$string="select*fromuserswhereid=1";preg_match_all($reg,
我有来自数据库(非常受控的输入)的数字,它们前后都有下划线。它们是这样存储的:_51__356_它们不会以任何其他格式存储,但有时我只需要从中获取数字。我选择使用其中之一$x=filter_var($myNumber,FILTER_SANITIZE_NUMBER_INT);或$y=preg_replace("/[^0-9]/","",$myNumber);我不确定后端两者之间的细微差别,但它们都能产生我所需要的(无论如何,我是这么认为的),所以我使用哪个并不重要。使用这些选项的优缺点是什么?(例如,是否有人使用数组或其他我可能需要了解的奇怪事物?有人使用了太多资源吗?)