我有一个这样的字符串:
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='red', endColorstr='yellow',GradientType=0 );
我想获取第一个单词,后跟一个感叹号。所以在上面的例子中,它应该是:
$string = 'Hello k-on! Lorem Ipsum! Lorem.';
我迷失了什么是合适的方法。也许正则表达式解决方案?
答案 0 :(得分:1)
如果您只需要支持ASCII字母单词,可以使用
/\b[a-z]+(?:-[a-z]+)*!/i
请参阅regex demo
如果您打算支持Unicode,请使用\p{L}
:
/\b\p{L}+(?:-\p{L}+)*!/u
以下是模式说明:
\b
- 单词边界(前一个字符必须是非单词或字符串的开头)\p{L}+
- 一个或多个Unicode字符(如果使用[a-zA-Z]
,则为ASCII)(?:-\p{L}+)*
- 零个或多个序列:
-
- 字面连字符\p{L}+
- 一个或多个Unicode字符(如果使用[a-zA-Z]
,则为ASCII)!
- 文字!
符号$re = '/\b\p{L}+(?:-\p{L}+)*!/u';
$str = "Hello k-ąn! Lorem Ipsum! Lorem.";
preg_match($re, $str, $match);
print_r($match);
答案 1 :(得分:0)
我认为这可能会做你想要的。基本上将字符串拆分为单词,查找以'!'结尾的第一个单词,然后执行任何操作,然后突破循环:
$string = 'Hello k-on! Lorem Ipsum! Lorem.';
arry = explode(" ", $string);
foreach ($arry as $word) {
if (substr($word,-1) == "!") {
do something ...
break;
}
}
答案 2 :(得分:0)
$string = 'Hello k-on! Lorem Ipsum! Lorem.';
preg_match('/[A-Za-z0-9-]+!/', $string, $match);
$yourWord = str_replace("!", "", $match[0]); //prints k-on
显然,需求的解决方案是RegExp
,这里我使用了一个允许AlphaNumeric String的简单表达式,特别允许连字符( - )。 preg_match
的使用将模式匹配到字符串中并返回第一个匹配关键字,在您的情况下为k-on!
并使用str_replace
以便从返回的字符串中取出感叹号。 / p>
了解preg_match
:http://php.net/manual/en/function.preg-match.php