相关疑难解决方法(0)

474
推荐指数
11
解决办法
22万
查看次数

我如何编写一个与非贪婪相匹配的正则表达式?

我需要有关非贪婪选项的正则表达式匹配的帮助.

匹配模式是:

<img\s.*>
Run Code Online (Sandbox Code Playgroud)

要匹配的文字是:

<html>
<img src="test">
abc
<img
  src="a" src='a' a=b>
</html>
Run Code Online (Sandbox Code Playgroud)

我在http://regexpal.com上测试

此表达式匹配从<img最后到的所有文本>.我需要它与>初始后遇到的第一个匹配<img,所以在这里我需要得到两个匹配而不是我得到的匹配.

我尝试了所有非贪婪的?组合,没有成功.

regex non-greedy regex-greedy

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

参考 - 这个正则表达式意味着什么?

这是什么?

这是常见问答的集合.这也是社区Wiki,因此每个人都被邀请参与维护.

为什么是这样?

患的是给我泽码型的问题和答案不佳,没有解释.此参考旨在提供质量问答的链接.

范围是什么?

此引用适用于以下语言:,,,,,,.

这可能过于宽泛,但这些语言共享相同的语法.对于特定功能,它背后的语言标签,例如:

  • 什么是正则表达式平衡组?

regex

52
推荐指数
1
解决办法
11万
查看次数

如何在正则表达式中表示重复次数的修正数?

我想知道是否有更好的代表正则表达式中的重复数量.例如,如果我只想匹配14个字母/数字,我使用^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$哪个会匹配一个单词UNL075BE499135而不匹配UNL075BE499135AAA 是否有方便的方法呢?我现在正在java中这样做,但我想这可能也适用于其他语言.提前致谢.

java regex

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

`Greedy`和`Reluctant`正则表达式量词有什么区别?

来自Patternjavadocs:

Greedy quantifiers:
X?      X, once or not at all  
X*      X, zero or more times  
X+      X, one or more times  
X{n}    X, exactly n times  
X{n,}   X, at least n times  
X{n,m}  X, at least n but not more than m times

Reluctant quantifiers:
X??     X, once or not at all  
X*?     X, zero or more times  
X+?     X, one or more times  
X{n}?   X, exactly n times  
X{n,}?  X, at least n times  
X{n,m}? X, …

java regex

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

这个Java正则表达式如何检测回文?

这是一系列教育正则表达式文章的第三部分.它遵循这个正则表达式如何找到三角形数字?(首先介绍嵌套引用)和如何将^ nb ^ n与Java正则表达式匹配? (前瞻性"计数"机制进一步详述).这部分介绍了一种特定形式的嵌套断言,当与嵌套引用结合使用时,Java正则表达式可以匹配大多数人认为"不可能"的东西:回文!

回文的语言是非常规的 ; 它实际上是无上下文的(对于给定的字母表).也就是说,现代正则表达式实现不仅仅识别常规语言,Perl/PCRE的递归模式和.NET的平衡组可以很容易地识别回文(参见:相关问题).

但是,Java的正则表达式引擎既不支持这些"高级"功能.然而"某人" (*wink*)成功编写了以下正则表达式,这似乎做得很好(参见ideone.com):

public class Palindrome {
    // asserts that the entirety of the string matches the given pattern
    static String assertEntirety(String pattern) {
        return "(?<=(?=^pattern$).*)".replace("pattern", pattern);
    }

