标签: regex-lookarounds

正则表达式前瞻

我正在使用正则表达式来查找:

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)

但相反,它匹配一切.有更多正则表达式经验的人知道我哪里出错吗?之前我曾使用正则表达式进行模式匹配,但这是我第一次看到/看到前瞻性.

在此先感谢任何帮助/提示/指示:-)

regex regex-lookarounds

5
推荐指数
1
解决办法
1990
查看次数

Java正则表达式具有正面的表象和负面的表象

我从这种字符串试图提取ou=persons,ou=(.*),dc=company,dc=org立即最后一个字符串前面加一个昏迷后面没有(。*)。在最后一种情况下,应给出dc=company,dc=org

从正则表达式上看,这似乎是正面的(正面)负面看法(之前)。

因此,我已经实现了此regex:,(?<=(,(?!.*\Q(.*)\E))).*但是它,dc=company,dc=org以昏迷形式返回。我想要同样的东西而没有昏迷。我做错了什么?

java regex regex-lookarounds

5
推荐指数
1
解决办法
1276
查看次数

在正则表达式结束时Php前瞻性断言

我想写一个带有断言的正则表达式从字符串中提取数字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,并采取最后一场比赛,但我想了解为什么第一个正则表达式不起作用,我的错误在哪里.

谢谢

php regex regex-lookarounds

5
推荐指数
1
解决办法
115
查看次数

将正则表达式与可选的前瞻匹配

我有以下字符串:

NAME John Nash FROM California

NAME John Nash

我想要一个能够为两个字符串提取"John Nash"的正则表达式.

这是我试过的

"NAME(.*)(?:FROM)"
"NAME(.*)(?:FROM)?"
"NAME(.*?)(?:FROM)?"
Run Code Online (Sandbox Code Playgroud)

但这两个字符串都不起作用.

python regex regex-greedy regex-lookarounds

5
推荐指数
1
解决办法
1295
查看次数

ANTLR词法分析器规则中的语法谓词

介绍

查看文档,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)

antlr lexical-analysis antlr4 regex-lookarounds

5
推荐指数
1
解决办法
2165
查看次数

正则表达式只有在不包含字符时匹配单词(url)

我使用的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 ",而我只是想要它忽略那个断开的链接并继续前进.

几个小时一直在争吵,只是无法理解它.:(

在此先感谢您的帮助.

regex url regex-negation regex-lookarounds

5
推荐指数
1
解决办法
1173
查看次数

如何捕获正则表达式python中的两个前瞻

这是一个字符串:

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]+)。它不会捕获ADDTIONALLanguages。我在这里想念什么?

python regex regex-lookarounds

5
推荐指数
1
解决办法
990
查看次数

匹配至少一个小写字母和至少一个大写字母

我试图[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不应该匹配.

regex grep regex-lookarounds

5
推荐指数
1
解决办法
734
查看次数

正则表达式查找匹配文件扩展名的文件,除非文件名包含字符串

我为 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)

这里的智能解决方案是什么?我不是正则表达式专家,所以简短的解释也会有帮助。

regex nginx browser-cache regex-lookarounds nginx-location

5
推荐指数
1
解决办法
4477
查看次数

正则表达式负面向前看以匹配降价链接

我们陷入了正则表达式问题.

这是问题所在.考虑以下两种模式:

1) [hello] [world]

2) [hello [world]]

我们需要编写一个只能[world]在第一个匹配的正则表达式和[hello [world]]第二个匹配的整个模式().

通过使用负向前瞻,我编写了以下正则表达式,它解决了部分问题:

\[[^\[\]]+\](?!.*\[[^\[\]]+\])
Run Code Online (Sandbox Code Playgroud)

这个正则表达式匹配模式1)我们想要,但不适用于模式2).

.net regex regex-lookarounds

5
推荐指数
1
解决办法
144
查看次数