草庐IT

pcre-light

全部标签

php - pcre正则表达式匹配前两个词,数字

我需要一个正则表达式来匹配字符串中的前两个单词(它们可能包含字母、数字、逗号和其他标点符号,但不包含空格、制表符或换行符)。我的解决方案是([^\s]+\s+){2}但如果它匹配类似这样的内容:'123word'*in'123word,hello'*,它不适用于只有两个单词且后面没有空格的字符串。这个任务的正确正则表达式是什么? 最佳答案 你几乎是对的:([^\s]+\s+[^\s]+)假设您不需要对要使用的字符进行更强的控制。如果您需要同时匹配两个词或只匹配一个词,您可以使用其中之一:([^\s]+\s+[^\s]+|[^\s]+

php - 正则表达式在扩展 PCRE (php) 后匹配一个空格

我正在尝试迁移一个相当大且非常旧的数据库,其中一列由文件名组成。问题是在这个字段中可以有多个由空格分隔的文件名。例如:"Filename.mp3fileanem.midfilename.rm"我试图用preg_split()拆分这些字符串,我能想到的最接近的正则表达式是/(?我知道/(?不会工作,因为在PCRE中,lookbehind必须具有固定宽度。由于这是一个音乐数据库,因此也有非常规的扩展。有什么建议吗? 最佳答案 您可以使用此正则表达式进行拆分:~\.\w+\K\h+~RegExDemo正则表达式详细信息:\.:匹配文字点\

php - PCRE:为代码块找到匹配的大括号

有没有办法让PCRE正则表达式计算一个字符出现的次数(n),并在找到另一个字符出现n次后停止搜索(特别是{和}).这是为了抓取代码块(里面可能有也可能没有嵌套的代码块)。如果它更简单,输入将是一个单行字符串,除了大括号之外的唯一字符是数字、冒号和逗号。在尝试提取代码块之前,输入必须通过以下标准:$regex='%^(\\d|\\:|\\{|\\}|,)*$%';所有大括号都有一对匹配,并且正确嵌套。在我开始编写脚本来检查字符串中的每个字符并计算大括号的每次出现次数之前,我想知道这是否可以实现。正则表达式对内存更友好,因为这些字符串的大小可能有几千字节!谢谢,mniz。解决方案PCRE:

php - 什么是 PHP PCRE 函数上的 $0

我阅读了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

php - 在 PHP PCRE 函数中双重转义或不双重转义?

我一直在寻找一篇关于何时需要双重转义和何时不需要的可靠文章,但我找不到任何东西。也许我看起来不够仔细,因为我确信那里有解释,但让下一个有这个问题的人很容易找到它!以以下正则表达式模式为例:/\n//domain\.com//myfeet\$yourfeet/没什么突破性的吧?好的,让我们在PHP的preg_match函数的上下文中使用这些示例:$foo=preg_match("/\n/",$bar);$foo=preg_match("/domain\.com/",$bar);$foo=preg_match("/myfeet\$yourfeet/",$bar);据我了解,带引号的字符串值

php - RegEx 不适用于长模式 PCRE 的 JIT 编译器堆栈限制 - PHP7

我正在使用oyejorge的less编译器。list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");捕获异常。我缩小了范围,并创建了一个测试脚本$regex='/\\G"((?:[^"\\\\\r\n]|\\\\.|\\\\\r\n|\\\\[\n\r\f])*)"|\'((?:[^\'\\\\\r\n]|\\\\.|\\\\\r\n|\\\\[\n\r\f])*)\'/';$image='"data:image/gif;base64,R

php - pcre.backtrack_limit 的 "unit"是什么?

我遇到一个问题,由于pcre.backtrack_limit,具有复杂正则表达式的preg_replace()会导致错误(PREG_BACKTRACK_LIMIT_ERROR)太低,默认设置为1,000,000。我将它设置为10,000,000,它适用于这个特定的应用程序。我的问题是,回溯限制松散定义的“单位”到底是什么?1,000,000数字是否对应于内存大小?如果不是,这意味着什么?我试图了解在我的环境中对此设置的合理设置。引用preg_replace:http://us3.php.net/manual/en/pcre.configuration.php#ini.pcre.back

php - 哪些字符与 PHP 的 PCRE 中的完全匹配?

manualpage对此保持沉默,尽管用户在其下方发表了评论,其中指出ASCII代码为0x09、0x0A、0x0C的字符,0x0D和0x20,即TAB、LF、FF、CR和SPACE,被识别为“空白”,但没有给出来源。如果PCRE与Perl兼容,显然,这可能不像thisPerldocumentation中解释的那么简单。.事实上,它可能受语言环境的影响,然后开始变得毛茸茸。上下文是我正在尝试替换用于检查纯空格字符串的preg_match调用。 最佳答案 根据PHPdocs:ThespacecharactersareHT(9),LF(1

php - 使用命名模式子例程的 PCRE 正则表达式

我正在试验PHP的PCRE中的命名子模式/“子例程”正则表达式功能,我希望有人可以解释以下奇怪的输出:$re="/(?(DEFINE)(?a))^(?&a)$/x";var_dump(preg_match($re,'a',$match));//(int)1asexpectedvar_dump($match);//Array([0]=>'a')我不明白为什么命名组“a”不在结果中(内容为“a”)。将preg_match更改为preg_match_all会将“a”和“1”放入匹配数据中,但两者都只包含一个空字符串。我真的很喜欢以这种方式编写正则表达式的想法,因为您可以使它们变得非常强大,同

javascript - Javascript 函数中的 PHP (PCRE) 验证

是否有一个现有函数(或者可能有人编写了一些现有代码)来在JS函数中验证传递的文本是有效的PCRE?我疯狂地谷歌搜索,但我能找到的最接近的东西只是“PCRE_JAVASCRIPT_COMPAT”(这是一个PCRE兼容性标志)或关于在PHP和Javascript中验证输入的讨论。我见过的最接近JavascriptREGEX验证的是:try{"".match(regex);returntrue;}catch(e){returnfalse;}这没有考虑JS(ECMA)正则表达式和PHP(PCRE)正则表达式之间的差异-这显然是一个问题,但我还没有找到关于两者之间差异的明确讨论。有什么帮助吗?