如何从此字符串行中提取带连字符的字符串?
ADW-CFS-WE CI SLA Def否SLANAME CI最大停机服务
我只是想从中提取“ADW-CFS-WE”,但在过去的几个小时里一直很不成功。我坚持使用这个简单的regEx“(。*)”使所有字符串都被选中。
答案 0 :(得分:17)
您可以使用:
preg_match("/\w+(-\w+)+/", ...)
\w+
将匹配任意数量的字母数字字符(=一个字)。第二组( )
是带字母的任何附加连字符数。
正则表达式的技巧通常是特异性的。使用.*
通常会匹配太多。
答案 1 :(得分:1)
$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}
。
答案 2 :(得分:0)
用至少一个' - '来捕捉每个空格[^ \ 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);
答案 3 :(得分:0)
以下模式假设数据位于字符串的开头,仅包含大写字母,并且在每组中包含一个或多个字母之前可能包含连字符:
<?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"
}