【问题标题】:Right RegEx Syntax正确的正则表达式语法
【发布时间】:2016-08-18 20:35:08
【问题描述】:

我想匹配这个字符串:

<Array value="Default">
<Element value="5"/>

我尝试了负前瞻:

^((?!^\<Array value\=\"[a-zA-ZäöüßÄÖÜ]+\"\>).)
^((?!^\<Element value\=\"[0-9]+\"\/\>).)*$

例如,如果我删除标记“>”,则匹配为真。但在任何情况下都是错误的。

如果我试试这个比赛

^((?!^\<Array value\=\"[a-zA-ZäöüßÄÖÜ]+\"\>).)*$

到这个字符串(我已经删除了令牌'>')

<Array value="Default"

然后就出来了,这是真的。所以我认为失败是这个正则表达式的两行

^((?!^\<Array value\=\"[a-zA-ZäöüßÄÖÜ]+\"\>).)
^((?!^\<Element value\=\"[0-9]+\"\/\>).)*$

组合为假。

有人可以解决我的问题吗?

对不起,我的英语不好!

【问题讨论】:

  • 您使用什么正则表达式风格(来自什么编程语言)?你到底想要什么结果?匹配整个字符串并使用组来访问值比使用前瞻并仅匹配值更容易。
  • 我使用 Java。我想测试这些字符串是否具有正确的语法并且没有错误的字母或其他类似的东西。例如,“
  • 如果有解决您的问题的答案,请不要忘记接受。您可以通过单击其中一个左侧的灰色勾号来执行此操作。

标签: regex pattern-matching match regex-negation nsregularexpression


【解决方案1】:

EDIT 我认为您不需要 Negative Lookahead 来匹配整个字符串。你可以试试:

<Array\s+value="[^"]+">\s+<Element\s+value="[^"]+"\/>

REGEX 101 DEMO

【讨论】:

  • 您可以将[^"]+ 替换为.+? 并且您对双引号字符的转义不一致。您还应该对允许或需要空格的地方更加友好。
  • 感谢您指出双引号的不一致问题。 [^"]+.+?是有区别的;后者不匹配换行符。
  • 如果点 . 也匹配换行符,则会触发一个标志。这样,.+? 也可以在中间有换行符的情况下工作。但是,我不希望在这里出现这种特殊情况。
  • 这行得通。但是当我想匹配每一行时我需要做什么。例如,这个字符串:&lt;Array value="Default"&gt; &lt;Element value="8"/&gt; &lt;Element value="7"/&gt;
  • 非常感谢。当这个字符串由&lt;/Array&gt; 关闭时我必须做什么?像这样&lt;Array value="Default"&gt; &lt;Element value="8"/&gt; &lt;Element value="7"/&gt; &lt;/Array&gt;
【解决方案2】:

您可以使用此模式在结果匹配中将两个值作为组来获取。请注意,您可能必须设置正则表达式实现的多行标志。

^\s*<\s*Array\s+value\s*=\s*"(.+?)"\s*>\s*<\s*Element\s+value\s*=\s*"(.+?)"\s*/?\s*>\s*$

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 2019-02-24
    • 2012-05-06
    • 2011-07-19
    • 2014-08-01
    • 1970-01-01
    • 2011-03-22
    • 2011-08-23
    相关资源
    最近更新 更多