【问题标题】:Regular Expression: Match everything except one specific character正则表达式:匹配除一个特定字符之外的所有内容
【发布时间】:2018-09-14 09:54:44
【问题描述】:

我试图做出一个具体的表达,但我无法解决我的实际问题。也许你们中的一些人可以...

我有字符串:

<!ENTITY a0 "dosdosdosdosdosdosdosdosdosdosdosdosdosdos"

现在我想匹配引号之间的所有内容(至少 10 个字符),除了引号。

我开始:

"(.{10,}?)" 

乍一看,这匹配得很好,但是这也匹配了下面的字符串,这对我来说是错误的。

<!ENTITY a0 "dosd" 
<!ENTITY a0 "osdos"

匹配从第一行的第一个引号开始,到最后一行的最后一个引号结束。

我理解为什么会发生这种情况,但我无法构建一个正则表达式,它可以匹配除引号之外的每个字符 10 次。点太笼统了。

编辑:新问题

新字符串:

<data>&a0;&a0;asddd&a0;&a0;&a0; 234324&a0;&a0;&a0;&a0;&a0;&a0;</data>

现在我尝试匹配这两个 XML 标记之间的特定表达式,直到第一个“

&[a-zA-Z0-9]+;

问题是,这些标签之间也可能出现不同的其他字符串(

我试过了:

<[a-zA-Z0-9]+>([^<]{10,}?)<\/[a-zA-Z0-9]+>

但是现在它可以匹配所有内容而不是想要的 &[a-zA-Z0-9]+;

谢谢各位!

【问题讨论】:

  • "([^"]{10,}?)" 只做否定字符组[^"] 除了" 之外的所有内容,或者如果您确定只有字符出现在点之间,则进一步限制它:例如[a-z]{10,}[a-zA-Z0-9]{10,}可能有用
  • 在第二个带有两行的示例中,您的表达式现在匹配第二个和第三个引号之间的所有内容。问题是我不知道 XML 文档中这些引号之间允许使用哪个字符集。
  • 使用"([^"\r\n]{10,}?)",获取Group 1的值。可能,"(\w{10,}?)" 会更好。
  • 只排除换行符然后
  • 这对我有用!谢谢大家!

标签: regex xml pcre


【解决方案1】:

你可以使用

"([^"\r\n]{10,})"

请参阅regex demo

[^"\r\n]{10,} 模式匹配 10 次或更多次出现的任何字符,但 "、CR 和 LF 除外。

请注意,您可以在此处使用贪心限制(范围/间隔)量词。

要限制通用模式,最好检查您的要求。如果您确实打算匹配字母、数字和_,则可以将[^"\r\n] 否定字符类替换为\w 速记字符类。

【讨论】:

  • 添加了一个新问题!
  • @Mischu 那应该作为一个单独的问题发布。
  • 您每 90 分钟只能发帖一次。您可以在 30 分钟内看到它:P 非常感谢!
  • @Mischu 等等,也许&lt;[a-zA-Z0-9]+&gt;(?:[^&lt;]*?&amp;[a-zA-Z0-9]+;){10,}[^&lt;]*&lt;\/[a-zA-Z0-9]+&gt; 就是你所需要的。见this demo
猜你喜欢
  • 1970-01-01
  • 2010-12-13
相关资源
最近更新 更多