Mic*_*Fox 1 regex perl pcre julia
1xxx captures x
2xxx captures xx
3xxx captures xxx
Run Code Online (Sandbox Code Playgroud)
我想也许这个简单的模式可行:
(\d)(.{\1})
Run Code Online (Sandbox Code Playgroud)
但不是.
我知道在Perl中这很容易,但我在Julia中使用PCRE,这意味着很难嵌入代码来动态更改表达式.
请注意,正则表达式通常在执行之前编译到状态机,并且不会被天真地解释.
从技术上讲,(其中n是数字,X是包含所有字符的规则)不是常规语言.它不是一种无上下文的语言,甚至不是一种 上下文敏感的语言!(参见乔姆斯基层次结构).虽然PCRE正则表达式可以匹配所有所有无上下文的语言(如果适当地表达),但引擎只能匹配非常有限的上下文敏感语言子集.我们手上有一个很大的问题,既不能用正则表达式解决,也不能用所有PCRE扩展的正则表达式来解决.n Xn
这里的解决方案通常是在尝试解析某些输入时分离标记化,解析和语义验证.这里:
显然,如果没有实现回溯或类似的策略,这在特定情况下不会起作用,所以我们必须自己编写一个可以处理输入的解析器:
substr函数).正则表达式很棒,但它们根本不是解决每个问题的正确工具.有时,自己编写程序更容易.