正则表达式三大缺点:难记,难写(容易出错),难读(基本没有可读性)。
写的时候很容易匹配出错,读别人写的表达式也非常困扰。
这个世界上有那么多编程语言,难道没人发明一种更易用的字符匹配方法吗?
1
gimp 2016-01-08 09:35:14 +08:00 2
然后你会发现为了完成类似的功能,最后又都成为了变种的正则表达式
|
2
Moker 2016-01-08 09:41:09 +08:00 2
https://github.com/VerbalExpressions/PHPVerbalExpressions
你是需要这个么?不过最终都和楼上所说的 |
3
xream 2016-01-08 09:46:17 +08:00 2
|
4
amaranthf 2016-01-08 09:46:33 +08:00 1
你所说的难记难写难读其实是一件事情,就是因为使用了很多无法直接理解含义的符号,如^ [] \X 等,另外就是因为使用了很多符号,那么遇到原本的符号就需要转义,会更加的难以阅读。
那么你想怎么做呢? 全部使用同一种符号,比如 ^变成\not() []变成\set()? 或者…… 写个(if cond case1 case2)? 反正我是想象不出什么更好的表达方式。 |
5
smartdie OP @gimp 这点我也理解,就像所有语言,都有个进阶的概念。对于一般匹配需求,能够快速看懂并解决问题是最好的,对于更复杂深入的匹配,需要复杂的手段。而正则表达式是个很容易犯错的东西,即使我用这么久,还是偶尔匹配出错。
|
6
imn1 2016-01-08 09:56:46 +08:00
start-with:"http",no-more-than-one:"s",follow-string:"://",no-more-than-one:"www.",follow-string:"v2ex.com"……
这样好读 |
7
gimp 2016-01-08 10:01:21 +08:00 1
所以不到万不得已,尽量避免使用正则
这类的辅助工具也能减少出错的概率 http://tool.oschina.net/regex http://regexper.com/#%5E%5B1-9%5D%5Cd*%5C.%5Cd*%7C0%5C.%5Cd*%5B1-9%5D%5Cd*%24 |
8
dallaslu 2016-01-08 10:02:18 +08:00
其实多花些功夫,正则表达式没有想象中的难记、难写、难读。
1. 网络上有很多常用正则表达式语句的资源,正则语法也是一小篇手册就能说清的; 2. 先不处理过多的判断逻辑,逐步完善,写起来也应该是行云流水; 3. 对正则了解得稍深入一些的话,就知道可以在表达式里面写注释、组名,甚至还有一些第三方的图形解析正则的工具,可以帮助理解正则中的复杂的业务判断逻辑。 |
9
shyling 2016-01-08 10:13:41 +08:00 via iPad
不觉得正则难记难写难读啊。。
|
10
swsh007 2016-01-08 10:16:13 +08:00
没觉得啊,好用就可以了。
|
11
ethego 2016-01-08 10:21:04 +08:00
正则我觉得是最好读的,简洁明了,只要你知道它的规则,根本没有歧义
|
12
jiyinyiyong 2016-01-08 10:26:40 +08:00 1
听说 Perl6 重新发明了正则... 不知道有没有变好用点
|
13
shangjiyu 2016-01-08 10:56:41 +08:00 via iPhone
有语意化的裤
|
14
babyhome 2016-01-08 11:00:43 +08:00 via iPhone 1
说到底还是功力不够
|
15
Perry 2016-01-08 11:06:45 +08:00
如果要易懂,那么必定会 trade off 简洁性,写一个规则可能会用上几行代码。
|
16
zhouyg 2016-01-08 11:08:25 +08:00
最后发现,还是正则最方便,最简洁。
|
18
gamexg 2016-01-08 11:20:30 +08:00
同意 1L ,实现相同的痛能最后又会变得和正则一样复杂。
理解后正则难度也不大,就是一段时间不用就忘个差不多,又需要看手册。 配合好工具写正则、读正则都很简单。楼上有网页版的正则工具,不过我一般用 Regex Match Tracer ,国产的本地免费正则软件。 |
19
gamexg 2016-01-08 11:22:56 +08:00
|
20
slixurd 2016-01-08 11:29:56 +08:00
正则表达式本质上是一个 DFA ,想要能够描述和匹配所有的字符串,最后还是会变成正则。
语言层面能做简单的语法糖,不过其实对于已经被广泛接受的正则,并没有什么优势。 |
21
bitbegin 2016-01-08 11:31:51 +08:00
都没人提 [red][www.red-lang.org] parse 么(或者 rebol parse )?
parse "http://www.v2ex.com" rule: ["http" opt #"s" "://" opt "www." "v2ex.com"] 感觉这个用着很好用。。。 |
22
zhangbohun 2016-01-08 11:46:58 +08:00
正则表达式的语法太抽象,因为字符越少越方便写,但是语法的逻辑还是很简单的。
|
23
jin5354 2016-01-08 11:56:43 +08:00
正则已经足够简单明了了
你想要易读,反正无非是上语法糖,最终效果也许还不如之前的 |
24
polythene 2016-01-08 13:04:36 +08:00
|
25
kn007 2016-01-08 13:29:04 +08:00
正则其实算是简单明了的了。
无论那种方式,最后到最后其实都是正则。。。 或许你需要类似这种东东来帮忙? https://github.com/VerbalExpressions/PHPVerbalExpressions |
26
Mutoo 2016-01-08 13:48:39 +08:00
正则表达式实质就是状态机的文本描述。再搞一套状态机,到头来还是正则表达式的方言而已。
|
27
em70 2016-01-08 13:55:50 +08:00
正则的问题在于总想一句话解决问题,这样必须要以复杂性为代价
其实文本分析只需要 2 个函数 1.提取两个指定字符串之间的内容 2.提取全文里两个指定字符串之间的所有内容 就足够分析任意结构的文本了 |
28
xmbaozi 2016-01-08 19:17:04 +08:00
|