使用部分和完整单词搜索正则表达式单词边界

searching for regex word boundery with partial and complete words

$str = 'Company Name Internal Transport Worldwide  
Account Manager New Business';

I tried:
$re = "/\b(internal.transport|accountmanag|account.manag).*\W/mi";  
// result: Internal Transport 

$re = "/\b(internal.transport|accountmanag|account.manag)\w+/mi";  
// result: Account Manager

$re = "/\b(internal.transport|accountmanag.`*|account.manag.`*)\W/mi";  
// result: Internal Transport, Account Manager New

preg_match($re, $str, $matches);

我正在寻找这个结果:
- 内部运输
- 客户经理

执行此操作的正确方法是什么?

您可以使用

'~\b(?:internal\Wtransport|accountmanag|account\Wmanag)\w*~i'

regex demo

详情

  • \b - 单词边界
  • (?:internal\Wtransport|accountmanag|account\Wmanag) - 匹配以下三个备选方案中的任何一个的非捕获备选组:
    • internal\Wtransport - internal,非单词字符,transport
    • | - 或
    • accountmanag - accountmanag
    • | - 或
    • account\Wmanag - account,非单词字符,manag
  • \w* - 0+ 个单词字符。

参见 PHP demo:

$str = 'Company Name Internal Transport Worldwide  
Account Manager New Business';

$re = "/\b(?:internal\Wtransport|accountmanag|account\Wmanag)\w*/i";  
if (preg_match_all($re, $str, $matches)) {
    print_r($matches[0]);
}

输出:

Array
(
    [0] => Internal Transport
    [1] => Account Manager
)