java - 将 perl 正则表达式转换为 Java

标签 java regex perl

我有一段正则表达式,我一直在 Perl 中使用它来解析包含 Oracle 数据库中每个存储过程的大型文本文件。它看起来像这样:

/create\s+(proc(edure)?|function)\s+\[*(dbo)?\]*\.*\[*(\w+)/i

虽然我对 Perl 不太熟悉,所以最好将其转换为 Java。我尝试通过一些转换器运行它,它会产生:

"/create\\s+(proc(edure)?|function)\\s+\\[*(dbo)?\\]*\\.*\\[*(\\w+)/i"

但是,这似乎与任何正确的输入都不匹配。任何人都可以给我一些关于将其正确转换为 Java 的指示吗?

示例数据:

SET QUOTED_IDENTIFIER ON 
GO
CREATE PROCEDURE AddNewTc                       

@TCN NVARCHAR(100),                
@TCM NTEXT,                
@TCOLE IMAGE = NULL,                
@BYSPID INT = 0,     

仅应匹配“CREATE PROCEDURE”行。

最佳答案

转换器工作得很好,但您需要更改一些东西。

/create\\s+(proc(edure)?|function)\\s+\\[*(dbo)?\\]*\\.*\\[*(\\w+)/i
  1. Java 没有像 Perl 和 javascript 那样的内联正则表达式。您将需要使用Pattern & Matcher用于正则表达式支持的 API。
  2. 由于缺少内联正则表达式,模式修饰符是通过 flags 单独完成的.

应用步骤 1(删除前置的 / 和附加的 /)和步骤 2(将 /i 替换为 Pattern.CASE_INSENSITIVE)你会得到类似的东西:

 Pattern p = Pattern.compile("create\\s+(proc(edure)?|function)\\s+\\[*(dbo)?\\]*\\.*\\[*(\\w+)", Pattern.CASE_INSENSITIVE);
 boolean matches = p.matcher(str).matches();

关于java - 将 perl 正则表达式转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626909/

相关文章:

java - 没有适用于桌面 Java 的 Adob​​e AIR native 扩展的替代方案

java - 如何访问 jpql 从托管 bean 中的 ejb 返回的集合

java - 如何使用 java 库在 google Sheets api 上设置自动换行策略

perl - 如何针对 POE EasyDBI 编写测试?

regex - perl 解析格式错误的括号文本

java - 使用 XPath 查询 XML 时始终为空

Java正则表达式 - 按组搜索字符串

python /正则表达式 : Split string if a line does contain a certain special character

python - 正则表达式选择整行

python - 谁的正则表达式更快? python 或 perl