标签: quantifiers

JavaScript:正则表达式中的无效量词

正则表达式是动态构建的,但我将它输出到firebug:

(.{1,38})(+|$\n?)
Run Code Online (Sandbox Code Playgroud)

错误是

invalid quantifier +|$\n?)
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始.

实际代码是:

var re = top.RegExp;
var regex = new re("(.{1," + len + "})(+|$\\n?)", "gm");
Run Code Online (Sandbox Code Playgroud)

更新: 根据Bennor McCarthy的说明,我将代码更改为:

 var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm");
Run Code Online (Sandbox Code Playgroud)

Firebug仍然告诉我这个:

invalid quantifier +|$\n?)
[Break on this error] var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm"); 
Run Code Online (Sandbox Code Playgroud)

另一个更新 看起来像我必须加倍削减它,这解决了问题!

最终代码

var regex = new re("(.{1," + len + "})(\\+|\\$\\n?)", "gm");
Run Code Online (Sandbox Code Playgroud)

javascript regex quantifiers

8
推荐指数
1
解决办法
2万
查看次数

为什么我使用这些 Raku 正则表达式得到不同的回溯?

我意外地回溯+了 Raku 正则表达式的量词。

在这个正则表达式中:

'abc' ~~ m/(\w+) {say $0}  <?{ $0.substr(*-1) eq 'b' }>/;

say $0;
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果:

?abc?  # inner say
?ab?   # inner say

?ab?   # final say
Run Code Online (Sandbox Code Playgroud)

也就是说,(贪婪)+量词获取所有字母,然后条件失败。之后它通过释放最后一个得到的字母开始回溯,直到条件评估为真。

但是,当我将量词放在捕获组之外时,回溯似乎不会以相同的方式工作:

'abc' ~~ m/[(\w)]+ {say $0}  <?{ $0.tail eq 'b' }>/;

say $0;
Run Code Online (Sandbox Code Playgroud)

结果:

[?a? ?b? ?c?]  # inner say
[?a? ?b? ?c?]  # why this extra inner say? Shouldn't this backtrack to [?a? ?b?]?
[?a? ?b? ?c?]  # why this extra inner say? Shouldn't this …
Run Code Online (Sandbox Code Playgroud)

regex rakudo quantifiers raku

8
推荐指数
1
解决办法
154
查看次数

序言中的普遍和存在量词

如何在prolog中实现以下规则.

我写的"没有蜘蛛是哺乳动物"的句子是存在主义和普遍的:

¬?x(mammals(X) ? spider(X) ) //It is not the case that mammals are spider

?X(mammals(X) ? ¬spider(X)) //All mammals are non-spider.
Run Code Online (Sandbox Code Playgroud)

prolog existential-type universal quantifiers

7
推荐指数
1
解决办法
3831
查看次数

替代python中的占有量词

我试图匹配所有出现的字符串Article后跟一个数字(单个或多个数字),后面没有一个左括号.在Sublime Text中,我使用以下正则表达式:

