这个 Perl 正则表达式中的“?”是什么意思?

2023-11-24

我有一个 Perl 正则表达式。但我不确定什么是“?”在此上下文中的意思。


m#(?:\w+)#  

什么是?意思是这里?


在这种情况下,?实际上是与:。放在一起,?:在分组的开头意味着分组但不捕获括号内的文本/模式(例如,它不会存储在任何反向引用中,例如\1 or $1,因此您将无法直接访问分组文本)。

更具体地说,一个?在正则表达式中具有三种不同的含义:

  1. The ?量词表示表达式的“零次或一次重复”。我见过的典型例子之一是s?he这将匹配两者she and he自从?使得s“选修的”

  2. 当量词 (+, *, ?,或者一般的{n,m}) 后面跟着一个?那么匹配是非贪婪的(即它将匹配从允许匹配继续的位置开始的最短字符串)

  3. A ?在括号组的开头表示您要执行特殊操作。就像在这个例子中一样,:意思是分组但不捕获。可用操作的确切列表因正则表达式引擎而异,但以下是其中一些操作的列表(不一定包含所有内容):

    A. 非捕获组: (?:text)
    B. 环视四周: (?=a)为了展望未来,?!对于负前瞻,或?<= and ?<!用于向后查找(分别为正向和负向)。
    C. 条件匹配: (?(condition)then|else).
    D. 原子分组: a(?>bc|b)c(火柴abcc but not abc;请参阅链接)
    E. 内联启用/禁用正则表达式匹配修饰符: ?i启用一种模式,?-i禁用。您还可以通过简单地连接多个修饰符来一次启用/禁用多个修饰符,例如?im (i不区分大小写并且m是多行)。
    F. 命名捕获组: (?P<name>pattern),稍后可以使用(?P=name)。 .NET 正则表达式引擎使用以下语法(?<name>pattern)反而。
    G. Comments: (?#Comment text)。我个人认为这只会增加混乱,但我想它可能会有一些用处......自由间距模式可能是一个更好的选择((?x)修饰符)。

所以从本质上讲,这样做的目的是?只是上下文。如果您想要零次或多次重复文字(你必须使用的字符\(?逃避父母。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个 Perl 正则表达式中的“?”是什么意思? 的相关文章

  • PHP 中的正则表达式:找到第一个匹配的字符串

    我想在非常长的文本中找到第一个匹配的字符串 我知道我可以使用 preg grep 并获取返回数组的第一个元素 但是 如果我只需要第一场比赛 或者我知道提前只有一场比赛 那么这样做效率不高 有什么建议吗 预匹配 http www php ne
  • 在R中提取其他两个字符串之间的字符串

    我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串 可以是任何内容 例如 我有一个字符串 a lt anything goes here STR1 GET ME STR2 anything goes here 我需要提取
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后
  • 如何只替换部分匹配的子字符串?

    这是一个我还找不到答案的正则表达式问题 Input the current time is
  • RegEX 匹配方括号之外的所有内容

    我正在使用 WP 编辑器 我想创建一个 RegEX 模式来匹配方括号之外的所有内容 如下所示 foo Some selected text here foo More selected text here 并替换为 foo text box
  • Android 中 EditText 的 InputFilter 的正则表达式帮助

    我需要实现一个输入过滤器来限制格式中的数字输入1234 35 也就是说 之前最多有四个 和两位小数 我正在用这个正则表达式 http en wikipedia org wiki Regular expression图案 Pattern co
  • Sql Server Management Studio 的完整正则表达式语法

    是否有 Sql Server Management Studio 中使用的正则表达式语法的完整描述 例如 必须有一种方法可以进行负向查找 但查找 替换对话框没有列出 SSMS 版本 2005 2012 实际上只是修改 自定义的 Visual
  • 高性能简单Java正则表达式

    我正在处理的部分代码使用一堆正则表达式来搜索一些简单的字符串模式 例如 foo 0 9 3 4 bar 等模式 目前 我们使用静态编译的Java Patterns 然后调用Pattern matcher检查字符串是否包含与模式的匹配 我不需
  • 正则表达式搜索单个 0 并添加逗号

    我有以下所有数字数据 4245 4 0 0242 4424 09 0 422404 5955 0 2234234 234 224 0 2423 234 0 我需要单独处理每一行 我需要删除所有单个 0 并使用逗号输出如下 4245 4 02
  • 一系列 unicode 点的正则表达式 PHP

    我正在尝试从字符串中删除所有字符 除了 字母数字字符 美元符号 下划线 代码点之间的 Unicode 字符U 0080 and U FFFF 通过这样做 我得到了前三个条件 preg replace a zA Z d foo 我如何去满足第
  • 如何从用户提供的包含正则表达式元字符的字符串创建正则表达式?

    我需要使用创建正则表达式regexcrate 包含一个作为命令行参数传递给程序的字符串 命令行参数可以包含 and 如果我将字符串硬编码为r 那么它工作正常 但是如果我使用命令行参数作为format r arg str 我收到以下错误 假设
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • Perl 中的内联正则表达式替换

    有没有办法用内联正则表达式替换文本 而不是从变量中获取文本并将其存储在变量中 我是一个 Perl 初学者 我经常发现自己在写作 my foo bar foo s regex replacement doStuff foo 我真正想写的地方
  • 比赛结束后如何使用流找到物品?

    使用 Java 流 可以轻松找到与给定属性匹配的元素 例如 String b Stream of a1 b2 c3 filter s gt s matches b findFirst get System out println b b 生
  • 替换字符串中的重复字符串

    我正在尝试查找 并替换 字符串中重复的字符串 我的字符串可以是这样的 Lorem ipsum dolor 坐阿梅特坐 阿梅特坐 阿梅特坐诺斯特鲁德实习amit situllamco Laboris nisi ut aliquip ex ea
  • 在 Perl 中查找文件中的字符串并将其替换为另一个字符串

    我正在尝试搜索文件中的字符串并将其替换为另一个字符串 我的文件内容如下 comments abc comments xyz SerialPort 100 comment Baudrate 9600 Parity 2 Databits 8 S
  • 正则表达式多次匹配多行

    我有一个像这样的字符串 Name John Doe Age 23 Primary Language English Description This is a multiline description field that I want
  • 正则表达式忽略引号之间的文本

    我有一个正则表达式 它是 s 这用于分割字符串 但我不想让它分开 如果它在引号中 我不会使用 split 而是使用 Pattern 和 Matcher A demo import java util regex Matcher import
  • tkinter - 在askopenfile期间检索文件名

    我有一个用 Python 和 tkinter 制作的文本编辑器 这是我的 打开文件 方法 def onOpen self file askopenfile filetypes Text files txt txt file read sel
  • 我在这个正则表达式中做错了什么?

    我正在做一个关于正则表达式的学校作业 我先解释一下 我必须编写一个正则表达式来检查 URL 我必须检查的条件是 URL 是 http s 还是 ftp s 域名是 nl 还是 edu 至少有一个第三级域名 但如果该域名以 万维网 必须有一个

随机推荐