在字符串开头或在字符串开头的白名单单词之后隔离单词
Isolate word at start of string or after a whitelisted word at the start of the string
我想要 preg_match()
一组特定的规则,我正在尝试进行预匹配,它们是:
- 字符串的所有单词(仅字母和数字)被
_
分割
- 第一个词可以是
Brand
(不区分大小写),也可以是我要抓取的目标词。
- 目标词后面可能还有更多的词或数字,我不需要这个信息。
- 目标词总是至少有 1 个字母,可能有也可能没有数字
例子
Brand_GoPro360
=> GoPro360
brand_My247test
=> My247test
bRanD_Apple_worth_84953
=> Apple
Brand_Xbox1_isawesome745
=> Xbox1
Microsoft
=> Microsoft
Office365
=> Office365
KFC_2345_growth
=> KFC
Playstation_iscool3424
=> Playstation
我不知道如何开始
$list = ['Brand_GoPro360', 'brand_My247test', 'bRanD_Apple_worth_84953', 'Brand_Xbox1_isawesome745', 'Microsoft', 'KFC_2345_growth', 'Playstation_iscool3424'];
$pattern = "/(?i)(brand)/";
foreach ($list as $words) {
echo (preg_match($pattern, $words));
}
}
使用正则表达式
/^(?:brand_)?([a-z0-9]+)/i
(?:brand_)?
使得 brand_
在开头是可选的。 ([a-z0-9]+)
匹配下一个单词,并将其放入捕获组 1。
$pattern = '/^(?:brand_)?([a-z0-9]+)/i';
foreach ($list as $words) {
if (preg_match($pattern, $words, $match)) {
echo $match[1];
}
}
可选择匹配前导 brand_
子字符串(不区分大小写),然后捕获下一个出现的“word”子字符串,然后匹配字符串中的任何剩余字符。用捕获的子字符串替换完整的字符串,你就完成了。
我正在使用 [^_]+
来匹配一个或多个非下划线字符,但您可以使用 [a-z\d]+
来明确捕获字母数字字符。
代码:(Demo)
var_export(preg_replace('~^(?:brand_)?([^_]+).*~i', '', $list));
输出:
array (
0 => 'GoPro360',
1 => 'My247test',
2 => 'Apple',
3 => 'Xbox1',
4 => 'Microsoft',
5 => 'KFC',
6 => 'Playstation',
)
我想要 preg_match()
一组特定的规则,我正在尝试进行预匹配,它们是:
- 字符串的所有单词(仅字母和数字)被
_
分割
- 第一个词可以是
Brand
(不区分大小写),也可以是我要抓取的目标词。 - 目标词后面可能还有更多的词或数字,我不需要这个信息。
- 目标词总是至少有 1 个字母,可能有也可能没有数字
例子
Brand_GoPro360
=>GoPro360
brand_My247test
=>My247test
bRanD_Apple_worth_84953
=>Apple
Brand_Xbox1_isawesome745
=>Xbox1
Microsoft
=>Microsoft
Office365
=>Office365
KFC_2345_growth
=>KFC
Playstation_iscool3424
=>Playstation
我不知道如何开始
$list = ['Brand_GoPro360', 'brand_My247test', 'bRanD_Apple_worth_84953', 'Brand_Xbox1_isawesome745', 'Microsoft', 'KFC_2345_growth', 'Playstation_iscool3424'];
$pattern = "/(?i)(brand)/";
foreach ($list as $words) {
echo (preg_match($pattern, $words));
}
}
使用正则表达式
/^(?:brand_)?([a-z0-9]+)/i
(?:brand_)?
使得 brand_
在开头是可选的。 ([a-z0-9]+)
匹配下一个单词,并将其放入捕获组 1。
$pattern = '/^(?:brand_)?([a-z0-9]+)/i';
foreach ($list as $words) {
if (preg_match($pattern, $words, $match)) {
echo $match[1];
}
}
可选择匹配前导 brand_
子字符串(不区分大小写),然后捕获下一个出现的“word”子字符串,然后匹配字符串中的任何剩余字符。用捕获的子字符串替换完整的字符串,你就完成了。
我正在使用 [^_]+
来匹配一个或多个非下划线字符,但您可以使用 [a-z\d]+
来明确捕获字母数字字符。
代码:(Demo)
var_export(preg_replace('~^(?:brand_)?([^_]+).*~i', '', $list));
输出:
array (
0 => 'GoPro360',
1 => 'My247test',
2 => 'Apple',
3 => 'Xbox1',
4 => 'Microsoft',
5 => 'KFC',
6 => 'Playstation',
)