正则表达式字符文字与上下文

时间:2013-11-21 02:49:26

标签: regex lexer

嗨,我正在写一个基于正则表达式的简单词法分析器。

一个词法分析器是CHARLITERAL,它是用单引号括起的任何字符,即:

'A'
'.'

甚至

'''

是允许的。

唯一不允许的情况是这样的情况

somerandomcontext'('"')

在这种情况下,只有括号内的CHARLITERAL有效,它应该忽略第一个单引号。我正在寻找一个正则表达式,当我将它提供给上面的字符串时,它返回'"'而不是'('。 显然'[^\n\r]'没有削减它。不幸的是,我对正则表达式中的断言不太熟悉。

1 个答案:

答案 0 :(得分:0)

一种方法是使用负前瞻断言。以下正则表达式应该按照您描述的方式运行。

'(?![()]).'

此表达式首先查找撇号,然后开始负向前瞻。负向前瞻说明下一个字符不能是开括号或闭括号。如果是,则整个表达式失败。如果下一个字符不是括号,那么它匹配下一个字符实际上是 (现在保证不是一个parentehsis) < / sup>,然后是撇号。

给定以下输入字符串,此表达式将返回列出的匹配项。即使潜在的文字之间没有空格,它也应该保持稳健。

Input:    
'A' '.' '''somerandomcontext'('"')'B''C''''''' sadfasdf'(')'L')

Matches:
1: 'A'
2: '.'
3: '''
4: '"'
5: 'B'
6: 'C'
7: '''
8: '''
9: 'L'

http://www.regular-expressions.info/lookaround.html