我正在学习正则表达式的高级用法,并注意到许多帖子使用(*SKIP)或(*F)在其中.
我发布了一个问题,其中的想法是匹配没有yellow但blue只有brown在蓝色之后存在的行.正确的答案是:
.*yellow.*(*SKIP)(*F)|^.*\bblue\b(?=.*brown).*$
Run Code Online (Sandbox Code Playgroud)
我也尝试了下面的外观表达式但是并没有适用于所有情况:
^((?!yellow).)*blue(?=.*brown).*$
Run Code Online (Sandbox Code Playgroud)
我不知道这些(*SKIP)(*F)标志,所以问题是,这些标志如何工作?他们在做什么?还有其他这样的旗帜吗?
谢谢.
我有以下示例数据集:
XYZ 185g
ABC 60G
Gha 20g
Run Code Online (Sandbox Code Playgroud)
如何删除字符串"185g", "60G", "20g"而不意外删除主单词中的字母 g 和 G?我尝试了下面的代码,但它也替换了主要单词中的字母。
a <- str_replace_all(a$words,"[0-9]"," ")
a <- str_replace_all(a$words,"[gG]"," ")
Run Code Online (Sandbox Code Playgroud) 如何编写一个正则表达式,在字符串中发现错误的逗号用法,即:1.对于非数字,之前没有空格,之后有1个空格; 2.对于数字,如果前面有1-3位数字,后跟3位数字,则允许使用逗号.
一些测试用例:
因此我认为我有一个正则表达式来捕获语法错误的单词(?![\S\D],[\S\D])(捕获非空格/数字后面跟着非空格/数字的逗号),并将其与另一个正则表达式连接以捕获数字不良语法,通过(?!(.?^(?:\d+|\d{1,3}(?:,\d{3}))(?:.\d+).把它放在一起得到了我
preg_match_all("/(?![\S\D],[\S\D])|(?!(.*?^(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d+)?$))/",$str,$syntax_result);
..但显然它不起作用.应该怎么做?
================编辑================
感谢Casimir et Hippolyte的回答,我得到了它的工作!我已经更新了他的答案,以处理更多的角落案件.Idk如果我添加的语法是最有效的,但它现在可以工作.我会更新这个,因为更多的角落案件出现了!
$pattern = <<<'LOD'
~
(?: # this group contains allowed commas
[\w\)]+,((?=[ ][\w\s\(\"]+)|(?=[\s]+)) # comma between words or line break
|
(?<=^|[^\PP,]|[£$\s]) [0-9]{1,3}(?:,[0-9]{3})* (?=[€\s]|[^\PP,]|$) # thousands separator
) (*SKIP) (*FAIL) # make the pattern fail and forbid backtracking
| , # other commas
~mx
LOD;
Run Code Online (Sandbox Code Playgroud) 我有一段经文,而且有数字.我希望每个编号的诗歌都在单独的行中,所以我在它们之前添加一个新行,但我有一些括号也有数字.它们也被新线代替.我不想匹配括号内的数字.我用了
$_=~s/(\d+)/\n$1 /gs;
Run Code Online (Sandbox Code Playgroud)
有了这个输入:
1Hello2Hai (in 2:3) 3hi 4 bye
Run Code Online (Sandbox Code Playgroud)
但它也取代了paranthesis里面的数字.
所需输出:
1 Hello
2 Hai (in 2:3)
3 hi
4 bye
Run Code Online (Sandbox Code Playgroud)
实际产量:
1 Hello
2 Hai (in
2:
3)
3 hi
4 bye
Run Code Online (Sandbox Code Playgroud)
如何构造正则表达式,使其与括号内不匹配.我用perl的是regex.
我的输入向量是
'salesman snow "rain check" "Radio shack"'
Run Code Online (Sandbox Code Playgroud)
我正在寻找的答案是
"salesman" "snow" "rain check" "Radio shack"
Run Code Online (Sandbox Code Playgroud)
试着
strsplit(vector, " ")
Run Code Online (Sandbox Code Playgroud) 我有一个文件app.log
Oct 06 03:51:43 test test
Nov 06 15:04:53 text text text
more text more text
Nov 06 15:06:43 text text text
Nov 06 15:07:33
more text more text
Nov 06 15:14:23 test test
more text more text
some more text
Nothing but text
some extra text
Nov 06 15:34:31 test test test
Run Code Online (Sandbox Code Playgroud)
我如何使用11月06日开始的所有线路?
我试过了
grep -En "^[^Nov 06]" app.log
Run Code Online (Sandbox Code Playgroud)
我无法获得其中有06的线条.