Regex 使用正则表达式进行简单操作
我想知道是否有人想用正则表达式来解决一个问题,而这个问题也可以在不使用正则表达式的情况下轻松编写 我有这个想法是因为 这个问题相当简单,答案分为两类,一类是用正则表达式解决的,另一类是用其他简单运算解决的 问题摘要:Regex 使用正则表达式进行简单操作,regex,code-readability,Regex,Code Readability,我想知道是否有人想用正则表达式来解决一个问题,而这个问题也可以在不使用正则表达式的情况下轻松编写 我有这个想法是因为 这个问题相当简单,答案分为两类,一类是用正则表达式解决的,另一类是用其他简单运算解决的 问题摘要:删除url路径的第一部分(例如:String path=“/folder1/folder2/folder3/”) 两种解决方案: //With regex String newPathRegex = path.replaceAll("^/[^/]*", ""); //Without
删除url路径的第一部分(例如:
String path=“/folder1/folder2/folder3/”
)两种解决方案:
//With regex
String newPathRegex = path.replaceAll("^/[^/]*", "");
//Without regex
String newPathNoRegex = path.substring(path.indexOf('/', 1));
我个人认为,noRegEx解决方案更容易阅读,但我不是正则表达式方面的专家
所以问题归结为:在像这样简单的情况下,你应该避免使用正则表达式吗?正则表达式解决方案是否有更好的性能?使用正则表达式非常有用的几个原因:
- 正则表达式以表达式大小的O(n logn)和字符串长度的O(n)运行。因此,时间复杂度保证是非常合理的,而定制程序有时可能执行得很糟糕。大多数以(伪)线性时间运行的程序被认为是非常快的。尽管可以为正则表达式执行的每项任务构造性能优于正则表达式的定制算法,但一般来说,人类不容易做到这一点。因此,正则表达式可以保证构造足够快的算法
- 正则表达式上的大多数属性都是可判定的:两个正则表达式是否确定同一组字符串等都是可判定的。因此,在它上面定义了一个完整的代数。程序上的所有(非平凡的、语言不变的)属性都是不可判定的:这是的结果,所以一般来说,您无法证明两个程序将做相同的事情(是等价的),而对于正则表达式来说,这是一项简单的任务
- 可修改的。也许您想删除路径的第一部分,但前提是它不是
。一般来说,对正则表达式的修改往往很容易,而修改程序可能会增大代码的大小。
最有问题的是,并非所有程序员都熟悉正则表达式,而且它们有点神秘:语义有时有点难以猜测。此外,并非所有问题都可以转化为正则表达式(问题)。谢谢您的回答!因此(至少)对于我问题中使用的示例,使用正则表达式是一个好主意(imo,特别是因为您提到的“可修改性”点),但由于其可读性问题,还应添加一条注释,解释该表达式将实现什么功能,在这种情况下,您还可以使用
.replaceFirst
进一步增强它。一般来说,一些注释是一个好主意(或者将其封装在定义目的的方法中)。