我正在使用正则表达式来查找:
test:?
Run Code Online (Sandbox Code Playgroud)
跟随任何角色,直到它击中下一个角色:
test:?
Run Code Online (Sandbox Code Playgroud)
现在,当我运行这个正则表达式时,我做了:
((?:test:\?)(.*)(?!test:\?))
Run Code Online (Sandbox Code Playgroud)
在这篇文章中:
test:?foo2=bar2&baz2=foo2test:?foo=bar&baz=footest:?foo2=bar2&baz2=foo2
Run Code Online (Sandbox Code Playgroud)
我期望得到:
test:?foo2=bar2&baz2=foo2
test:?foo=bar&baz=foo
test:?foo2=bar2&baz2=foo2
Run Code Online (Sandbox Code Playgroud)
但相反,它匹配一切.有更多正则表达式经验的人知道我哪里出错吗?之前我曾使用正则表达式进行模式匹配,但这是我第一次看到/看到前瞻性.
在此先感谢任何帮助/提示/指示:-)
我从这种字符串试图提取ou=persons,ou=(.*),dc=company,dc=org立即最后一个字符串前面加一个昏迷后面没有(。*)。在最后一种情况下,应给出dc=company,dc=org。
从正则表达式上看,这似乎是正面的(正面)负面看法(之前)。
因此,我已经实现了此regex:,(?<=(,(?!.*\Q(.*)\E))).*但是它,dc=company,dc=org以昏迷形式返回。我想要同样的东西而没有昏迷。我做错了什么?
我想写一个带有断言的正则表达式从字符串中提取数字55 unknownstring/55.1,这是我的正则表达式
$str = 'unknownstring/55.1';
preg_match('/(?<=\/)\d+(?=\.1)$/', $str, $match);
Run Code Online (Sandbox Code Playgroud)
所以,基本上我想说的是给我斜线后面的数字,然后是一个点和数字1,之后就没有字符了.但它与正则表达式不匹配.我只是试图$从最后删除标志,它匹配.但是这个条件是必不可少的,因为我需要将它作为字符串的结尾,因为该unknownstring部分可以包含类似的文本,例如unknow/545.1nstring/55.1.也许我可以使用preg_match_all,并采取最后一场比赛,但我想了解为什么第一个正则表达式不起作用,我的错误在哪里.
谢谢
我有以下字符串:
NAME John Nash FROM California
NAME John Nash
我想要一个能够为两个字符串提取"John Nash"的正则表达式.
这是我试过的
"NAME(.*)(?:FROM)"
"NAME(.*)(?:FROM)?"
"NAME(.*?)(?:FROM)?"
Run Code Online (Sandbox Code Playgroud)
但这两个字符串都不起作用.
查看文档,ANTLR 2曾经有一个称为谓词词法的东西,例如这样的例子(受Pascal启发):
RANGE_OR_INT
: ( INT ".." ) => INT { $setType(INT); }
| ( INT '.' ) => REAL { $setType(REAL); }
| INT { $setType(INT); }
;
Run Code Online (Sandbox Code Playgroud)
我的看法是,在规则开始处本质上是一个肯定的前瞻性断言:如果前瞻性匹配INT "..",则将应用第一个规则(并匹配该INT输入的部分),依此类推。
我尚未在ANTLR 4中找到类似的东西。在2至3的迁移指南似乎不同时提此,3〜4的变化记录状态:
ANTLR 3和4之间的最大区别是ANTLR 4可以采用您提供的任何语法,除非该语法具有间接左递归。这意味着我们不需要语法谓词或回溯,因此ANTLR 4不支持该语法。您会收到使用警告。
如果我基本上保持原样,这与我收到的错误消息是一致的:
(...)=> syntactic predicates are not supported in ANTLR 4
Run Code Online (Sandbox Code Playgroud)
虽然我可以理解更智能的解析器实现将如何解决这些歧义,但是我看不到这对词法分析器将如何工作。
可以肯定的是,让我们尝试一下:
grammar Demo;
prog: atom (',' atom)* ;
atom: INT { System.out.println("INT: " + $INT.getText()); } …Run Code Online (Sandbox Code Playgroud) 我使用的API有时会截断它返回的文本中的链接,而不是"longtexthere https://fancy.link "我得到"longtexthere https:// fa ...".
我只是在完成链接时,或者换句话说不包含"..."字符.
到目前为止,我可以使用以下正则表达式获取链接:
((?:https?:)?\/\/\S+\/?)
Run Code Online (Sandbox Code Playgroud)
但显然它会返回每个链接,包括破碎的链接.
我试过这样的事情:
((?:https?:)?\/\/(?:(?!…)\S)+\/?)
Run Code Online (Sandbox Code Playgroud)
虽然开始忽略"..."字符,但它仍然返回链接,但只是没有包含字符,因此在" https:// fa ..." 的情况下,它返回" https:// fa ",而我只是想要它忽略那个断开的链接并继续前进.
几个小时一直在争吵,只是无法理解它.:(
在此先感谢您的帮助.
这是一个字符串:
str = "Academy \nADDITIONAL\nAwards and Recognition: Greek Man of the Year 2011 Stanford PanHellenic Community, American Delegate 2010 Global\nEngagement Summit, Honorary Speaker 2010 SELA Convention, Semi-Finalist 2010 Strauss Foundation Scholarship Program\nComputer Skills: Competency: MATLAB, MySQL/PHP, JavaScript, Objective-C, Git Proficiency: Adobe Creative Suite, Excel\n(highly advanced), PowerPoint, HTML5/CSS3\nLanguages: Fluent English, Advanced Spanish\n\x0c"
Run Code Online (Sandbox Code Playgroud)
我想从“ ADDTIONAL”捕捉到“ Languages”,所以我写了这个正则表达式:
regex = r'(?<=\n(ADDITIONAL|Additional)\n)[\s\S]+?(?=\n(Languages|LANGUAGES)\n*)'
Run Code Online (Sandbox Code Playgroud)
但是,它只能捕获介于两者之间的所有内容([\s\S]+)。它不会捕获ADDTIONAL&Languages。我在这里想念什么?
我试图[a-zA-Z]+用一个约束提取单词:一个单词必须包含至少一个小写字母和至少一个大写字母(在单词内的任何位置).示例:如果输入hello 123 worLD,则唯一匹配应该是worLD.
我尝试使用这样的正向前瞻:
echo "hello 123 worLD" | grep -oP "(?=.*[a-z])(?=.*[A-Z])[a-zA-Z]+"
hello
Run Code Online (Sandbox Code Playgroud)
这是不正确的:唯一的匹配是hello代替worLD.然后我尝试了这个:
echo "hello 123 worLD" | grep -oP "\K((?=.*[a-z])(?=.*[A-Z])[a-zA-Z]+)"
hello
worLD
Run Code Online (Sandbox Code Playgroud)
这仍然是错误的:hello不应该匹配.
我为 nginx 中的特定文件启用了缓存,如下所示:
location ~* \.(?:css|js)$ {
access_log off;
add_header Cache-Control "no-transform,public,max-age=31536000,s-max-age=31536000";
expires 1y;
}
Run Code Online (Sandbox Code Playgroud)
我想在这里做的是排除所有与模式 i18n-*.js 匹配的文件,因此,缓存除以 i18n 开头的文件之外的所有 .js 文件。
我尝试进行否定查找以排除该模式,但由于非捕获组,它无法正常工作:
location ~* \.(?!i18n-.*\.js)(?:css|js)$ {
access_log off;
add_header Cache-Control "no-transform,public,max-age=31536000,s-max-age=31536000";
expires 1y;
}
Run Code Online (Sandbox Code Playgroud)
这里的智能解决方案是什么?我不是正则表达式专家,所以简短的解释也会有帮助。
我们陷入了正则表达式问题.
这是问题所在.考虑以下两种模式:
1) [hello] [world]
2) [hello [world]]
我们需要编写一个只能[world]在第一个匹配的正则表达式和[hello [world]]第二个匹配的整个模式().
通过使用负向前瞻,我编写了以下正则表达式,它解决了部分问题:
\[[^\[\]]+\](?!.*\[[^\[\]]+\])
Run Code Online (Sandbox Code Playgroud)
这个正则表达式匹配模式1)我们想要,但不适用于模式2).