gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:25:42 25 4
gpt4 key购买 nike

给定一个正则表达式模式,我试图找到一个匹配它的字符串。类似于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com