正则表达式问题: 怎么样才能定义从字符串的第几位开始,例如12345678 怎么写,才能只匹配第四个字符

比如,我想用正则匹配六位数字中的第四个,应该怎么写才对呢?或者,我想从第四个开始匹配,到第五个结束,又应该怎么写呢?请求帮助,谢谢... 比如,我想用正则匹配六位数字中的第四个,应该怎么写才对呢?
或者,我想从第四个开始匹配,到第五个结束,又应该怎么写呢?请求帮助,谢谢
展开
 我来答
小寒爱旅游
2011-09-29 · TA获得超过1054个赞
知道小有建树答主
回答量:327
采纳率:100%
帮助的人:161万
展开全部
就拿你所给的“12345678”为例,我个人认为有两种方法:
1. String str = "12345678";
String str2 = str.substring(4); //截取从第四个字符开始的子字符串
然后对str2应用正则表达式进行匹配
2. 直接用正则表达式:
首先注意句点在正则表达式中的含义:
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
由于是六位数字,而要从第四位开始匹配,前面三位用 . 代替,表示任意字符
即 .{3}\d\d.{2}
表示字符串第四、五个必须为数字,前面3个可以为任意除换行符以外的单个字符,最后两个单字符也为除换行符以外的单字符。

而如果是在MySQL或Oracle的SQL中,正则表达式应该是:
_ _ _\d\d_ _
短下划线与Java、JS、PHP中支持的正则表达式中的句点 . 意义相同,表示任意单个字符,上面的短下划线是连续的,为了便于阅读所以将其用空格分开,实际上是三个连续的短下划线。但SQL中匹配正则表达式用的是LIKE语法,比如
SELECT * FROM people WHERE name LIKE '_ _ abc*';
从people表中选择这样的行:这些行的name列值的第三个字符为a,第四个字符为b,第五个字符为c。

PS:
@tpaxatb,我不知道你是真傻还是装傻。为了得分你诬蔑我倒无所谓,误人子弟就不好了。
1. str.substring(4)应该是第5个字符
你自己搞清楚,这个是得到第五个字符,还是得到从第五个字符开始的子字符串?基础不好不是你的错,基础不好还乱对别人指手画脚就是你的错了。估计你是培训机构出来的吧!真他妈少见啊!
2.[.\n]只代表点(.)和回车,不是点可以匹配包括 '\n' 在内的任何字符的意思
看清楚我说的是“匹配除 "\n" 之外的任何单个字符”,看清楚再发言好不好?
计名pS
2011-09-30 · TA获得超过3649个赞
知道大有可为答主
回答量:4189
采纳率:0%
帮助的人:2199万
展开全部
--楼上回答的都很在理,你要是预先知道了你要匹配的在第几位上,用 substring (或 index) 比正则要来的快...

从第四个开始匹配,到第五个结束: $char_4_5 = substring($string, 3,2)

PS: 另外,1楼的第1点和第2点都有错误:
1. str.substring(4)应该是第5个字符
2.[.\n]只代表点(.)和回车,不是点可以匹配包括 '\n' 在内的任何字符的意思

/./s <--Single Line mode

jxqlovejava:

".... 要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。" <--- 这个形式 [.\n] 可以匹配任何一个字符也是你妈教的?那...过节期间,你替我多多问候她 !!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
双鱼love小白兔
推荐于2016-08-04 · TA获得超过709个赞
知道小有建树答主
回答量:728
采纳率:100%
帮助的人:78.5万
展开全部
两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。'.'可以替代任何字符。
"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符);
你也可以使用范围,用大括号括起,用以表示重复次数的范围。
"ab{2}":表示一个字符串有一个a跟着2个b("abb");
"ab{2,}":表示一个字符串有一个a跟着至少2个b;
"ab{3,5}":表示一个字符串有一个a跟着3到5个b。
设匹配第5个字符;字符为x
正则表达式为:"^.{4}x.*"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6ca0ba3
2011-09-27 · TA获得超过1489个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:577万
展开全部
分组就可以了。
如(c#):
string str = "123456789";
Regex r = new Regex(@"\d{3}(\d{2})\d+");
r.Match(str).Result("$1");

结果是45

匹配第四个 改成 \d{3}(\d{1})\d+

结果是 4

还有问题hi我··
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luoxuanjin
2011-09-27 · TA获得超过252个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:175万
展开全部
^.{3}4.*$
3代表你想从第几个开始匹配,4代表你想匹配的字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式