Article\s[0-9]++(?!\()
Run Code Online (Sandbox Code Playgroud)

搜索以下字符串:

Article 29
Article 30(1)
Run Code Online (Sandbox Code Playgroud)

哪个不匹配Article 30(1)(正如我预期的那样)但是Article 29Article 1.

尝试在Python(3)中使用时也一样

import re
article_list = re.findall(r'Article\s[0-9]++(?!\()', "Article 30(1)")
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,因为我正在使用Python正则表达式不支持的(嵌套)所有格量词.有没有办法匹配我想要它(不)在Python中匹配?

python regex quantifiers

7
推荐指数
2
解决办法
1107
查看次数

量词范围不适用于后视

好的,所以我正在开发一个项目,我需要一个正则表达式,可以匹配*后跟1-4个空格或制表符,然后是一行文本.现在我正在使用.*在观察后进行测试.但是我可以让它明确匹配1,2或4个空格/制表符,但不能匹配1-4.我正在测试以下块

*    test line here
*   Second test
*  Third test
* Another test
Run Code Online (Sandbox Code Playgroud)

这些是我正在测试的两种模式(?<=(\*[ \t]{3})).*,它们按照预期工作并匹配第二行,如果我用1,2或4替换3,那么如果我用1,4替换它形成以下模式(?<=(\*[ \t]{1,4})).*它不再匹配任何行和我老实说无法理解为什么.我试过谷歌搜索没有成功.我正在使用g(lobal)旗帜.

php regex lookbehind quantifiers

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

正则表达式,组和量词

我刚刚在http://regexcrossword.com/上做了有趣的正则表达式填字游戏- 并且发现我不明白量化群体意味着什么,例如(.)+或(.)*

让我试试http://ole.michelsen.dk/tools/regex.html,它提供了JavaScript和PHP正则表达式引擎:

要匹配的字符串是"Trololo!" (不带引号).(如果打开"全局匹配"改变了某些东西,它会被添加为引导版本,即JS',因为它在PHP模式下没有任何改变.)

JS,  (.)+ => 0: Trololo! 1: ! 
JS', (.)+ => 0: Trololo! 
PHP, (.)+ => 0: Trololo! 0: ! 
JS,  (.)* => 0: Trololo! 1: ! 
JS', (.)* => 0: Trololo! 
PHP, (.)* => 0: Trololo! 1: 0: ! 1: 
JS,  (.){5} => 0: Trolo 1: o 
JS', (.){5} => 0: Trolo 
PHP, (.){5} => 0: Trolo 0: o 
JS,  (.){4} => 0: Trol 1: l 
JS', (.){4} => 0: Trol …
Run Code Online (Sandbox Code Playgroud)

javascript php regex regex-group quantifiers

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

*Perl 6中的量词

这似乎是我在这里不理解的非常基本的东西.

为什么不"babc"匹配/ a * /

> "abc" ~~ / a /
?a?
> "abc" ~~ / a * /
?a?
> "babc" ~~ / a * /
??                    # WHY?
> "babc" ~~ / a + /
?a?
Run Code Online (Sandbox Code Playgroud)

regex match perl6 quantifiers

5
推荐指数
2
解决办法
117
查看次数

为什么惰性量词后跟问号时会变得贪婪?

为什么"hello".match(/^(.*?)?/)[0]评估为 to"h"而不是 to ""

换句话说,为什么遵循(.*?)带有零或一量词的惰性表达式会?使其变得有点贪婪?

javascript regex quantifiers

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

*+量词究竟做了什么?

懒惰和贪婪的想法很容易理解,但我只*+在我的正则表达式中使用过一次(在Java中)[A]|[^B]*+(?!C)(A,B,C是任意值),因为它在惰性修饰符导致StackOverflow错误时起作用.

由于大多数搜索引擎无法搜索符号,我找不到任何关于此的文档.那么*+究竟做了什么以及如何做到这一点?

regex quantifiers

4
推荐指数
1
解决办法
264
查看次数

同一个正则表达式中的两个贪婪量词

如果我有一个未知的结构字符串:

"stuff I don't care about THING different stuff I don't care about THING ... THING even more stuff I don't care about THING stuff I care about"

我想捕捉"我关心的东西",它总是在最后一次出现之后.有可能出现0次或多次.如果有0次出现则没有我关心的东西.字符串不能以THING开头或结尾.

一些可能的字符串

"stuff I don't care about THING stuff I care about"

"stuff I don't care about"

一些不可能的字符串:

"THING stuff I care about"

"stuff I don't care about THING stuff I don't care about THING"


我目前解决这个问题的方法是使用带有两个贪心量词的正则表达式,如下所示:

if( /.*THING(.*)/ ) {
    $myStuff = $1;
}
Run Code Online (Sandbox Code Playgroud)

它似乎有效,但我的问题是两个贪婪量词如何相互作用.第一个(最左边)贪婪量词总是"比第二个更贪婪"吗?

基本上我保证不会得到如下分割:

"stuff I don't care about THING" …

regex perl greedy quantifiers regex-greedy

4
推荐指数
1
解决办法
142
查看次数