"He said \"Hello\" to me for the first time"
匹配这些输入的一个非常有效的解决方案是使用normal*(特殊normal*)*
模式;这个名字引自杰弗里·弗里德尔的优秀著作《掌握正则表达式》。
这是一种模式,通常用于匹配由常规条目(正常部分)和中间分隔符(特殊部分)组成的输入。
注意,像所有的东西regex一样,它应该在没有更好的选择时使用;虽然可以使用此模式解析CSV数据,例如,如果使用Java,则最好使用OpenCSV。
"He said \"Hello\" to me for the first time"
将其替换到normal*(special normal*)*
模式中,将得到以下regex:
[^\\"]*(\\"[^\\"]*)*
添加双引号以匹配全文,将得到最终的regex:
"[^\\"]*(\\"[^\\"]*)*"
您将注意到,这也将匹配空引号字符串。
the-word-to-match
[a-z]
;-
该模式的规范形式是:
[a-z]*(-[a-z]*)*
但正如我们所说:
[a-z]+(-[a-z]+)*
\b[a-z]+(-[a-z]+)*\b
它给出了表达式(用单词锚点装饰):
\b\d{1,3}(\.\d{1,3}){3}\b
这种模式的灵活性使其成为regex工具箱中最有用的工具之一。虽然存在许多问题,如果库存在,则不应使用正则表,但在某些情况下,必须使用正则表。这将成为你最好的朋友之一,一旦你练习了一点!
(特殊规范*)
部分);因此,建议您使用非捕获组。例如,对带引号的字符串使用“[^\\”]*(?:\\“[^\\”]*)*“。实际上,如果您想要捕获,在这种情况下捕获几乎永远不会导致预期的结果,因为重复捕获组只会给您最后一次捕获(以前的所有重复都会被覆盖),除非您在.NET中使用这种模式。(谢谢@Ohaal)
我面临一个挑战,要以以下格式匹配输入: 输入由key=value对组成。关键字以斜杠开头。值可以是数字或引号中的字符串。 该值可以选择性地包含转义引号,即引号后面跟着引号(“”)。这种转义引号应该被视为价值的一部分。不需要检查转义引号是否平衡(例如,由另一个转义引号结束)。 正则表达式应该匹配序列中给定的key=value部分,并且对于长输入(例如value是10000个字符)不应该中断。
我想解析以下字符串: 我正在使用,所以我这里缺少的是正确的正则表达式。规则是正则表达式必须: 隔离任何单个单词 任何用双引号括起来的子字符串都是匹配的 单词中的双引号必须忽略(稍后我将用空格替换它们)。 因此,结果匹配应该是: < li>w1 w"2 < li>w3 < li>| < li>w4 < li>w"5 < li>w6 w7 双引号是否包含在双引号括起来的子字符串中是无关紧要的(例如,1
有没有一种方法使组的“capture”可以在regex后面引用,但其捕获的值不在匹配列表中返回? 或者其他一些方法来解决我(看似简单)的问题。
问题内容: 我需要使用正则表达式,检查一个字符串以a开头 的双引号 字符(),用两端 的双引号 字符了。 问题是我不能使用 双引号 字符,导致混淆。还有其他方法可以在正则表达式中或一般在字符串中表示 双引号 字符吗? 问题答案: 首先,双引号字符在regex中没什么特别的-它只是另一个字符,因此 从regex的角度来看 不需要转义。 但是,由于Java使用双引号 分隔 字符串常量,因此,如果要在J
这是我之前问题的后续。我意识到我需要更具体地说明我的regex案例,以获得适用于我的案例的答案。 我已经与这个正则表达式斗争了很长一段时间(也使用我上一个问题的答案),我似乎无法构建我需要的东西。 我需要将所有字符串中出现的两个重复出现的单引号替换为(因此字符串内部意味着单引号)。这是因为在一种语言(语法)中,字符串中的引号使用<code>‘转义。 这里有一个例子(实际的例子可以包含用< code
问题内容: 我写了一个正则表达式,用double-qoutes分割字符串: 如何将其扩展为与单双qoutes一起使用? 我试过了: 但这是行不通的 问题答案: 有两种方法: