我有一段正则表达式,我一直在 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
- Java 没有像 Perl 和 javascript 那样的内联正则表达式。您将需要使用Pattern & Matcher用于正则表达式支持的 API。
- 由于缺少内联正则表达式,模式修饰符是通过 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/