正则表达式问题: 怎么样才能定义从字符串的第几位开始,例如12345678 怎么写,才能只匹配第四个字符
比如,我想用正则匹配六位数字中的第四个,应该怎么写才对呢?或者,我想从第四个开始匹配,到第五个结束,又应该怎么写呢?请求帮助,谢谢...
比如,我想用正则匹配六位数字中的第四个,应该怎么写才对呢?
或者,我想从第四个开始匹配,到第五个结束,又应该怎么写呢?请求帮助,谢谢 展开
或者,我想从第四个开始匹配,到第五个结束,又应该怎么写呢?请求帮助,谢谢 展开
5个回答
展开全部
就拿你所给的“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" 之外的任何单个字符”,看清楚再发言好不好?
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] 可以匹配任何一个字符也是你妈教的?那...过节期间,你替我多多问候她 !!!
从第四个开始匹配,到第五个结束: $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] 可以匹配任何一个字符也是你妈教的?那...过节期间,你替我多多问候她 !!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分组就可以了。
如(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我··
如(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代表你想匹配的字符。
3代表你想从第几个开始匹配,4代表你想匹配的字符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询