如何从这个字符串行提取连字符字符串?
ADW-CFS-WE CI SLA Def No SLANAME CI最大宕机服务
我只是想从中提取"ADW-CFS-WE",但在过去的几个小时里一直没有成功。我被这个简单的regEx "(.*)"卡住了,使得所有的字符串都被选中了。
您可以使用:
preg_match("/'w+(-'w+)+/", ...)
'w+
将匹配任意数量的字母数字字符(=一个单词)。第二组( )
是任意数目的连字符。
.*
往往会匹配太多。 $input = "ADW-CFS-WE X-Y CI SLA Def No SLANAME CI Max Outage Service";
preg_match_all('/[A-Z]+-[A-Z-]+/', $input, $matches);
foreach ($matches[0] as $m) {
echo $matches . "'n";
}
注意,这个解决方案假设只有大写的A-Z可以匹配。如果不是这样,请插入正确的字符类。例如,如果您希望允许使用任意字母(如a和Ä),则将[A-Z]
替换为'p{L}
。
捕捉每一个至少有一个'-'的空格[^'s]字。
下面的表达式可以做到:
<?php
$z = "ADW-CFS-WE CI SLA Def No SLANAME CI Max Outage Service";
$r = preg_match('#([^'s]*-[^'s]*)#', $z, $matches);
var_dump($matches);
以下模式假设数据位于字符串的开头,仅包含大写字母,并且在每组一个或多个大写字母之前可能包含一个连字符:
<?php
$str = 'ADW-CFS-WE CI SLA Def No SLANAME CI Max Outage Service';
if (preg_match('/^(?:-?[A-Z]+)+/', $str, $matches) !== false)
var_dump($matches);
结果: array(1) {
[0]=>
string(10) "ADW-CFS-WE"
}