嗨,我正在写一个基于正则表达式的简单词法分析器。
一个词法分析器是CHARLITERAL,它是用单引号括起的任何字符,即:
'A'
'.'
甚至
'''
是允许的。
唯一不允许的情况是这样的情况
somerandomcontext'('"')
在这种情况下,只有括号内的CHARLITERAL有效,它应该忽略第一个单引号。我正在寻找一个正则表达式,当我将它提供给上面的字符串时,它返回'"'
而不是'('
。
显然'[^\n\r]'
没有削减它。不幸的是,我对正则表达式中的断言不太熟悉。
答案 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'