举个例子,假如有一个文本里面的内容是严谨的数据结构,可能是 json 、 xml ……也可能是其他的配置格式。如果对其操作的话,有没有必要完全模拟这种结构来写一个相对应的解析程序?如果使用一些技巧(如正则表达式)来操作的话,不仅可读性强,代码还十分短小。
再比如设计一个门电路,通过某些技巧进行操作就比死板的按照逻辑来设计要高效的多。
不考虑程序效率问题的话,有必要一定按照相对应的逻辑来写吗
1
paulagent 2015-08-27 07:39:12 +08:00
if you would maintenance the program forever, you can do it ,otherwise, never do it.
|
2
twor2 2015-08-27 07:39:27 +08:00
坏处: bug 不好排除,不好维护
好处:自己的玩具随便玩 |
3
lululau 2015-08-27 07:59:44 +08:00 9
你居然说用正则解析结构化数据可读性更强?正则表达式是你的母语吗?
|
4
sandideas 2015-08-27 08:01:11 +08:00 via iPhone
就是要考虑程序效率吧。。。
数据量一大正则效率会特别低吧。 |
5
invite 2015-08-27 08:10:01 +08:00
举个栗子, TCP/IP 数据包,结构也算严谨了吧。但是是变长的,你正则怎么搞?
而且,既然结构严禁了,我都知道哪个位置是什么数据了,要正则干嘛?直接 C 结构转换一下就 OK 了。 |
6
abscon 2015-08-27 08:13:36 +08:00 via iPhone 1
正则表达式的表达能力未必能解析所有的格式。
在它的表达能力不够时,你强行使用,必然出现无法修正的 bug ,会导致解析出错,会导致黑客精心构造一个输入文本让你的程序叛变。 但是如果不是通用型的处理而是临时用一下,针对特定的几个输入,那随便你,反正程序用了就扔 |
7
loading 2015-08-27 09:07:58 +08:00
您看过解析程序的源码吗?建议看看!
|
8
c742435 2015-08-27 10:06:07 +08:00
貌似 xml 和 json 这种嵌套结构是不能使用正则处理的。
一般来说,问出这种问题的都是程序新手。那自己写解析程序有多坑不用我说。老手该怎么做心里有数(并不特指“非得要按照相对应的逻辑来写”),不用问别人。 如果你觉得自己不是一般人 当我没说。 |
9
kaizixyz 2015-08-27 10:10:49 +08:00
我来翻译下~机制与算法哪个比较重要?
|
10
honkew 2015-08-27 10:17:01 +08:00
没有必要,数据结构一致性
你的数据结构效率更高,那么你就是天才 这么喜欢造轮子,不如从零写个 html dom 解析,用你说的正则去写 |
11
wind3110991 2015-08-27 10:23:06 +08:00
为了提高效率可以不造轮子,但是你不能只为了追求开发和执行效率写得没有重用性和可读性
但我个人觉得,可重用的稳定代码比高效率的执行代码意义要大很多 举个栗子: coffeescript 这个变态玩意 = = |
12
jugelizi 2015-08-27 10:24:24 +08:00
叫我干嘛
|
13
loading 2015-08-27 10:26:08 +08:00 via Android
请楼主大神去 github 找到你提到的解析程序,然后用您说的方式从效率上完爆他们。
造福全人类! |
16
wuling 2015-08-27 13:11:11 +08:00
楼主只是用正则打个比方而已,上面一堆纠结的
|
17
imn1 2015-08-27 13:45:26 +08:00
@abscon
从形式逻辑上说,都是对的,只是方式不同 很简单一个例子,用一个书名(其他资料全无)在图书馆找到这本书,在现在是很正常的事(对),但在没有电脑的时代,这就是很困难了(错) 某种方式不能“生存”于某个环境,除了这种方式本身是错误的这个可能,还有另一个可能是环境不具备容纳这种方式条件 我们的思维有一堵玻璃墙,大部分人看不见,少数看见了,就找石头垫脚登高望远,某位诗人造了个傻傻(ss )的相机,直接就把外面的风光拍下来了,“不许拍照”,相机被没收了,然后那大部分人说,诗人太清高了,要活在这世上,俗才是对的 TVB 《贼公阿牛》的主题曲,当年一首被誉为“一朵鲜花插在牛粪上”的流行曲——“世间事怎分对错……” |
18
shejinb 2015-08-27 14:33:48 +08:00
必须呀,要不然怎么进行协作呢? bug 怎么搞。
|
19
buliugu 2015-08-27 15:15:34 +08:00
除非那个配置文件里自带 BNF 什么的,倒是写个通用的 parser
|
20
abscon 2015-08-27 15:54:01 +08:00
@imn1 你最好在图书馆找到《计算理论》这本书,找到讨论正则文法的相关章节,并仔细研读。
然后你回复中体现出来的这种有害而懒惰的诗意思维会少一点。 如果想以“理论的归理论,实践的归实践”来给自己找借口,那只能来一发“程序员之怒”: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 |
21
WispZhan 2015-08-27 16:03:15 +08:00 1
楼主 这理论完全 可以套到 另一个问题里: “写项目非得要按照软件工程里对应的开发方法来管理吗?” 这种问题。
连答案都是一样的。 |
22
ijse 2015-08-27 16:39:25 +08:00
之前 有遇到一个需求是要修改 xml 文件,我把 xml 文件当成普通的模板文件来处理,而不是通过 xml 对象来生成,于是整个过程就变得更加简单、高效和方便了。
|
23
imn1 2015-08-27 17:31:04 +08:00
@abscon
“诗”只是代替某位 C 开头的 V 友,可能我写得太“诗意”了 看到“ open tags ”我就没点进去,没挂科学工具,上去比较麻烦,但大致能猜到,应该说的是一些有开头懒得写结尾而没有闭合的 tags ,例如<option>之类, 08 年就见过这样的争论,我 06 年就遇到,刚开始我也很头疼,某位洋人(抱歉我这人记名字有点困难) 08 年左右点醒了我,他说 regex 不是找节点,而是找子字符串,这才是实质 DOM 和 regex 其实是两种思维方式, DOM 是演绎法,从 root 节点通过类似 xpath 一个一个“理论推导”找到所需; regex 是归纳法,没有 node 的概念,整个 json/xml/html 就是一个大字符串,找到符合特征的全部,如果特征越细致明显,全部将越可能变成“唯一” 找某段文字,有人会记“第几章第几节第几段”,因为这样不但自己容易记住,也方便和其他人交流 但我相信不少人是按 Ctrl-F ,输入里面的特定字符直接查找,不理会“第几章第几节第几段” 所以,两种方式不存在对错之分,只是适合自己、适合团队、适合所有人的分别 我并没有回复说写程序就是应该 LZ 那样,因为不知道他写的程序是什么环境,团队合作我不建议他这样做,但他假如只是自用,只需要“自己可读性高”,那就无所谓了 我自己写的爬图就一直用 regex ,至少 08 年至今爬了 2+G (不是字节数)图片没遇到正则解决不了的,反正这程序又不需要和别人交流 |
24
akira 2015-08-27 20:10:06 +08:00
看情况呗,如果文件里面的所有内容都是必须要访问的,那干嘛不做完整解析呢。
|
25
darluc 2015-08-27 22:03:09 +08:00
只要能把想干的事干了,随便你怎么写
|
26
msg7086 2015-08-27 22:58:17 +08:00
正则和解析器,本质上都是自动机……
|
27
ipconfiger 2015-08-27 23:01:15 +08:00
有些时候就一个简单的 soap 调用,比如某些什么天气啊的 webservice 访问,就直接把 xml 文件当字符串用了,也就 2 , 3 个要替换的内容,直接 stringformat 就填进去了,一 post 就搞定,别提多简单爽快了。
|
28
BGLL 2015-08-27 23:08:23 +08:00
当然是怎么能偷懒怎么来咯,只是分为前期偷懒和后期偷懒罢了,
|
29
sablib 2015-08-28 00:21:56 +08:00
竟然有人说正则表达式可读性强。。。。
|
30
int64ago 2015-08-28 00:38:21 +08:00 via Android
我很纳闷,大多解析库不都是正则写的嘛
|