假设我们有一些文本和与之匹配的正则表达式。问题:如果我将相同的表达式向后应用于文本(从最后一个字母开始到第一个字母),它是否仍会匹配?
正则表达式----->文本
xereg - ? - > txet
在实践中似乎有效,问题在于理论对一般情况的说法。
答案 0 :(得分:3)
如果您使用Kleene星,则不会 - 如果您反转正则表达式,您将得到无效的正则表达式或匹配不同模式的正则表达式:
ab*
- > *ba
(语法无效)a*b
- > b*a
(第一个匹配aaab
但不匹配abbb
,而第二个匹配bbba
但不匹配baaa
)另一方面,我很确定能够设计一种算法,在给定正则表达式的情况下,生成与反向字符串匹配的正则表达式。以下递归算法应该有效(如果 r 是正则表达式, rev(r)表示与反向字符串匹配的正则表达式):
答案 1 :(得分:0)
一般原因是它不会
例如,正则表达式
ab
将匹配
ab
但不是
ba
你怎么认为一般情况应该是这样?
有正则表达式与反向字符串匹配,以及
[a|b]*
将匹配
ab
和
ba
答案 2 :(得分:0)
regex
和xeger
在文本上产生相同匹配的情况包括:
regex
是一个简单的(原子)模式,是palindrome。例如,abcba
regex
由几个使用commutative函数的原子模式组成(例如or
),并且您不会反转那些单独的原子模式。如果你这样做,那么他们也应该是一个回文。例如,如果您不反转原子组件,则为adef|bd881|cdavr
;如果您反转原子组件,则为[aba|defed]
。答案 3 :(得分:0)
一般来说,我肯定会说“不”,但这实际上只取决于表达式的复杂性。
因为不仅需要反转任何简单(子)表达式,而且如果适用,还需要考虑更复杂的东西,这在任何正则表达式中都不是那么容易“逆转”:重复算子怎么样,懒惰与贪婪,或反向引用和环顾,量词和修饰符...... - 例如在例如this tutorial?
也许如果你有关于这种“逆转”的更具体的例子或问题,可以考虑更合适的答案。