【问题标题】:Regex help needed for matching identifiers with spaces将标识符与空格匹配所需的正则表达式帮助
【发布时间】:2015-11-25 22:16:12
【问题描述】:

我正在开发一个使用 flex/bison 的解析器来解析线性时序逻辑公式。我也在使用相同的扫描仪来解析这些公式的输入。

我正在使用这个正则表达式来扫描标识符名称:

[a-zA-Z][a-z \tA-Z0-9_-]*[a-zA-Z0-9]

标识符名称在输入文件中由逗号分隔,并由公式中的运算符/特殊字符包围,程序可以很好地处理它们。在标识符名称中包含空格本身并不是问题。如果可以选择,我不会允许空格,但是输入文件是由另一个程序生成的,所以我无法更改。

这个正则表达式可以正常工作,但是它不允许使用我想要的单个字符标识符。

基本上,我需要一个正则表达式来匹配单个字符、字符之间带有可选空格的字母数字字符串,并且不匹配任何前导或尾随空格。

希望我的措辞足够清晰,您可以理解。

谢谢!

【问题讨论】:

  • 试试[a-zA-Z]([a-z \tA-Z0-9_-]*[a-zA-Z0-9])?,它将使[a-z \tA-Z0-9_-]*[a-zA-Z0-9]部分成为可选的。
  • 我们可以看到需要匹配的示例吗?我假设任何以逗号分隔的内容?
  • @stribizhev 是的,这行得通,谢谢 :)
  • @penne12 不,它们在公式文件中不是逗号分隔的,正则表达式也需要处理。 stribizhev 已经想通了

标签: regex


【解决方案1】:

试试

[^,]+

匹配任何非逗号字符 1 次或多次。您可以随时修剪空白。

说明:

(来自regexper.com

【讨论】:

    【解决方案2】:

    使用

    [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

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多