在基本运算中以正则表达式表示^和$

时间:2019-05-31 07:32:40

标签: regex

我读过一本书,其中指出正则表达式中的所有基本运算都为concatatenationor(|)closure(*)parenthesis,以覆盖默认优先级。其他所有操作只是一个或多个基本操作的快捷方式。

例如,(AB)+快捷方式将扩展为(AB)(AB)*,快捷方式(AB)?将扩展为(ε | AB),其中ε为空字符串。首先,我查找了ASCII表,但不确定将哪个字符指定为空字符串。是ASCII 0吗?

我想弄清楚如何在基本操作中像^$表达式中那样表达快捷键^ABAB$,但是我不确定这该怎么做。您能帮我了解一下这是如何体现的吗?

2 个答案:

答案 0 :(得分:7)

正则表达式(在数学中的定义方式)实际上是字符串生成器,而不是搜索模式。它们用作特定类的字符串集的便捷表示法。 (这些集合可以包含无限数量的字符串,因此枚举所有元素是不切实际的。)

在编程环境中,正则表达式通常用作灵活的搜索模式。用数学术语来说,“ 找到目标字符串S的子字符串,它是由正则表达式R 生成的集合的元素”。此子字符串搜索不属于正则表达式;就像实际的正则表达式引擎周围存在一个循环,试图将每个可能的子字符串与正则表达式进行匹配(并在找到匹配项时停止)。

在基本的正则表达式中,就像在模式之前和之后添加了一个隐式.*一样。以这种方式查看时,^$只是防止在正则表达式的开头/结尾添加.*

顺便说一句,正则表达式(通常在编程中使用)在数学意义上实际上不是“正则”的。也就是说,有许多构造无法转化为上述基本操作。这些包括后向引用(\1\2,...),单词边界(\b\<\>),向前/向后看断言((?= )(?! )(?<= )(?<! ))等。

对于ε:它没有字符代码,因为空字符串是字符串,而不是字符。具体来说,字符串是一个字符序列,空字符串不包含任何字符。

答案 1 :(得分:1)

^AB可以表示为(εAB),即空字符串后跟AB,而AB$可以表示为(ABε),即AB后跟空字符串。

空字符串实际上定义为'',它是长度为0的字符串,因此在ASCII表中没有任何值。但是,C语言用ASCII NULL字符终止所有字符串,尽管这并未计入字符串的长度,但在分配内存时仍必须考虑该字符串。

编辑 正如@melpomene在其评论中指出的那样,εAB等效于AB,这使得上述内容无效。与一所工作学院谈过之后,我不再确定如何做到这一点,甚至不可能。希望有人能提出答案。