我想知道是否有人会想要使用正则表达式来解决一个问题,这个问题也很容易写成没有使用正则表达式。
我因为this question而想到了这个想法。
这个问题相当简单,答案分为两类,一类用正则表达式解决,另一类只用其他简单操作。
问题摘要:
删除网址路径的第一部分(例如:String path = "/folder1/folder2/folder3/"
)。
2解决方案:
//With regex
String newPathRegex = path.replaceAll("^/[^/]*", "");
//Without regex
String newPathNoRegex = path.substring(path.indexOf('/', 1));
我个人认为没有 RegEx解决方案更容易阅读,但我不是正则表达式方面的专家。
所以问题归结为:你应该避免在这个简单的情况下使用正则表达式吗? RegEx解决方案有更好的性能吗?
答案 0 :(得分:1)
使用正则表达式有用的几个原因:
正则表达式在 O(n log n)中以表达式的大小运行, O(n)表示字符串的长度。因此,时间复杂性保证非常合理,而自定义程序有时可能会被严格执行。在(伪) - 线性时间运行的大多数程序被认为是非常快。尽管可以构造量身定制的算法,该算法的性能优于正则表达式可以执行的每个任务的正则表达式,但人类通常不容易这样做。因此,正则表达式可以保证构建足够快的算法。
正则表达式上的大多数属性都是可判定的:两个正则表达式是否确定同一组字符串等是可判定的。因此,在它上面定义了一个完整的代数。程序中的所有(非平凡的,语言不变的)属性都是不可判定的:这是Rice's theorem的结果,因此您无法证明两个程序将执行相同的操作(等效) ),这对于正则表达式来说是一项简单的任务。
修改。也许您想要删除路径的第一部分,但前提是它不是..
。通常,对正则表达式的修改往往很容易,而修改程序可能会破坏代码的大小。
最有问题的部分是并非所有程序员都熟悉正则表达式,并且他们有点神秘:语义有时候有点难以猜测。此外,pumping lemma状态并非每个问题都可以转换为正则表达式(问题)。