不了解正则,这个问题在网上可以搜到很多答案,但是答案之间差异很大,好像各种编程语言实现的方式都不一样?难道正则表达式在不同编程语言里会有差异?学着正则的教程弄了半天,总是会把一头一尾两个字符给匹配到,请问有没有以下一句正则表达式:
谢谢。
1
torbrowserbridge 2017-04-12 13:02:09 +08:00
/(?<=X).*(?=Y)/
|
2
ghostheaven 2017-04-12 13:02:10 +08:00 via Android
两个任意字符是给定的吗?需要匹配多次吗?需要匹配 ABxxAByyyAB 里面的 xx 和 yyy 吗?
|
3
knightdf 2017-04-12 13:08:08 +08:00
(?<=x)(.+)(?=y)
|
4
lilydjwg 2017-04-12 13:11:48 +08:00
> 难道正则表达式在不同编程语言里会有差异
是的。不同的正则引擎实现是有差异的。小的话只是语法不一样,大的话功能特性效率都会大有差别。 |
5
hitmanx 2017-04-12 13:21:23 +08:00
可能要注意 greedy vs lazy, http://www.regular-expressions.info/repeat.html
|
6
jmyz0455 OP @ghostheaven 给定,需要,最后一句不清楚,我问题里面的例子有不清楚的地方吗?
|
9
Firw 2017-04-12 15:48:56 +08:00 via iPad
Python 为例:
>>> import re >>> pattern = r'''(?<=\(\[\{').+?(?="/\\>)''' >>> string = '''([{'aabbcc"/\>([{'aabbcc"/\>([{'aabbcc"/\>''' >>> re.findall(pattern, string) 输出: ['aabbcc', 'aabbcc', 'aabbcc'] 获取到内容后,剩下的可以自由发挥了。 |
10
lrxiao 2017-04-12 19:35:09 +08:00 1
有些语言没有逆序环视的..
|
11
imn1 2017-04-12 19:55:29 +08:00
单个字符: a([^ab]+)b
字符串: 本站搜索 正则 排除,带上我的 nick 搜,回复过很多次了 |
12
owt5008137 2017-04-12 20:24:58 +08:00 via Android
单字符: a([^a]+)*a
多字符好像没有跨语言的方法。有些语言 /库的正则可以排除,那得看文档了 |
13
tomato3 2017-04-12 23:36:51 +08:00
我感觉第三条 尽量多匹配会导致你出错, greedy 。
正则前段为匹配开始, 中间要排除非尾巴的字符并且列为元组 ,如果中间是 greedy 的话,会尽可能多的匹配,直到最后一个匹配项的结束,就是你每次都匹配到结尾而且只有一个的原因,如果是 lazy 的话,会只匹配最低限度。 我没有用到过一句正则执行就返回一个你所说的字符串的,难道不是应该用匹配对象中的匹配值进行拼接吗?就是拼接中间的匹配到的元组。 |
14
ghostheaven 2017-04-13 00:04:25 +08:00 via Android
@jmyz0455 感觉你需要的不是匹配中间的东西,而是剔除给定的字符。
|
15
ivvei 2017-04-13 00:10:42 +08:00
通用的是没有的。各语言的正则实现都不一样,连通配符都可能不一样,没法通用。
|
16
xiaoyu233 2017-04-13 01:28:57 +08:00 via iPhone
Xxx(.*?)xxX
|
17
lonenol 2017-04-13 20:25:32 +08:00
匹配两个字符之间的任意字符...那怎么判断开始和结束的字符呢..
|