小编And*_*ist的帖子

Python非贪婪的正则表达式

我如何使python正则表达式像"(.*)"这样,给定"a(b)c(d)e"python匹配"b"而不是"b"c(d"?

我知道我可以使用"[^)]"而不是".",但我正在寻找一种更通用的解决方案,让我的正则表达式更清洁.有没有办法告诉python"嘿,尽快匹配"?

python regex regex-greedy

133
推荐指数
6
解决办法
8万
查看次数

Notepad ++非贪婪的正则表达式

Notepad ++是否支持非贪婪的正则表达式?

例如文字:

abcxadc
Run Code Online (Sandbox Code Playgroud)

我想用模式获取零件:

a.+c
Run Code Online (Sandbox Code Playgroud)

现在我得到整个字符串而不是2个部分.我试过用'?' 运营商但没有成功.

regex notepad++ regex-greedy

57
推荐指数
3
解决办法
3万
查看次数

正则表达式中的问号

我正在阅读正则表达式参考,我正在考虑?和?? 字符.你能用一些例子向我解释一下它们的用处吗?我不够了解他们.

谢谢

regex regex-greedy

38
推荐指数
4
解决办法
4万
查看次数

为什么默认情况下正则表达式贪婪?

对于初学者编写正则表达式来说,这似乎是一个巨大的混乱源,可能会导致隐藏的性能问题,并且看起来典型的用例将是非贪婪的.

这只是出于遗留原因(它是如何首次完成的,每个实现都复制了),还是有原因的?

regex language-design regex-greedy

31
推荐指数
3
解决办法
2386
查看次数

如果输入名称是"提交",如何使用Javascript发送表单?

问题:如果一个表单输入有名称,submit如何使用Javascript发送表单?

背景:我正在将用户重定向到另一个带有隐藏HTML表单的页面.我无法更改(隐藏)输入上的名称,因为另一个页面位于另一台服务器上,输入需要完全按原样.我的HTML表单如下所示:

<form id="redirectForm" method="post" action="http://www.example.com/">
  <input name="search" type="hidden" value="search for this" />
  <input name="submit" type="hidden" value="search now" />
</form>
Run Code Online (Sandbox Code Playgroud)

我今天使用以下javascript行自动发送表单:

document.getElementById('redirectForm').submit();
Run Code Online (Sandbox Code Playgroud)

但是,由于一个输入的名称是"submit"(它不能是其他内容,或者其他服务器不会处理请求),document.getElementById('redirectForm').submit因此它会引用输入,因为它会覆盖表单函数submit().

Firefox中的错误消息是:Error: document.getElementById("requestform").submit is not a function.Safari中的类似错误消息.

html javascript form-submit

19
推荐指数
2
解决办法
3136
查看次数

在分隔符之间匹配文本:贪婪或懒惰的正则表达式?

对于在分隔符(例如<>)之间匹配文本的常见问题,有两种常见的模式:

  • 使用形式中的贪婪*+量词START [^END]* END,例如<[^>]*>,或
  • 使用形式中的惰性*?+?量词START .*? END,例如<.*?>.

是否有一个特别的理由支持一个而不是另一个?

regex language-agnostic greedy regex-greedy

17
推荐指数
3
解决办法
2369
查看次数

正则表达式:懒惰更糟吗?

我总是写这样的正则表达式

<A HREF="([^"]*)" TARGET="_blank">([^<]*)</A>
Run Code Online (Sandbox Code Playgroud)

但我刚刚了解了这个懒惰的东西,我可以这样写

<A HREF="(.*?)" TARGET="_blank">(.*?)</A>
Run Code Online (Sandbox Code Playgroud)

使用第二种方法有什么不利之处吗?正则表达式肯定更紧凑(即使SO更好地解析它).

编辑:这里有两个最佳答案,指出表达式之间的两个重要差异.ysth的答案指向非贪婪/懒惰的弱点,其中超链接本身可能包含A标签的其他属性(绝对不好).Rob Kennedy在贪婪的例子中指出了一个弱点,因为锚文本不能包含其他标签(绝对不行,因为它也不会抓住所有的锚文本)......所以答案是,正则表达式就是他们的是,懒惰和非懒惰的解决方案似乎相同可能在语义上不等同.

编辑:第三个最佳答案是Alan M关于表达式的相对速度.暂时,我会将他标记为最佳答案,以便人们给他更多积分:)

regex non-greedy reluctant-quantifiers regex-greedy

12
推荐指数
3
解决办法
1315
查看次数

正则表达式表现得很懒,应该是贪心的

我认为默认情况下我的正则表达式会展示我想要的贪婪行为,但它不在以下代码中:

 Regex keywords = new Regex(@"in|int|into|internal|interface");
 var targets = keywords.ToString().Split('|');
 foreach (string t in targets)
    {
    Match match = keywords.Match(t);
    Console.WriteLine("Matched {0,-9} with {1}", t, match.Value);
    }
Run Code Online (Sandbox Code Playgroud)

输出:

Matched in        with in
Matched int       with in
Matched into      with in
Matched internal  with in
Matched interface with in
Run Code Online (Sandbox Code Playgroud)

现在我意识到,如果我只是按照长度降序对关键字进行排序,我可以让它为这个小例子工作

  • 我想知道为什么这不能按预期工作,并且
  • 我正在处理的实际项目在正则表达式中有更多的单词,并且按字母顺序保留它们非常重要.

所以我的问题是:为什么这是懒惰的,我该如何解决?

regex greedy non-greedy alternation regex-greedy

10
推荐指数
2
解决办法
999
查看次数

正则表达非常贪婪

我有以下文字

tooooooooooooon
Run Code Online (Sandbox Code Playgroud)

根据我正在阅读的这本书,当?任何量词之后,它变得非贪婪.

我的正则表达式to*?n仍在回归tooooooooooooon.

它应该回归ton不应该吗?

知道为什么吗?

regex regex-greedy

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

尽管执行了Ajax请求并且服务器返回带有数据的200,但调用了失败回调

我有一个test.html带缓存清单的HTML5测试网页.该网页对同一服务器,对缓存清单中do_get_data.php的部分NETWORK:下列出的网页执行Ajax请求.

该请求由Firefox 10和iPhone iOS 5 Safari执行(这在服务PHP脚本中记录do_get_data.php).Firefox 10 success在10秒后调用回调函数,即返回服务器的数据.但是,我的iPhone iOS 5 Safari fail在启动请求后立即调用回调函数,并且不调用success回调函数.

对于iPhone的iOS 5 Safari浏览器中,textStatuserrorJSON.stringify(jqXHR){"readyState":0,"responseText":"","status":0,"statusText":"error"}.

请求使用以下代码执行test.html:

<script type="text/javascript">
    function test_ok(data) {
        alert('Test OK, data: ' + JSON.stringify(data));
    }
    function testFail(jqXHR, textStatus) {
        alert(textStatus + ' | ' + JSON.stringify(jqXHR));
    }
    function get_data(testurl) {
        var senddata, request;
        alert('Request for ' + testurl + ' started.');
        window.testid = new Date().getTime(); …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery html5 cache-manifest

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