    public static void main(String[] args) {
        final String PALINDROME =
            "(?x) | (?:(.) add)+ chk"
                .replace("add", assertEntirety(".*? (\\1 \\2?)"))
                .replace("chk", assertEntirety("\\2"));

        System.out.println(PALINDROME);
        // (?x) | (?:(.) (?<=(?=^.*? (\1 \2?)$).*))+ (?<=(?=^\2$).*)

        String[] tests …
Run Code Online (Sandbox Code Playgroud)

java regex palindrome lookaround nested-reference

21
推荐指数
1
解决办法
5555
查看次数

正则表达:谁更贪婪?

我主要关心的是Java风格,但我也很欣赏有关其他人的信息.

假设你有一个像这样的子模式:

(.*)(.*)
Run Code Online (Sandbox Code Playgroud)

虽然不是很有用,但是让我们说这两个捕获组(比如说,\1\2)是一个更大的模式的一部分,它与这些组的反向引用相匹配,等等.

所以两者都是贪婪的,因为他们尽可能地捕捉,只在必要时减少.

我的问题是:谁更贪婪?是否\1优先考虑,\2仅在必要时给予其份额?

关于什么:

(.*)(.*)(.*)
Run Code Online (Sandbox Code Playgroud)

让我们假设\1确实是第一优先.让我们说它过于贪婪,然后吐出一个角色.谁先得到它?它总是\2或可以\3吗?

让我们假设这\2是被\1拒绝的.如果这仍然不起作用,谁现在吐出来?是\2\3,还是先\1吐出另一个\2


奖金问题

如果你写这样的东西会发生什么:

(.*)(.*?)(.*)
Run Code Online (Sandbox Code Playgroud)

现在\2不情愿.这是否意味着\1吐出来\3,\2只是不情愿地接受了\3拒绝?


也许我没有给出具体的例子来说明我是如何使用这些模式的,这可能是一个错误,但这里有一些:

System.out.println(
    "OhMyGod=MyMyMyOhGodOhGodOhGod"
    .replaceAll("^(.*)(.*)(.*)=(\\1|\\2|\\3)+$", "<$1><$2><$3>")
); // prints "<Oh><My><God>"

// same pattern, different input string
System.out.println(
    "OhMyGod=OhMyGodOhOhOh"
    .replaceAll("^(.*)(.*)(.*)=(\\1|\\2|\\3)+$", "<$1><$2><$3>")
); // prints "<Oh><MyGod><>"

// now \2 is reluctant
System.out.println( …
Run Code Online (Sandbox Code Playgroud)

java regex

16
推荐指数
2
解决办法
1197
查看次数

正则表达式:匹配可选单词

需要匹配句子的第一部分,直到给定的单词.但是,该单词是可选的,在这种情况下,我想匹配整个句子.例如:

我有一句话,附有我不想要的条款.

我有一句话,我喜欢它.

在第一种情况下,我想要"I have a sentence".在第二种情况下,我想要"I have a sentence and I like it."

Lookarounds将给我第一个案例,但是一旦我尝试使其成为可选项,为了涵盖第二个案例,我得到了整个第一句话.我试过让表达懒惰......没有骰子.

适用于第一种情况的代码:

var regEx = new Regex(@".*(?=with)");
string matchstr = @"I have a sentence with a clause I don't want";

if (regEx.IsMatch(matchstr)) {
    Console.WriteLine(regEx.Match(matchstr).Captures[0].Value);
    Console.WriteLine("Matched!");
}
else {
    Console.WriteLine("Not Matched : (");
}
Run Code Online (Sandbox Code Playgroud)

我希望的表达方式:

var regEx = new Regex(@".*(?=with)?");
Run Code Online (Sandbox Code Playgroud)


有什么建议?

提前致谢!
詹姆士

c# regex

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

方法匹配不好用

我不明白为什么这个正则表达式返回false;

Pattern.matches("\\bi", "an is");
Run Code Online (Sandbox Code Playgroud)

我在角落边界的角色!

java regex

6
推荐指数
2
解决办法
4458
查看次数

正则表达式:匹配字符串从单词到单词

我想从一段文本中提取一个字符串。该字符串必须以某个字符串结尾。

例:

词1 =“你好”
词2 =“世界”

文本:

Hello, this is a sentence.
The whole World can read this.
What World?
Run Code Online (Sandbox Code Playgroud)

我要提取的文本是:

Hello, this is a sentence.
The whole World
Run Code Online (Sandbox Code Playgroud)

我应该使用哪种常规异常来提取字符串。

注意:字符串“ World”出现两次。

谢谢

regex

6
推荐指数
1
解决办法
1123
查看次数