【问题标题】:How to eliminate redundant in the regular expression?如何消除正则表达式中的冗余?
【发布时间】:2014-05-05 06:10:18
【问题描述】:

我在 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_CHAREND_CHAR 是两个不同的常量字符。在我上面的正则表达式中,START_CHAR 重复(四次)。

如何用单个START_CHAREND_CHAR 重写它?

【问题讨论】:

  • 您已将其标记为 Java,但您的代码看起来像是在使用 SQL 样式的字符串连接。您的标题谈到“优化”正则表达式,但您的身体提出了完全不同的要求,希望消除对变量的多余提及。请改进您的帖子,以便清楚您的实际正则表达式是什么,它实际上是什么类型的正则表达式,以及您真正希望看到的更改。
  • @ruakh 感谢您向我反馈我犯的那个大错误。现在我编辑我的问题

标签: regex oracle plsql


【解决方案1】:

你不需要。正则表达式被编译为 NFA 和可能已经压缩所有重复的 DFA。保持清晰,保持简单,让计算机完成繁重的工作。

【讨论】:

  • 是的,编译器做到了。但我的正则表达式不清楚重复字符。
  • 所以澄清它,但不要将它与“优化”混淆。没有任何区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
相关资源
最近更新 更多