我读过一本书,其中指出正则表达式中的所有基本运算都为concatatenation
,or(|)
,closure(*)
和parenthesis
,以覆盖默认优先级。其他所有操作只是一个或多个基本操作的快捷方式。
例如,(AB)+
快捷方式将扩展为(AB)(AB)*
,快捷方式(AB)?
将扩展为(ε | AB)
,其中ε
为空字符串。首先,我查找了ASCII表,但不确定将哪个字符指定为空字符串。是ASCII 0
吗?
我想弄清楚如何在基本操作中像^
或$
表达式中那样表达快捷键^AB
和AB$
,但是我不确定这该怎么做。您能帮我了解一下这是如何体现的吗?
答案 0 :(得分:7)
正则表达式(在数学中的定义方式)实际上是字符串生成器,而不是搜索模式。它们用作特定类的字符串集的便捷表示法。 (这些集合可以包含无限数量的字符串,因此枚举所有元素是不切实际的。)
在编程环境中,正则表达式通常用作灵活的搜索模式。用数学术语来说,“ 找到目标字符串S的子字符串,它是由正则表达式R 生成的集合的元素”。此子字符串搜索不属于正则表达式;就像实际的正则表达式引擎周围存在一个循环,试图将每个可能的子字符串与正则表达式进行匹配(并在找到匹配项时停止)。
在基本的正则表达式中,就像在模式之前和之后添加了一个隐式.*
一样。以这种方式查看时,^
和$
只是防止在正则表达式的开头/结尾添加.*
。
\1
,\2
,...),单词边界(\b
,\<
,\>
),向前/向后看断言((?= )
,(?! )
,(?<= )
,(?<! )
)等。
对于ε:它没有字符代码,因为空字符串是字符串,而不是字符。具体来说,字符串是一个字符序列,空字符串不包含任何字符。
答案 1 :(得分:1)
^AB
可以表示为(εAB)
,即空字符串后跟AB,而AB$
可以表示为(ABε)
,即AB后跟空字符串。
空字符串实际上定义为''
,它是长度为0的字符串,因此在ASCII表中没有任何值。但是,C语言用ASCII NULL字符终止所有字符串,尽管这并未计入字符串的长度,但在分配内存时仍必须考虑该字符串。
编辑 正如@melpomene在其评论中指出的那样,εAB等效于AB,这使得上述内容无效。与一所工作学院谈过之后,我不再确定如何做到这一点,甚至不可能。希望有人能提出答案。