Regex 如何消除正则表达式中的冗余?

Regex 如何消除正则表达式中的冗余?,regex,oracle,plsql,Regex,Oracle,Plsql,我用PL/SQL编写了一个正则表达式来验证自定义URL: '^((http|https):\/\/)?(www[0-9]\.)?(([A-Za-z0-9_-])+\.{1})+([A-Za-z]{2,4}|\' || START_CHAR || '[^' || START_CHAR || END_CHAR || ']+\' || END_CHAR || ')(\/([A-Za-z0-9_-]|\' || START_CHAR || '[^' || START_CHAR || END_CHAR |

我用PL/SQL编写了一个正则表达式来验证自定义URL:

'^((http|https):\/\/)?(www[0-9]\.)?(([A-Za-z0-9_-])+\.{1})+([A-Za-z]{2,4}|\'
|| START_CHAR || '[^' || START_CHAR || END_CHAR || ']+\' || END_CHAR ||
')(\/([A-Za-z0-9_-]|\' || START_CHAR || '[^' || START_CHAR || END_CHAR ||
']+\' || END_CHAR || ')+)*(\/)?$'
START\u CHAR
END\u CHAR
是两个不同的常量字符。在我上面的正则表达式中,
START\u CHAR
重复(四次)


如何使用单个
START\u CHAR
END\u CHAR
重写它?

您不需要这样做。正则表达式被编译成NFA,也许DFA已经压缩了所有的重复。保持清晰,保持简单,让计算机来完成繁重的工作。

您已将其标记为Java,但您的代码似乎使用了SQL样式的字符串连接。你的标题提到了“优化”正则表达式,但你的身体提出了一个完全不同的要求,希望消除对变量的重复提及。请改进您的帖子,以便清楚您的实际正则表达式是什么,它实际上是什么类型的正则表达式,以及您希望看到的更改。@ruakh感谢您为我反馈我犯的那个大错误。现在我编辑我的问题是的,编译器做了。但我的正则表达式不清楚重复字符。所以请澄清它,但不要将其与“优化”混淆。这没什么区别。