我试图阻止\Ganchor匹配字符串的开头。我只希望它在最后一个正则表达式匹配结束时匹配。给定以下文本:Pig,Cow,Goatfruit:apple,orange,peach,pearvegetable:Carrot,Lettuce,Cellery这个模式:(fruit:|\G)([\w]+|[\,])我希望它只匹配“fruit:”之后的单词,但我需要它单独捕获每个单词。如果我只是把+放在这个模式的最后,它会匹配“fruit:”之后的所有词,但它只会捕获“pear”,因为+的每次迭代都会踩到最后一个。问题来了。这种模式有效,除了它还匹配“Pig,CowandGoat”,因为\G将匹配
对于经验丰富的正则表达式专家来说,这可能是一个快速的问题,但我无法正确执行我的匹配。假设我有一个看起来像这样的字符串:http://aaa-bbbb-cc-ddddd-eee-.sub.dom我想捕获所有的“aaa”、“bbbb”、“cc”和“ddddd”子字符串,但我不确定会有多少(例如,让所有三元组到“zzz").这是我现在尝试使用的正则表达式:/http:\/\/(\w*?\-)+\.sub\.dom/我这样写是因为:我想匹配子串,但我希望每个子串在解析-时终止我想捕获一个或多个这些子串但它似乎只保存它进行的最后匹配(在上面的例子中,它只会匹配“eee-”。有没有什么好的方法可以
有没有办法获得PCRE的版本(和发布日期)?从PHP代码与PHP捆绑并将其存储到变量中?我可以使用phpinfo()找到它但找不到任何其他方法直接从代码中获取该值。过去几个小时我一直在努力寻找解决方案,但毫无希望。到目前为止,我可以在变量中获得完整的phpinfo()输出并从那里提取PCRE版本/发布日期,但我想知道是否有更简单的解决方案? 最佳答案 你也可以使用常量PCRE_VERSIONfoundsourcehere 关于php-如何从代码中获取PCRE(与PHP捆绑在一起)的版本?
我试图在我的网站上运行一个正则表达式,我收到了这样的回复:Compilationfailed:supportfor\P,\p,and\Xhasnotbeencompiledatoffset1谷歌搜索了一下后,我发现我服务器上的PCRE显然没有启用UTF8,因此导致了问题。当我使用pcretest-Cssh时,我得到了PCRE6.6版2006年2月6日CompiledwithUTF-8supportNoUnicodepropertiessupportNewlinecharacterisLFInternallinksize=2POSIXmallocthreshold=10Defaultma
在某些情况下,使用递归回溯的正则表达式实现可能会呈现指数级运行时间。我正试图为PCRE引擎找到这样一个病态的正则表达式。我已经尝试了几个正则表达式,这些正则表达式对于Perl正则表达式来说是指数级的(例如thisone),但是在我的测试中它们都没有表现出与PCRE的指数级运行时间。 最佳答案 在您的测试中,是否所有的正则表达式都预计会失败?当他们确实失败时,您是否找到了确切原因?可能匹配失败因为正则表达式引擎检测到过多的回溯。我不知道这种情况是否会发生,但请尝试使用应该会成功的正则表达式,例如:(?i)lorem(?:.|\s)*p
在PCRE中,有什么区别:^和\A,以及$和\Z?我记得读过有细微差别,但不记得到底是什么。 最佳答案 默认情况下,两者没有区别,都是表示字符串的开始或结束。但是,如果您使用m修饰符,则^和$将分别匹配行的开头和结尾。 关于php-PCRE:^|$和\A|\Z?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6970552/
我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母、数字、逗号和其他标点符号,但不包含空格、制表符或换行符)。我的解决方案是([^\s]+\s+){2}但如果它匹配类似这样的内容:'123word'*in'123word,hello'*,它不适用于只有两个单词且后面没有空格的字符串。这个任务的正确正则表达式是什么? 最佳答案 你几乎是对的:([^\s]+\s+[^\s]+)假设您不需要对要使用的字符进行更强的控制。如果您需要同时匹配两个词或只匹配一个词,您可以使用其中之一:([^\s]+\s+[^\s]+|[^\s]+
我正在尝试迁移一个相当大且非常旧的数据库,其中一列由文件名组成。问题是在这个字段中可以有多个由空格分隔的文件名。例如:"Filename.mp3fileanem.midfilename.rm"我试图用preg_split()拆分这些字符串,我能想到的最接近的正则表达式是/(?我知道/(?不会工作,因为在PCRE中,lookbehind必须具有固定宽度。由于这是一个音乐数据库,因此也有非常规的扩展。有什么建议吗? 最佳答案 您可以使用此正则表达式进行拆分:~\.\w+\K\h+~RegExDemo正则表达式详细信息:\.:匹配文字点\
有没有办法让PCRE正则表达式计算一个字符出现的次数(n),并在找到另一个字符出现n次后停止搜索(特别是{和}).这是为了抓取代码块(里面可能有也可能没有嵌套的代码块)。如果它更简单,输入将是一个单行字符串,除了大括号之外的唯一字符是数字、冒号和逗号。在尝试提取代码块之前,输入必须通过以下标准:$regex='%^(\\d|\\:|\\{|\\}|,)*$%';所有大括号都有一对匹配,并且正确嵌套。在我开始编写脚本来检查字符串中的每个字符并计算大括号的每次出现次数之前,我想知道这是否可以实现。正则表达式对内存更友好,因为这些字符串的大小可能有几千字节!谢谢,mniz。解决方案PCRE:
我阅读了preg_filter函数的文档,如下所示。这是fromphp.net网站。$subject=array('1','a','2','b','3','A','B','4');$pattern=array('/\d/','/[a-z]/','/[1a]/');$replace=array('A:$0','B:$0','C:$0');print_r(preg_filter($pattern,$replace,$subject));在$replace的数组中,一些可用的变量是这样的-$0当我尝试这样做时,它返回的值在替换之前可用。它是PHP上的公共(public)变量还是仅适用于PCR