我需要一个 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
我承认这种模式有点棘手。它利用了 possessive quantifier 的事实即使量词是惰性的,在第一次出现时强制使用连字符。第二次出现时,连字符不匹配。
你可以写得更简单:\A[^-]+-[^-]+
如果你想检查匹配后是否有第二个连字符,你只需要添加这个 lookahead在两种模式之一的末尾:(?=-)
关于php - 正则表达式提取第二个破折号/连字符之前的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25448921/