正则表达式经典例子-1

自己很少用正则表达式,主要用就是用在火车头采集的时候,用正则来采集事半功倍,

匹配中文字符的正则表达式: [u4e00-u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:ns*r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^s*|s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]d{5}(?!d)
评注:中国邮政编码为6位数字

匹配身份证:d{15}|d{18}
评注:中国的身份证为15位或18位

匹配ip地址:d+.d+.d+.d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]d*$    //匹配正整数
^-[1-9]d*$   //匹配负整数
^-?[1-9]d*$   //匹配整数
^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:

只能输入数字:“^[0-9]*$”
只能输入n位的数字:“^d{n}$”
只能输入至少n位数字:“^d{n,}$”
只能输入m-n位的数字:“^d{m,n}$”
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
只能输入非零的正整数:“^+?[1-9][0-9]*$”
只能输入非零的负整数:“^-[1-9][0-9]*$”
只能输入长度为3的字符:“^.{3}$”
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,

只能包含字符、数字和下划线。
验证是否含有^%&’,;=?$”等字符:“[^%&',;=?$x22]+”
只能输入汉字:“^[u4e00-u9fa5],{0,}$”
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”

正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,

“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”

正确格式为:“01”“09”和“1”“31”。

匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
(1)应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^x00-xff]/g,”aa”).length;}
(2)应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, “”);
}
(3)应用:利用正则表达式分解和转换IP地址
function IP2V(ip) //IP地址转换成对应数值
{
re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error(”Not a valid IP address!”)
}
}
(4)应用:从URL地址中提取文件名的javascript程序
s=”http://www.xxxx.net/page1.htm“;
s=s.replace(/(.*/){0,}([^.]+).*/ig,”$2″) ; //Page1.htm
(5)应用:利用正则表达式限制网页表单里的文本框输入内容
用正则表达式限制只能输入中文:onkeyup=”value=value.replace(/[^u4E00-u9FA5]/g,”) ” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^u4E00-u9FA5]/g,”))”
用正则表达式限制只能输入全角字符: onkeyup=”value=value.replace(/[^uFF00-uFFFF]/g,”) ” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^uFF00-uFFFF]/g,”))”
用正则表达式限制只能输入数字:onkeyup=”value=value.replace(/[^d]/g,”) “onbeforepaste= “clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))”
用正则表达式限制只能输入数字和英文:onkeyup=”value=value.replace(/[W]/g,”) “onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”

