就拿你所给的“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" 之外的任何单个字符”,看清楚再发言好不好?
--楼上回答的都很在理,你要是预先知道了你要匹配的在第几位上,用 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] 可以匹配任何一个字符也是你妈教的?那...过节期间,你替我多多问候她 !!!
两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。'.'可以替代任何字符。
"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.*"
分组就可以了。
如(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我··
^.{3}4.*$
3代表你想从第几个开始匹配,4代表你想匹配的字符。