正则匹配 + re

 

可能会遇到的正则匹配字符

^            匹配一行字符串的开头
.             匹配任意字符,除了换行符
[...]         匹配括号中的任一个,[amk] 匹配 'a','m'或'k'
[^...]       不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
*             匹配0个或多个的表达式
+            匹配1个或多个的表达式
          匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

[ \f\r\t\n] //匹配所有的白字符
[^a-z] //除了小写字母以外的所有字符 
[0-9\.\-] //匹配所有的数字,句号和减号 
[[:alpha:]]任何字母
[[:digit:]]任何数字
[[:alnum:]]任何字母和数字
[[:space:]]任何空白字符
[[:upper:]]任何大写字母
[[:lower:]]任何小写字母
[[:punct:]]任何标点符号
[[:xdigit:]]任何16进制的数字,相当于[0-9a-fA-F]

|              a| b,匹配a或b
{n}          精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
{n,}         匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
{ n, m}     匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

\w         匹配字母数字下划线
\W         匹配非字母数字下划线
 \s         匹配任意空白字符
\S         匹配任意非空白字符
\d         匹配任意数字,等价于 [0-9]
\D         匹配任意非数字

首先分享一道例题:

bugku-----字符?正则

划线部分是重点哦,

preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);

这句话不太难,我们可以一个一个比较的得到flag。因为通过得到的php代码来看,这个id就是flag。。。。

'/key' 就是key 的意思,'.*'即匹配任意一个字符,‘key’还是key,‘.{4,7}'就是需要任意字符但是字符的个数要比4大同时比7小,'key’仍然是key,‘:'本意不改,还是冒号,'\/'是反斜杠的意思即‘/’,  '.\/'还是一个任意字符都OK再加上一个反斜杠/,'(.*key)’还是key,[a-z]是从a到z之间任意一个小写字母,[:punct:]是任何标点符号。

 

下面记录一些re库

re.match :尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回none。
re.search:扫描整个字符串并返回第一个成功的匹配。

在前面两个表达式中有区别,但是得到的答案的代表相同,,,
           span():获取开始和结束位置;string:获取匹配的内容
           group():获取子表达式匹配的内容


re.findall:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
re.sub(‘表达式’, ‘新字符’, ‘字符串’):用于替换字符串中的匹配项。
re.split:方法按照能够匹配的子串将字符串分割后返回列表,用于通过匹配的子串将字符串分割,并将分割后的子串以列表形式返回,通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 ,除去字符串中符表达式的字符,以列表的形式返回


re.compile:函数用于编译正则表达式,生成一个正则表达式对象

首先运行match后

\d是数字,所以对于匹配的字符串,没有结果,返回是none,

import re
s='dkskfl23932'
result=re.match(r'\d',s)
print(result)
#print(result.span())
#print(result.group())

 

string: 待匹配字符串,比较模糊的一个匹配。。

findall的例子:

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用则表达式来匹配后面跟双引号里带中文的字符串,具体如下: ``` ".*[\u4e00-\u9fa5]+.*" ``` 这个则表达式包含以下几个部分: - `"`: 匹配一个双引号字符。 - `.*`: 匹配任意数量的任意字符,包括空格。 - `[\u4e00-\u9fa5]`: 匹配 Unicode 编码范围为中文字符的字符。 - `+`: 表示前面的中文字符可以出现一次或多次。 - `.*`: 匹配任意数量的任意字符,包括空格。 - `"`: 匹配一个双引号字符。 使用这个则表达式,可以匹配包含任意数量中文字符的字符串,例如: - "这是一段包含中文的字符串" - "这是一段包含中文和 English words 的字符串" - "这是一段包含 中 文的字符串" - "这是一段包含中文和符号(!@#¥%……)的字符串" 注意,这个则表达式只能匹配带有双引号的字符串,如果要匹配不带双引号的字符串中的中文字符,可以将则表达式改为: ``` .*[\u4e00-\u9fa5]+.* ``` 这个则表达式和之前的表达式类似,但不包含双引号。 ### 回答2: 要使用则表达式来匹配后面跟双引号里带中文的文本,可以使用以下的则表达式模式: ```regex "[\u4e00-\u9fa5]+" ``` 这个则表达式模式的含义如下: - `"`: 匹配双引号。 - `[\u4e00-\u9fa5]`: 匹配任意一个中文字符。Unicode编码中,中文字符的范围是`\u4e00`到`\u9fa5`。 - `+`: 匹配前面的则表达式模式至少一次或多次。 所以,当对文本进行匹配时,使用上述则表达式模式可以匹配到后面跟有双引号里带中文的文本。 例如,假设文本为:"这是一个测试",可以使用该则表达式模式进行匹配,结果将是:"这是一个测试"。然而,如果文本为:"这是一个测试"",则该则表达式模式将无法匹配到任何结果,因为后面的双引号没有带中文。 希望以上回答能对您有所帮助! ### 回答3: 要使用则表达式匹配后面跟中文的双引号,可以使用以下则模式:`"[\u4e00-\u9fa5]+"`。 这个则表达式模式的含义是:匹配一个双引号(即`"`),后面紧跟着一个或多个中文字符。 解释一下模式中的部分: - `[]` 表示字符类,匹配方括号中的任意一个字符 - `\u4e00-\u9fa5` 是 Unicode 编码中CJK字符的范围,表示中文字符 - `+` 表示匹配前面的模式一次或多次 使用这个模式来匹配文本时,可以实现后面跟有中文的双引号的匹配。下面是一个示例代码片段: ```python import re pattern = r'"[\u4e00-\u9fa5]+"' text = '这是一个测试句子,"这里是中文","这也是中文"。' matches = re.findall(pattern, text) print(matches) ``` 执行这段代码后,输出的结果将是一个包含匹配的字符串的列表:`['"这里是中文"', '"这也是中文"']`。这表明成功地匹配到了带有中文的双引号。 使用则表达式,你可以灵活地匹配和提取任意复杂的文本模式,包括中文字符。希望以上解答对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值