有什么更好的方法编写这个正则表达式,以确保目标字符串至少包含一个点号?
2015-10-21 6:41:28
收藏:0
阅读:101
评论:5
我需要使用正则表达式过滤一个字符串,这个字符串至少包含一个点,并被一个有限字符集包围。
所以我使用了(忽略所有空格):
^[a-z0-9:_-]+ \. [a-z0-9:_-]+$
问题是我需要使用完全相同的正则表达式 [a-z0-9:_-]+ 两次。有没有更好的办法写呢?
点赞
用户633183
如果大小写不敏感,取决于使用的语言,您可能可以这么做。
^[\w:-]+ \. [\w:-]+$
\w 匹配 [A-Za-z0-9_]
另一种方法是从字符串构建正则表达式。这是一个 JavaScript 示例:
var chars = '[\\w:-]';
var re = new RegExp('^' + chars + ' \\. ' + chars + '$');
re;
// => /^[\w:-] \. [\w:-]$/
这个假想的示例并没有节省太多,但是根据您的正则表达式的复杂程度,这样做可以避免重复字符类。此外,在使用字符串构建正则表达式时,请不要忘记\\转义您的斜杠。
如果我正在编写解析器之类的东西,我可能会进一步采取上述示例一步,像这样:
RegExp.build = function(regexen, flags) {
return new RegExp(regexen.map(function(re) { return re.source }).join(''), flags);
};
var chars = /[\w:-]+/;
RegExp.build([/^/, chars, / \. /, chars, /$/], 'gi');
//=> /^[\w:-]+ \. [\w:-]+$/gi
2013-09-16 02:42:23
用户390913
一些编程语言允许将正则表达式存储在变量中,或者从字符串中构建。例如,在 Perl 中可以这样做:
my $re_l = qr/[a-z0-9:_-]+/;
my $re = qr/^$re_l\.$re_l$/;
2013-09-16 02:45:42
用户787195
正向先行断言
/^(?=.*[^.]\.[^.])[a-z0-9:_.-]+$/ - 至少包含一个点,且该点被非点字符所包围
/^(?=^([^.]+\.)+[^.]+$)[a-z0-9:_.-]+$/ - 至少包含一个点,且每个点都被非点字符所包围
2013-09-16 02:59:16
用户372239
我不确定 Lua 是否支持这种语法(它在 Perl 中可以使用 PCRE 实现):
^([a-z0-9:_-]+)\.(?1)$
(?1) 模式与用于捕获第一个组(即 \ [a-z0-9:_ -] +)的模式相同。
2013-09-16 09:28:38
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
不,你必须在固定点之前和之后显式重复字符集正则表达式。