- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在阅读 PCRE
-(Perl 兼容的正则表达式)文档并发现了一些有趣的正则表达式技巧。当我继续阅读并筋疲力尽时,我因与使用一些 (*...)
相关的一些困惑而停了下来。模式。
我的问题和困惑与 (*PRUNE)
有关和 (*FAIL)
现供引用 (*SKIP)
就像 (*PRUNE)
,除了如果模式未 anchor 定,则颠簸前进不是到下一个字符,而是到 职位在主题中(*SKIP)
遇到了。
文档指出 (*PRUNE)
导致匹配在当前 处失败起始位置 如果模式的其余部分不匹配,则在主题中。它说 (*FAIL)
同义词 (?!)
否定断言。在 强制匹配失败给定位置在图案中。
所以基本上(*FAIL)
表现得像一个失败的否定断言,是 (?!)
的同义词
和 (*PRUNE)
导致匹配在当前 处失败起始位置 如果稍后匹配失败导致回溯到达它,则在主题中。
How are these different when it comes to a point of failing?
Can anyone provide examples of how these are implemented and used correctly?
最佳答案
在阅读此答案之前,您应该熟悉回溯机制、原子组和所有格量词。您可以在 Friedl 书中找到有关这些概念和功能的信息,并访问以下链接:www.regular-expressions.info , www.rexegg.com
所有的测试都是通过全局搜索进行的(使用 preg_match_all()
函数)。(*FAIL)
(或简写 (*F)
)
baabo caaco daado
caac(*FAIL)|aa.|caaco|co
[0] => aab
[1] => caaco
[2] => aad
(*FAIL)
导致与模式中的“坏字符”完全相同的行为。例如,如果将其替换为“R”,则会得到完全相同的结果:
caacR|aa.|caaco|co
.更笼统地说,你确实可以替换
(*FAIL)
具有“始终失败的子模式”,例如:
(?!)
,
(?=a(?<!a))
,...
a (first from "baabo")
: 不出意外,第一个结果是由第二个选择找到的。 (
aab
)
c (first)
:正则表达式引擎遇到第一个“c”并尝试第一个选择并找到:
caac
,但子模式被迫失败。然后正则表达式引擎(总是从第一个“c”开始)尝试失败的第二个选择,第三个选择成功。 (
caaco
)
a (first from "daado")
: 第三个结果由第二个选择找到。 (
aad
)
(*SKIP)
baabo caaco daado
caa(*SKIP)c(*FAIL)|aa.|caaco|co
[0] => aab
[1] => co
[2] => aad
这个动词定义了一个点,当子模式稍后失败时,正则表达式引擎不允许回溯。因此,
使用子模式之前找到的所有字符都将一劳永逸地消耗掉 , 并且不能用于模式的另一部分(替代)。
a (first from "baabo")
:第一个结果由第二个选择找到。 (
aab
)
c (first)
:正则表达式引擎找到
caac
与第一种情况一样,然后失败(由于
(*FAIL)
动词),回溯到第二个“c”,但不允许回溯到
(*SKIP)
之前先前匹配的字符(“caa”)动词。
c (second)
:现在,正则表达式引擎总是尝试第一个选择,但在这个新位置并失败,因为后面有一个“o”而不是“a”,然后它回溯到第二个“c”。请注意,在这种情况下,这些字符不会像以前一样被消耗,因为子模式在到达
(*SKIP)
之前失败了。动词。
co
)
a (first from "daado")
: 第三个结果由第二个选择找到。 (
aad
)
(*PRUNE)
baabo caaco daado
caa(*PRUNE)c(*FAIL)|aa.|caaco|co
[0] => aab
[1] => aac
[2] => aad
这个动词不同于
(*SKIP)
因为它不禁止使用所有先前匹配的字符,而是在子模式稍后失败时跳过子模式的第一个匹配字符(或禁止子模式开始)。
a (first from "baabo")
:第一个结果由第二个选择找到。 (
aab
)
c (first)
:正则表达式引擎找到
caac
与第一种情况一样,然后失败,但现在从“caaco”回溯到第一个“a”,因为第一个“c”被跳过。
a (first from "caaco")
:第一个选择被尝试并失败,第二个成功并给出第二个结果。 (
aac
)
a (first from "daado")
: 第三个结果由第二个选择找到。 (
aad
)
关于regex - 在回溯和失败后起作用的动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992984/
我正在实现一个包装队列的 REST'ish API。我需要对项目进行入队和出队。通常我会使用 GET 来查询,但在这种情况下,将某些东西出队会通过删除该项目来改变状态。所以 GET 似乎是一个糟糕的选
我想将多个 Action 映射到单个HTTP动词,像这样 "/product"(controller: "product"){ action : [POST: ["save", "clone"] ]
我一直在努力坚持 the approved list of Powershell verbs命名我的 cmdlet 时。我有一个创建资源的函数,所以它被称为 New-ClearCaseView。我还想
我有一个 restful Controller ,我想使用 destroy 函数这是我的路线: +-------------------------------+------------------
好吧,我的目标是从文本中提取 NE(人称)和与其相关的动词。例如,我有这段文字: Dumbledore turned and walked back down the street. Harry Po
有点基础,但我已经尝试了一些方法来解决以下错误但无法得到正确的解决方案。
我有一个带有条件操作的资源: /foos/{id}/authorize /foos/{id}/cancel 这个想法是,授权会将资源的状态从已保存(默认)更改为已授权(由第三方应用程序)。授权可以从远
我经常有一种方法来验证特定值。在 powershell 中,约定是在“get-verb”列表中使用动词,但我不知道哪个最适合这种用法。 或者,如果我的设计架构应该更改以避免以其他方式通过方法进行验证,
我正在关注这件事:J Dictionary 它告诉我发出命令 d by d over d!/d 其中 d 是一个列表,但我的 jqt 环境告诉我 value 错误:结束。如果问题是我应该导入/安装/激
Sinatra 是否支持 OPTIONS HTTP 动词?就像是: options '/' do response.headers["Access-Control-Allow-Origin"] =
我需要发送数据并比较API服务器中是否存在。例如: $a['foo'] = 'hello'; $a['bar'] = 'world'; $rest->verb('resource', $a); 如果
我正在为服务器应用程序完成一组 cmdlet。应用程序的一部分包括安全主体管理和数据对象管理,以及两者的“到期”(定时和手动)。在到期日期之后,安全主体的登录和访问将被拒绝,并且可以选择阻止对该主体拥
通常单词列表是 1 个包含所有内容的文件,但是是否有可单独下载的名词列表、动词列表、形容词列表等? 我特别需要它们来学习英语。 最佳答案 如果您仅从 wordnet.princeton.edu/dow
我想创建一个函数,它将一个数据框和一个包含列名的字符向量作为输入,并以安全的方式在内部使用 tidy verse 引用函数。 我相信我有一个我想做的事情的例子。我想知道是否有更优雅的解决方案或者我错误
使用 ShellExecute API,您可以指定一个动词,例如“打开”或“打印”。是否可以从命令行执行相同的操作? 最佳答案 http://www.naughter.com/shelexec.htm
在我的网站“联系我们”页面中有一个查询表单,当我提交该表单时,它会收到错误消息 405 - HTTP verb used to access this page is not allowed. The
我正在使用斯坦福解析器进行词性标记,我想从标记器所做的标记中获取名词、形容词动词、副词的单独同义词集。例如 如果我的输入查询是 “恒河是印度最大的河流,人们过去将它视为神” 标记器的输出是: “恒河/
我正在用 Python 构建一个非常简单的 REST 服务。它所做的只是接收一个 JSON 字符串,对其应用算法并发回 JSON 字符串响应。我了解 GET、POST、PUT 和 DELETE 之间的
我正在从事机器翻译项目。我需要确定句子的主语、动词、宾语才能继续我的工作。目前我正在使用斯坦福 NLP 解析器来分析句子。但我不知道如何提取 SVO。有什么我可以考虑的想法吗? 最佳答案 如果你想实现
我正在编写一个 REST 网络服务,将文本从一种语言翻译成另一种语言。文本可能相当大,最多可达几兆字节。 什么 HTTP 动词最适合使用? 我的第一个想法是使用 GET,因为它获取给定文本的翻译。但是
我是一名优秀的程序员,十分优秀!