我需要一个php正则表达式,它将在这种类型的字符串的第二个破折号/连字符之前提取所有字符:
EDM-2112-100-2013 ==> EDM-2112 ABCD-2002-100-2014 ==> ABCD-2002
而且,我知道我可以使用各种字符串操作函数来完成此操作(substr等),但是它必须是正则表达式。我们正在使用正则表达式定义特定于客户的规则,这些规则将在数据显示时进行评估。呈现数据时,我们将来自数据库的客户特定正则表达式应用于入站数据,然后使用提取的数据。
您可以使用以下模式:
\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
我承认这种模式有些棘手。它利用占有所有的量词在第一次出现时就强制使用连字符的事实,即使该量词是惰性的也是如此。在第二种情况中,连字符不匹配。
您可以写得更简单: \A[^-]+-[^-]+
如果要检查比赛之后是否还有第二个连字符,则只需在两个模式之一的末尾添加此超前字符:(?=-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句