有没有一句通用的正则表达式,能匹配某两个任意字符之间的所有内容但不包含该字符?

2017-04-12 12:33:18 +08:00
 jmyz0455

不了解正则,这个问题在网上可以搜到很多答案,但是答案之间差异很大,好像各种编程语言实现的方式都不一样?难道正则表达式在不同编程语言里会有差异?学着正则的教程弄了半天,总是会把一头一尾两个字符给匹配到,请问有没有以下一句正则表达式:

  1. 能匹配某两个任意字符之间的所有内容但不包含该字符?
  2. 在任何编程语言都通用,实现方法可以不同。
  3. 尽量多匹配。
  4. 所有内容可以不包含换行符。
  5. 如果把任意字符换成任意多个字符呢?例如 ([{'要匹配的内容"/\>([{'要匹配的内容"/\>([{'要匹配的内容"/\> ,如何让编程语言通过一条正则表达式返回类似 “要匹配的内容要匹配的内容要匹配的内容” 的字符串呢?

谢谢。

10880 次点击
所在节点    程序员
17 条回复
torbrowserbridge
2017-04-12 13:02:09 +08:00
/(?<=X).*(?=Y)/
ghostheaven
2017-04-12 13:02:10 +08:00
两个任意字符是给定的吗?需要匹配多次吗?需要匹配 ABxxAByyyAB 里面的 xx 和 yyy 吗?
knightdf
2017-04-12 13:08:08 +08:00
(?<=x)(.+)(?=y)
lilydjwg
2017-04-12 13:11:48 +08:00
> 难道正则表达式在不同编程语言里会有差异

是的。不同的正则引擎实现是有差异的。小的话只是语法不一样,大的话功能特性效率都会大有差别。
hitmanx
2017-04-12 13:21:23 +08:00
可能要注意 greedy vs lazy, http://www.regular-expressions.info/repeat.html
jmyz0455
2017-04-12 13:51:28 +08:00
@ghostheaven 给定,需要,最后一句不清楚,我问题里面的例子有不清楚的地方吗?
jmyz0455
2017-04-12 13:52:24 +08:00
@lilydjwg 哦,原来是这样,我主要用 Python 和 Javascript ,做笔记时要好好区分下了。
jmyz0455
2017-04-12 13:53:38 +08:00
@hitmanx 嗯,我应该是要 greedy 的。
Firw
2017-04-12 15:48:56 +08:00
Python 为例:

>>> import re
>>> pattern = r'''(?<=\(\[\{').+?(?="/\\>)'''
>>> string = '''([{'aabbcc"/\>([{'aabbcc"/\>([{'aabbcc"/\>'''
>>> re.findall(pattern, string)
输出:
['aabbcc', 'aabbcc', 'aabbcc']

获取到内容后,剩下的可以自由发挥了。
lrxiao
2017-04-12 19:35:09 +08:00
有些语言没有逆序环视的..
imn1
2017-04-12 19:55:29 +08:00
单个字符: a([^ab]+)b
字符串:
本站搜索 正则 排除,带上我的 nick 搜,回复过很多次了
owt5008137
2017-04-12 20:24:58 +08:00
单字符: a([^a]+)*a
多字符好像没有跨语言的方法。有些语言 /库的正则可以排除,那得看文档了
tomato3
2017-04-12 23:36:51 +08:00
我感觉第三条 尽量多匹配会导致你出错, greedy 。
正则前段为匹配开始, 中间要排除非尾巴的字符并且列为元组 ,如果中间是 greedy 的话,会尽可能多的匹配,直到最后一个匹配项的结束,就是你每次都匹配到结尾而且只有一个的原因,如果是 lazy 的话,会只匹配最低限度。
我没有用到过一句正则执行就返回一个你所说的字符串的,难道不是应该用匹配对象中的匹配值进行拼接吗?就是拼接中间的匹配到的元组。
ghostheaven
2017-04-13 00:04:25 +08:00
@jmyz0455 感觉你需要的不是匹配中间的东西,而是剔除给定的字符。
ivvei
2017-04-13 00:10:42 +08:00
通用的是没有的。各语言的正则实现都不一样,连通配符都可能不一样,没法通用。
xiaoyu233
2017-04-13 01:28:57 +08:00
Xxx(.*?)xxX
lonenol
2017-04-13 20:25:32 +08:00
匹配两个字符之间的任意字符...那怎么判断开始和结束的字符呢..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354313

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX