菜鸟工具正则表达式,js 正则菜鸟

http://www.itjxue.com  2023-01-17 13:18  来源:未知  点击次数: 

菜鸟求正则表达式

建议把例外筛选放到应用中实现

import re

excepts = ['127.0.0.1','0.0.0.0']

patt = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', re.I|re.X)

content = r'brd 127.255.255.255/23 scope 127.0.0.1/2 2.2.2.2/4 0.0.0.0/4 host lo'

print [ip for ip in patt.findall(content) if ip not in excepts]

pythonw -u "baidu.py"

['127.255.255.255', '2.2.2.2']

Exit code: 0 Time: 4.415

菜鸟求助解释一句正则表达式

写正则表达式的人水平不高,简单的功能写出复杂杂的在复杂不过了的表达式

以上正则和这个正则等效

[\w/]*

也就是

var result=str.match(/[\w/]*/g);

((\w+)\/)\1*\2*

解释

\w代表匹配一个任意数字字母和中文字符加下划线

+代表\w重复匹配一次以上

(\w+)加个括号,代表把匹配到的上面字符放在分组里,这里从左向右数为第二个分组

\2代表对前面匹配到的分组2的引用。也就是(\w+)分组匹配到的字符的引用,前面匹配到a,后面\2也就是a

*代表重复引用零次以上。零,可以没引用。

\1代表对前面最外层分组((\w+)\/)的引用。同理,*代表可以重复任意次。

正则(?=.*[a-z])是什么意思?

.代表任意字符,(?=.*[a-z]) 表示任意字符拼接小写字母,那(?=[a-z])跟它有什么区别?

首先?(?=xxx) 是 look ahead=你说的 前瞻

此处xxx的区别:

.*[a-z]:任意字符,且个数尽量多,后跟单个小写字母

举例:12AB3c4d

[a-z]:单个小写字母

举例:12AB3c4d 只能匹配到:12AB3c

12AB3是前面部分

c是最后的[a-z]匹配的

-》其实,更准确的解释需要你给出完整的正则,而不仅仅是look ahead的部分,才能详细和精确解释匹配的内容和逻辑。

前瞻:exp1(?=exp2) 查找exp2前面的exp1,

后顾:(?=exp2)exp1 查找exp2后面的exp1,

(?=.*[a-z]). 和 .(?=.*[a-z]) 我测试都能运行,反而(?=.*[a-z]). 运行不了,是不是后顾表达式不能用 (?=exp2)exp1 了?

不是。而是:

look behind=后顾 有个特殊的情况:只支持固定长度,比如123,而不支持不定长度的,比如\d+

你的?(?=.*[a-z]). 中的?.*[a-z] ,属于正则写法,能匹配到不固定长度的字符,所以不支持,会报错的。

官网解释,详见python中的re

re --- 正则表达式操作 — Python 3.8.1 文档

(?=…)

匹配字符串的当前位置,它的前面匹配?…?的内容到当前位置。这叫:dfn:positive lookbehind assertion(正向后视断定)。?(?=abc)def?会在?'abcdef'?中找到一个匹配,因为后视会往后看3个字符并检查是否包含匹配的样式。包含的匹配样式必须是定长的,意思就是?abc?或?a|b?是允许的,但是?a*?和?a{3,4}?不可以。

注意其中的“包含的匹配样式必须是定长的”

用菜鸟工具正则表达式在线测试,abcD去匹配 (?=.*[a-z]). 匹配结果是 a b c,为什么a也能匹配,a的前面什么都没有啊!

建议换用更好用的

RegExr: Learn, Build, Test RegEx

解释:

因为 你写的?(?=.*[a-z]).,其中的 .*[a-z] 含义是:任意字符,个数0或多个,后面跟着一个小写字母

而此处 之所以能匹配到a,是因为a前面有个 ^ 也叫 行首 =每个行的开始

对于正则来说,也是一个 不可见的特殊的字符。

更多正则的解释,详见我的教程:

应用广泛的超强搜索:正则表达式

顺带送上我刚整理的:

正则逻辑说明:look ahead和look behind

如图:

菜鸟提问正则表达式还有 if else

1,建议你先将你定义的变量都给打印出来看一下

2,if [[ "$n1" =~ "$re" ]]; 方括号和双引号看看使用的有没有什么问题,还有就是单引号的使用

一般来说单引号会见引号中的东西都给转义了,所以引号使用要特别小心

一步一步去定位,不能急,这也是学习的过程。以后再遇到相似问题你就知道怎么定位了。

这个地方我怀疑你定义的$re有问题

修改为下面这个表达式试一下:

if("$n1"=~"[0-9]+")

关于正则表达式的菜鸟问题!关于 ^ 和 \b 怎么感觉两者都是一样的...何解...

^的意思是以其后的字符为开始

\b的意思是该字符的前或者后为空格或者标点

举例来说 ^abc ?和\babc ? ?如字串“abcd” 和字串"James abc" "James,abc" 匹配结果如下

(责任编辑:IT教学网)

更多

推荐程序员考试文章