我最近在PCRE
- (Perl兼容的正则表达式)文档中阅读并且遇到了一些有规则表达的有趣技巧.当我继续阅读并耗尽自己时,我因为使用一些(*...)
模式而产生了一些混乱而停止了.
我的问题和困惑与(*PRUNE)
和(*FAIL)
现在对于参考(*SKIP)
行为(*PRUNE)
,除了如果模式是未锚定的,则不等于前一个字符,而是到达主题中遇到的位置(*SKIP)
.
文档说明如果模式的其余部分不匹配,则(*PRUNE)
导致匹配在主题中的当前起始位置失败.它表示否定断言的(*FAIL)
同义词(?!)
.在模式中的给定位置强制匹配失败.
所以基本上(*FAIL)
表现得像一个失败的否定断言,并且是一个同义词(?!)
并且如果存在导致回溯到达的后续匹配故障,则导致匹配在主题(*PRUNE)
中的当前起始位置处失败.
当谈到失败的时候,这些有何不同?
任何人都可以提供如何正确实施和使用这些示例吗?
我一直搞乱了正则表达式..我觉得我很难......我看过一个代码:
function myFunction() {
var str = "Is this all there is";
var patt1 = /is(?= all)/;
var result = str.match(patt1);
document.getElementById("demo").innerHTML = result;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它给了我输出is
.
但当我添加喜欢/is(?=there)/
它没有输出任何东西.我是正规表达的新手..希望你们可以帮助理解正则表达式中的积极前瞻.我已经按照许多教程它没有帮助我.
希望你们能帮助我.谢谢!
我需要一个正则表达式,如果它以我正在寻找的目标结束,它只会匹配String.我需要找到一个具有特定扩展名的文件,问题是这个扩展名还包含在其他文件中.例如,我有两个名为的文件
B82177_2014-07-08T141507758Z.ccf
Run Code Online (Sandbox Code Playgroud)
和
B82177_2014-07-08T141507758Z.ccf.done
Run Code Online (Sandbox Code Playgroud)
我只想抓住第一个,我的模式是:
.*\.ccf
Run Code Online (Sandbox Code Playgroud)
但这抓住了两者.
任何建议表示赞赏,我是正则表达式的新手.
我已经搜索过并且能够找到此论坛讨论以实现重叠匹配的效果.
我还发现了以下SO问题,即找到索引来执行此任务,但是无法找到任何关于在R语言中抓取重叠匹配的简洁信息.
我可以在支持(PCRE)的大多数语言中通过使用正向前端断言执行此任务,同时在先行内部实现捕获组以捕获重叠的匹配.
但是,虽然实际执行此操作的方式与其他语言相同,但perl=T
在R中使用时,结果不会产生.
> x <- 'ACCACCACCAC'
> regmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
使用stringi
和stringr
包都是一样的.
> library(stringi)
> library(stringr)
> stri_extract_all_regex(x, '(?=([AC]C))')[[1]]
[1] "" "" "" "" "" "" ""
> str_extract_all(x, perl('(?=([AC]C))'))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
执行此操作时应返回的正确结果是:
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
Run Code Online (Sandbox Code Playgroud)
我很清楚,regmatches
对于捕获的匹配不能很好地工作,但是在regmatches中究竟是什么导致了这种行为?为什么没有返回结果?我正在寻找一个有点详细的答案.
是stringi
和 …
regex_token_iterator和regex_iterator之间有什么区别吗?
看来他们都做同样的工作,但不确定哪一个是更好的表现?
我有一个文本文件,其中包含有关录音的信息,包括曲目编号和名称,我想删除除曲目编号和曲目名称之外的所有其他文本.例如,文本文件如下所示:
text text text text
text text text text text text text text
text text text text text text text text text text text text
text text text text
text text text text text text text text
text text text text
text text text text text text text text text text text text text text text text
text text text text text text text text
text text text text
d1t01 - trackname
d1t02 - trackname
d1t03 - trackname
d1t04 - …
Run Code Online (Sandbox Code Playgroud) 我见过很多提取 w/ 的迭代,gsub
但它们主要处理从左到右或在一次发生后提取。我想从右到左匹配,计算 4 次出现-
,匹配第 3 次和第 4 次出现之间的所有内容。
例如:
string outcome
here-are-some-words-to-try some
a-b-c-d-e-f-g-h-i f
Run Code Online (Sandbox Code Playgroud)
以下是我尝试使用的一些参考资料:
假设我有一个字符串,例如以下内容.
x <- 'The world is at end. What do you think? I am going crazy! These people are too calm.'
Run Code Online (Sandbox Code Playgroud)
我只需要在标点符号!?.
和后跟空格上进行拆分并保留标点符号.
这会删除标点并在分割部分留下前导空格
vec <- strsplit(x, '[!?.][:space:]*')
Run Code Online (Sandbox Code Playgroud)
如何分割留下标点符号的句子?
我有这样的数字需要删除前导零.
这就是我需要的:
00000004334300343
- > 4334300343
0003030435243
- > 3030435243
由于我不熟悉正则表达式,所以我无法理解这一点.这不起作用:
(^0)
Run Code Online (Sandbox Code Playgroud) 我得到了一个像这样的字符串(Joomla all video plugin)
{Vimeo}123456789{/Vimeo}
Run Code Online (Sandbox Code Playgroud)
其中123456789是可变的,我该如何提取?我应该使用正则表达式吗?