PCRE具有称为递归模式的功能,可用于匹配嵌套的子组.例如,考虑"语法"
Q -> \w | '[' A ';' Q* ','? Q* ']' | '<' A '>'
A -> (Q | ',')*
// to match ^A$.
Run Code Online (Sandbox Code Playgroud)
它可以在具有模式的PCRE中完成
^((?:,|(\w|\[(?1);(?2)*,?(?2)*\]|<(?1)>))*)$
Run Code Online (Sandbox Code Playgroud)
(示例测试用例:http://www.ideone.com/L4lHE)
abcdefg abc,def,ghi abc,,,def ,,,,,, [abc;] [a,bc;] sss[abc;d] as[abc;d,e] [abc;d,e][fgh;j,k]
<abc> [<a>b;<c,d>,<e,f>] <a,b,c> <a,bb,c> <,,,> <> <><> <>,<> a<<<<>>><a>> <<<<<>>>><><<<>>>>
<z>[a;b] <z[a;b]> [[;];] [,;,] [;[;]] [<[;]>;<[;][;,<[;,]>]>]
<a bc> <abc<de> [a<b;c>;d,e] [a] <<<<<>>>><><<<>>>>> <<<<<>>>><><<<>>> [abc;def;] [[;],] [;,,] [abc;d,e,f]
[<[;]>;<[;][;,<[;,]>]]> <z[a;b>]
.NET中没有递归模式.相反,它为基于堆栈的操作提供了平衡组,以匹配简单的嵌套模式.
是否可以将上述PCRE模式转换为.NET Regex风格?
(是的,我知道最好不要使用正则表达式.这只是一个理论问题.)
我正在通过两个单独的调试工具调试^(A+)*B一个字符串上的正则表达式AAAC(例如来自rexegg.com):我有权访问:
以下是结果(左侧的regex101):
我的问题主要不在于对我来说同样重要的步骤数量,而是回溯的方式.为什么我们看到差异?(regex101使用PCRE lib并且我将RegexBuddy lib设置为相同)
全面的逐步解释对我有利.
我想让我的用户不仅可以填写字母和数字,还可以选择"特殊"字母,例如"á","é"等.但是,我不希望他们能够使用符号喜欢"!","@","%"等
有没有办法写一个正则表达式来实现这一目标?(最好不要指定每个特殊字母.)
我现在有:
$reg = '/^[\w\-]*$/';
Run Code Online (Sandbox Code Playgroud) 这个问题是在PCRE模式中使用前瞻,嵌套引用和条件来匹配所有回文的教育演示,包括PCRE手册页中给出的递归模式无法匹配的回文.
在PHP代码段中检查此PCRE模式:
$palindrome = '/(?x)
^
(?:
(.) (?=
.*
(
\1
(?(2) \2 | )
)
$
)
)*
.?
\2?
$
/';
Run Code Online (Sandbox Code Playgroud)
这种模式似乎可以检测到回文,如本测试案例所示(另见ideone.com):
$tests = array(
# palindromes
'',
'a',
'aa',
'aaa',
'aba',
'aaaa',
'abba',
'aaaaa',
'abcba',
'ababa',
# non-palindromes
'aab',
'abab',
'xyz',
);
foreach ($tests as $test) {
echo sprintf("%s '%s'\n", preg_match($palindrome, $test), $test);
}
Run Code Online (Sandbox Code Playgroud)
那么这种模式如何运作?
此模式使用嵌套引用,这是此Java正则表达式如何检测回文中使用的类似技术?,但与Java模式不同,没有外观(但确实使用了条件).
另请注意,PCRE 手册页提供了一个递归模式以匹配一些回文:
# the recursive pattern to detect …Run Code Online (Sandbox Code Playgroud) 如何使用单个 Java/Perl正则表达式搜索和替换将具有下划线的名称转换为驼峰案例名称?
underscore_variable_name -> underscoreVariableName
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName
_LEADING_UNDERSCORE -> leadingUnderscore
Run Code Online (Sandbox Code Playgroud)
我要求单个正则表达式的原因是我想使用Eclipse或Notepad ++搜索和替换来实现这一点.
我想在正则表达式中使用存储在变量中的字符串.跳转字符串以便在(PCRE)正则表达式中使用的最佳方法(在PHP中)是什么?
例如,
$text = 'm/z'; // this is the text I want to use as part of my regular expression
$text_regexp = '#' . $text . '#i'; // this is my regular expression
Run Code Online (Sandbox Code Playgroud)
会给
$text_regexp = '#m/z#i';
Run Code Online (Sandbox Code Playgroud)
但我想要以下正则表达式:
$text_regexp = '#m\/z#i';
Run Code Online (Sandbox Code Playgroud)
这是一个人为的例子,但我想简单说明这一点.
可能重复:
如何在PHP中将ereg表达式转换为preg?
我需要帮助,下面是一个很小的非常基本的正则表达式,有点验证一个电子邮件,我确实认为它不是最好的工作,但我的需求现在还可以.
它目前使用PHP的eregi函数,php.net说它现在是折旧函数,我应该使用preg_match,只需用preg_match替换erei不起作用,有人可以告诉我如何让它工作吗?
function validate_email($email) {
if (!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
echo 'bad email';
} else {
echo 'good email';
}
}
function validate_email($email) {
if (!preg_match("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
echo 'bad email';
} else {
echo 'good email';
}
}
Run Code Online (Sandbox Code Playgroud) 我已经知道\w在PCRE中(特别是PHP的实现)有时可以匹配一些非ASCII字符,具体取决于系统的语言环境,但是呢[a-z]?
我不这么认为,但我注意到Drupal的核心文件之一中的这些行(包括/ theme.inc,简化):
// To avoid illegal characters in the class,
// we're removing everything disallowed. We are not using 'a-z' as that might leave
// in certain international characters (e.g. German umlauts).
$body_classes[] = preg_replace('![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s', '', $class);
Run Code Online (Sandbox Code Playgroud)
这是真的吗,还是只是有人[a-z]混淆了\w?
我一直在寻找一些关于Haskell正则表达式的文档或教程.HaskellWiki页面上没有有用的信息.它只是给出了一个神秘的信息:
Documentation
Coming soonish.
Run Code Online (Sandbox Code Playgroud)
有一篇简短的博客文章,我发现它非常有用,但它只处理Posix正则表达式,而不是PCRE.
我一直在使用POSIX正则表达式的几个星期,我来,对于我的任务,我需要PCRE的结论.
我的问题是我不知道在Haskell中从哪里开始使用PCRE.我已经下载regex-pcre-builtin了cabal,但我需要一个简单匹配程序的例子来帮助我开始.
[(MatchOffset,MatchLength)]?非常感谢您的帮助!
我试图在我的电脑上安装一个wordpress网站(它是Mac 10.11),但是我收到了这个错误:
"This version of PCRE is compled without PCRE support at offset 0 from regexp"
这个问题与此查询有关:
DELETE FROM wp_options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'
我已经在Google上搜索了它,甚至在这里,但我发现的一切都没有帮助我解决这个问题.我也尝试重新安装XAMPP,但它仍然是一样的.即使我尝试从我的phpMyAdmin面板执行包含REGEXP的查询,我也遇到了同样的问题.
很多解决方案都是通过使用compile命令来讨论重新编译apache或类似的东西.
任何人都可以帮我解决这个问题吗?
提前致谢