标签: pcre

将PCRE递归正则表达式模式转换为.NET平衡组定义

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风格?

(是的,我知道最好不要使用正则表达式.这只是一个理论问题.)

参考

.net regex pcre recursive-regex balancing-groups

21
推荐指数
2
解决办法
1658
查看次数

RegEx调试

我正在通过两个单独的调试工具调试^(A+)*B一个字符串上的正则表达式AAAC(例如来自rexegg.com):我有权访问:

  1. regex101.com
  2. RegexBuddy v4

以下是结果(左侧的regex101):

工具出口(左边是regex101)

我的问题主要不在于对我来说同样重要的步骤数量,而是回溯的方式.为什么我们看到差异?(regex101使用PCRE lib并且我将RegexBuddy lib设置为相同)

全面的逐步解释对我有利.

regex pcre backtracking

21
推荐指数
2
解决办法
785
查看次数

如何使用PHP preg匹配重音字符?

我想让我的用户不仅可以填写字母和数字,还可以选择"特殊"字母,例如"á","é"等.但是,我不希望他们能够使用符号喜欢"!","@","%"等

有没有办法写一个正则表达式来实现这一目标?(最好不要指定每个特殊字母.)

我现在有:

$reg = '/^[\w\-]*$/';
Run Code Online (Sandbox Code Playgroud)

php regex pcre

20
推荐指数
2
解决办法
1万
查看次数

这种PCRE模式如何检测回文?

这个问题是在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)

php regex pcre palindrome nested-reference

20
推荐指数
1
解决办法
1350
查看次数

如何使用正则表达式将下划线转换为驼峰?

如何使用单个 Java/Perl正则表达式搜索和替换将具有下划线的名称转换为驼峰案例名称?

underscore_variable_name -> underscoreVariableName
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName
_LEADING_UNDERSCORE -> leadingUnderscore
Run Code Online (Sandbox Code Playgroud)

我要求单个正则表达式的原因是我想使用Eclipse或Notepad ++搜索和替换来实现这一点.

regex pcre case-conversion

20
推荐指数
1
解决办法
2万
查看次数

转义字符串以用于正则表达式

可能重复:
是否有一个PHP函数可以在应用之前逃避正则表达式模式?

我想在正则表达式中使用存储在变量中的字符串.跳转字符串以便在(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 regex pcre escaping

19
推荐指数
4
解决办法
2万
查看次数

如何将PHP的eregi更改为preg_match

可能重复:
如何在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)

php email pcre posix-ere

18
推荐指数
2
解决办法
5万
查看次数

[az]是否会匹配PREG/PCRE中的重音字符?

我已经知道\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

php regex ascii pcre

17
推荐指数
3
解决办法
2220
查看次数

Haskell中的PCRE - 什么,在哪里,如何?

我一直在寻找一些关于Haskell正则表达式的文档或教程.HaskellWiki页面上没有有用的信息.它只是给出了一个神秘的信息:

Documentation
Coming soonish.
Run Code Online (Sandbox Code Playgroud)

有一篇简短的博客文章,我发现它非常有用,但它只处理Posix正则表达式,而不是PCRE.

我一直在使用POSIX正则表达式的几个星期,我来,对于我的任务,我需要PCRE的结论.

我的问题是我不知道在Haskell中从哪里开始使用PCRE.我已经下载regex-pcre-builtin了cabal,但我需要一个简单匹配程序例子来帮助我开始.

  • 是否可以实现多行匹配?
  • 我可以用这种格式取回比赛:[(MatchOffset,MatchLength)]
  • 还有哪些其他格式可以让比赛重新开始?

非常感谢您的帮助!

regex pcre haskell

17
推荐指数
4
解决办法
3135
查看次数

XAMPP - MySql - 此版本的PCRE在偏移0处编译时没有UTF支持

我试图在我的电脑上安装一个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或类似的东西.

任何人都可以帮我解决这个问题吗?
提前致谢

regex mysql xampp macos pcre

17
推荐指数
3
解决办法
1万
查看次数