我正在使用flex / bison解析线性时态逻辑公式的解析器。我也使用相同的扫描程序来解析这些公式的输入。
我正在使用此正则表达式扫描标识符名称:
[a-zA-Z][a-z \tA-Z0-9_-]*[a-zA-Z0-9]
标识符名称由输入文件中的逗号分隔,并由公式中的运算符/特殊字符包围,程序处理它们很好。在标识符名称中包含空格本身并不是问题。如果我有选择的话,我不会允许空格,但是输入文件是由另一个程序生成的,所以我不能改变它。
这个正则表达式工作正常,但它不允许单个字符标识符,我想拥有。
基本上,我需要一个匹配单个字符的正则表达式,字母之间带有可选空格的字母数字字符串,并且不匹配任何前导或尾随空格。
希望我的措辞足够清楚,让你明白。
谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
使用
[a-zA-Z]([a-z \tA-Z0-9_-]*[a-zA-Z0-9])?
(...)?
会使[a-z \tA-Z0-9_-]*[a-zA-Z0-9]
部分成为可选项,因为?
贪婪量词与上一个子模式的1或0次匹配相匹配。
请参阅regex demo