Select 文件路径中的文件名:无效的 perl 运算符:(?=

Select filename from file path : invalid perl operator: (?=

我正在 BigQuery 上查询 github。我正在尝试使用以下正则表达式从给定文件路径获取文件名,即:给定 /src/components/App.vue 它应该 return App:

SELECT regexp_extract(f.path, r'[A-Za-z0-9_\-\.]+?(?=\.)') as filename

这给出了问题标题中所述的错误。有没有我可以用来实现我需要的解决方法?

试试下面的方法

SELECT f.path, regexp_extract(f.path, r'/([^/.]+).[^.]*$') as filename    

如果应用于您问题中的示例 - 输出为

使用

SELECT regexp_extract(f.path, r'([A-Za-z0-9_-]+?)[.]') as filename

参见regex proof

解释

--------------------------------------------------------------------------------
  (                        group and capture to :
--------------------------------------------------------------------------------
    [A-Za-z0-9_-]+?          any character of: 'A' to 'Z', 'a' to
                             'z', '0' to '9', '_', '-' (1 or more
                             times (matching the least amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of 
--------------------------------------------------------------------------------
  [.]                      any character of: '.'