c# - 查找特定正则表达式匹配的字符串的算法

标签 c# regex

给定一个正则表达式模式,我试图找到一个匹配它的字符串。类似于 Django 如何反转它们,但在 C# 中。是否有任何预制的 C# 库可以执行此操作?


编辑:将此项目移动到 Google code很快。

当前测试结果

^abc$                     > abc                  : pass
\Aa                       > a                    : pass
z\Z                       > z                    : pass
z\z                       > z                    : pass
z\z                       > z                    : pass
\G\(a\)                   > \(a\)                : pass
ab\b                      > ab                   : pass
a\Bb                      > ab                   : pass
\a                        >                     : pass
[\b]                      >                    : pass
\t                        > \t                   : pass
\r                        > \r                   : pass
\v                        > ♂                    : pass
\f                        > \f                   : pass
\n                        > \n                   : pass
\e                        > ←                    : pass
\141                      > a                    : pass
\x61                      > a                    : pass
\cC                       > ♥                    : pass
\u0061                    > a                    : pass
\\                        > \\                   : pass
[abc]                     > a                    : pass
[^abc]                    > î                    : pass
[a-z]                     > a                    : pass
.                         > p                    : pass
\w                        > W                    : pass
\W                        > ☻                    : pass
\s                        > \n                   : pass
\S                        > b                    : pass
\d                        > 4                    : pass
\D                        > G                    : pass
(a)\1                     > aa                   : pass
(?<n>a)\k<n>              > aa                   : pass
(?<n>a)\1                 > aa                   : pass
(a)(?<n>b)\1\2            > abab                 : pass
(?<n>a)(b)\1\2            > abba                 : pass
(a(b))\1\2                > ababb                : pass
(a(b)(c(d)))\1\2\3\4      > abcdabcdbcdd         : pass
a\0                       > a                    : pass
ab*                       > a                    : pass
ab+                       > abbb                 : pass
ab?                       > a                    : pass
ab{2}                     > abb                  : pass
ab{2,}                    > abbbbbbbbb           : pass
ab{2,3}                   > abb                  : pass
ab*?                      > abb                  : pass
ab+?                      > abbbbb               : pass
ab??                      > a                    : pass
ab{2}?                    > abb                  : pass
ab{2,}?                   > abbbbbbbbb           : pass
ab{2,3}?                  > abbb                 : pass
/users(?:/(?<id>\d+))?    > /users/77            : pass
Passed 52/52 tests.

最佳答案

参见示例 Using Regex to generate Strings rather than match them

你也可以看看http://en.wikipedia.org/wiki/Deterministic_finite-state_machine特别是在“接受和生成模式”部分。

正如其他人指出的那样,您需要根据正则表达式创建 DFA,然后使用此 DFA 生成字符串。

要将正则表达式转换为 DFA,请先生成 NFA(参见示例 http://lambda.uta.edu/cse5317/spring01/notes/node9.html),然后将 NFA 转换为 DFA。

我看到的最简单的方法是为此使用解析器生成器程序。我认为 Django 不会这样做。

希望这对您有所帮助。

关于c# - 查找特定正则表达式匹配的字符串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298541/

相关文章:

c# - Visual Studio 2015、Nuget 和 “same key has already been added.”

c# - 使用扩展方法从 C# 中的 List<T> 中删除某种类型的对象?

c# - 哪些开源 ASP.Net 项目值得学习?

python - 为什么我的 Python 正则表达式 anchor 无法在多行字符串上正常工作?

javascript - 如何检查字符串是否与javascript中的正则表达式匹配?

java 文件名过滤模式

C# PDF 文档中的尖锐位置

c# - 参数 '@id' ,向数据库插入数据时未提供该参数

java - 如何在正则表达式中将十进制值与逗号和括号匹配?

python - 使用正则表达式在 python 中验证 ip 地址