我需要一个php正则表达式,它将在此类字符串中的第二个破折号/连字符之前提取所有字符:
EDM-2112-100-2013 ==> EDM-2112 ABCD-2002-100-2014 ==> ABCD-2002
并且,我知道我可以使用各种字符串操作函数来完成此操作(substr等),但它必须是正则表达式。我们使用正则表达式来定义客户特定的规则,这些规则在呈现数据时进行评估。当数据出现时,我们将客户特定的正则表达式从数据库应用到入站数据,然后使用提取的数据。
答案 0 :(得分:2)
您可以使用此模式:
\A(?:[^-]++-??){2}
模式详细信息:
\A # anchor for the start of the string
(?: # open a non-capturing group
[^-]++ # all that is not an hyphen (possessive)
-?? # optional hyphen (lazy)
){2} # repeat the group 2 times
我承认这种模式有点棘手。它使用possessive quantifier在第一次出现时强制使用连字符的事实,即使量词是惰性的。在第二次出现时,连字符不匹配。
您可以更简单地撰写:\A[^-]+-[^-]+
如果您想检查匹配后是否有第二个连字符,则只需在两种模式之一的末尾添加此lookahead:(?=-)