为了账号安全,请及时绑定邮箱和手机立即绑定

你好,想问一下,"?:"在正则表达式中什么意思?

你好,想问一下,"?:"在正则表达式中什么意思?

jeck猫 2019-11-19 18:14:14
"?:"在正则表达式中什么意思
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

?:”非获取匹配,匹配冒号后的内容但不获取匹配结果,不进行存储供以后使用。

单独的“?”:匹配前面的子表达式零次或一次。

当“?”紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。

扩展资料

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。


查看完整回答
反对 回复 2019-11-29
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

?: 是 不想被捕获的时候使用 可以提高程序执行速度

比如 ([a-z][0-9])+

这个正则表达式里 ( ) 里面的内容被捕获了, 反向引用的时候可以用上 。
一般正则替换的时候用的多 像UBB代码

但是 如果写成 (?:[a-z][0-9])+
跟上面 正则表达式 整体匹配是一样的 就是 不会捕获 ( )里内容了。
也就是不能使用 反向引用

如果还是不太理解, 那就先了解一下 反向引用吧。



查看完整回答
反对 回复 2019-11-29
?
千巷猫影

TA贡献1829条经验 获得超7个赞

比如 PHP 手册里 有个 正则替换的函数 preg_replace 有的列子

$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string); 
// 结果显示  April1,2003

这里就用上了 反响引用   
$replacement  里的 ${1} 代表  (\w+)  ,    $3代表 第2个 (\d+)
这个正则表达式 里 一共有 3个 ()  也就是  可以  用 $1  $2  $3  调用 3个()里的 内容。

也可以使用 \1    \2    \3 来 代替  $1  $2  $3  都是一样的

那接下来 如果把 代码里的 正则表达式 改成下面的

$pattern = '/(?:\w+) (?:\d+), (\d+)/i'; 
那 这里  只有 一个 () 里的 内容 能使用 
带 ?:的 ()里面内容是不会被 捕获的  ,所以 只能使用 $1 代表最后的 (\d+)


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 787 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信