<think> 首先,用户查询是关于正则表达式的:他们想要一个匹配不以 "-" 或 "_" 开头的字符串的正则表达式。 回顾系统指令: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾添加引用标识,如 [^1]。 用户提供了一些引用: - [^1]: 讨论了正则表达式模式如 n[^e] 和 n(?!e)。 - [^2]: 强调分解正则表达式的重要性。 - [^3]: 提供Python正则表达式的修饰符和字符类。 - [^4]: 示例匹配单个字符。 用户说这些引用仅供参考,不是真正的需求,我应该参考用户上一次的问题和我的回答。但在这个对话中,用户上一次的问题是系统指令,没有之前的对话历史。所以,我应该基于当前查询回答。 关键查询:"正则表达式实现不允许以 - 或 _ 开头"。意思是正则表达式匹配不以 "-" 或 "_" 开头的字符串。 正则表达式中,要匹配不以某个字符开头的字符串,可以使用正向否定查找或字符类。 回想: - 要匹配不以特定字符开头的字符串,可以用 ^[^abc] 表示不以a、b或c开头。 - 具体到这里:不以 "-" 或 "_" 开头,所以应该是 ^[^-_]。 在正则表达式- ^ 表示字符串开头。 - [^-_] 是一个否定字符类,匹配任何不是 "-" 或 "_" 的字符。 所以,正则表达式可以是:^[^-_].* 解释: - ^ : 字符串开头 - [^-_] : 匹配任何字符,除了 "-" 和 "_" - .* : 匹配零个或多个任意字符(确保整个字符串被考虑) 要匹配整个字符串,不需要 .* 如果只关心开头,但通常我们想匹配整个字符串。 用户说"匹配的字符串",所以要匹配整个字符串。 因此,完整的正则表达式是 ^[^-_].* 用于匹配不以 "-" 或 "_" 开头的字符串。 在Python中使用时,可能需要转义或在特定上下文中使用。 现在,构建回答: - 使用中文。 - 结构清晰。 - 最后生成相关问题。 - 引用引用源时添加标识。 引用相关部分: - 从 [^1] 和 [^4],有否定字符类的例子- [^2] 建议分解正则表达式- [^3] 有字符类定义。 在回答中,自然地引用。 回答结构: 1. 解释用户需求。 2. 提供正则表达式方案。 3. 解释正则表达式。 4. 给出示例(如果可能)。 5. 生成相关问题。 最后,添加相关问题§§。 确保行内数学表达式用 $...$。这里,正则表达式可以用行内格式,如 $^[^-_].*$。 独立公式:如果没有复杂的数学,可能不需要。 LaTeX正确:正则表达式不是数学表达式,但可以用代码块或行内。 在示例中,系统指令说数学表达式用 $...$,但正则表达式最好用代码块或文本。 查看系统指令:"所有行内数学表达式(包括变量、不等式、方程等)必须使用$...$格式",但正则表达式不是数学表达式;它是文本模式。 在示例中没有正则表达式,但有Python代码块。 我应该使用代码块来表示正则表达式,因为它是代码。 为了安全,我可以在行内用文本或用代码块。 在回答中,我会用代码块来展示正则表达式,就像Python代码示例。 在系统指令的示例中,有Python代码块。 所以,对于正则表达式,我可以用类似的方式。 最终正则表达式:^[^-_].* 在Python中使用时,可能需要re模块。 但用户没有指定语言;引用中提到Python,所以可以基于Python。 用户查询是通用的:"正则表达式",所以给出通用的。 回答: - 开头总结。 - 解释。 - 代码块。 - 引用相关部分。 - 相关问题。 相关问题生成:基于这个主题,如其他常见否定匹配、应用场景等。 相关问题: 1. 如何用正则表达式匹配不以数字开头的字符串? 2. 正则表达式中否定查找的优化方法? 3. 在Python中如何实现正则表达式以处理大小写敏感? 类似示例。 现在,撰写回答。 </think> 以下是针对您查询的详细解答:您需要创建一个正则表达式,用于匹配那些**不允许以 "-" 或 "_" 开头**的字符串。这意味着正则表达式应该排除所有以 "-" 或 "_" 开头的字符串,只匹配以其他字符开头的字符串。我将基于正则表达式的基础原理(参考提供的引用内容)逐步解释和实现。 ### 正则表达式解决方案 在正则表达式中,要实现"不允许以特定字符开头"的匹配,可以使用**否定字符类**(negated character class)。这种方法类似于引用[^1]中提到的 `n[^e]` 模式,它通过方括号内的 `^` 符号来排除指定字符。具体到您的需求: - `^` 表示字符串的开头。 - `[^-_]` 是一个否定字符类,意思是"匹配任何字符,除了 '-' 和 '_'"。 - `.` 匹配任意单个字符(除换行符外),`*` 表示零个或多个前面的字符,用于匹配整个字符串。 因此,完整的正则表达式是: ```regex ^[^-_].* ``` #### 解释: - `^[^-_]`:确保字符串的第一个字符不是 "-" 或 "_"。 - `.*`:匹配剩余部分的任意字符序列(包括空字符串)。 - 这个表达式会匹配整个字符串,但前提是开头字符不是 "-" 或 "_"。 #### 示例用法(在Python中): 如果您在Python中使用 `re` 模块(参考引用[^3]),可以这样实现: ```python import re # 定义正则表达式 pattern = r'^[^-_].*' # 测试字符串 test_strings = ["hello", "-world", "_test", "123", "@abc", " no_space"] for s in test_strings: if re.match(pattern, s): print(f"匹配成功: '{s}'") else: print(f"不匹配: '{s}'") ``` 输出结果: ``` 匹配成功: 'hello' 不匹配: '-world' 不匹配: '_test' 匹配成功: '123' 匹配成功: '@abc' 匹配成功: ' no_space' # 注意:开头是空格,不是 '-' 或 '_' ``` 在这个示例中: - "hello"、"123"、"@abc" 和 " no_space" 被成功匹配,因为开头字符不是 "-" 或 "_"。 - "-world" 和 "_test" 不被匹配,因为它们以 "-" 或 "_" 开头。 ### 为什么这个方法有效? - 否定字符类 `[^-_]` 是一种高效的方式,因为它直接在字符类中排除指定字符。这与引用[^4]中展示的 `.a.` 示例类似,强调使用字符类来处理单个字符匹配[^4]。 - 分解正则表达式是关键(如引用[^2]建议),避免复杂嵌套:先从开头 `^` 入手,再处理否定条件 `[^-_]`,最后匹配其余部分 `.*`。 - 在Python中,您可以使用 `re.match()` 来检查整个字符串是否匹配(从开头开始),或者用 `re.search()` 如果不需要从头严格匹配。修饰符如 `re.I` 可以添加大小写不敏感支持[^3]。 如果您需要在其他编程语言或环境中使用这个正则表达式,语法基本相同(例如在JavaScript或Java中),只需调整转义字符或函数调用。 ### 相关问题 为了帮助您进一步学习正则表达式,以下是基于此主题的相关问题: 1. 如何用正则表达式匹配不以数字开头的字符串? 2. 正则表达式中,正向否定查找(如 `(?!)`)和否定字符类有什么区别?在什么场景下使用哪种? 3. 在Python中,如何优化正则表达式以提高匹配性能(例如处理大文本时)? 如果您有更多细节(如特定编程语言或额外约束),我可以提供更针对性的示例!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值