preg_match有两个选项


preg_match with two choices

我必须为两个选项生成正则表达式,例如,我有一个字符串:

apps; chrome

我必须把绳子分成两块,没有空格

1->应用程序2->铬

但问题是字符串可能是"apps;chrome"(后面没有空格)

我试过用爆炸

$part = explode(";", $search);

如果字符串在字符之间有空格,则第二个部分有空格。

我想要的是以下情况的正则表达式,将它们拆分为两部分

apps; chrome
apps;chrome

我希望你能理解,对不起我的英语:)

trim函数将有助于:

list($k1,$k2) = array_map("trim",explode(";",$search));

一个衬垫=3

尝试在各个部件上使用trim

例如

$parts =  array_map('trim', explode(';', $search)); 

如果你对分隔符有把握,基本上有两个选项。

1) 使用爆炸(';',$string)和array_map
这将分解字符串,并在数组上应用trim();

$slices = explode(';', $string);
$slices_filtered = array_map("trim", $slices);

2) 使用preg_split("/[,;''t''t]+/",$string)
这将把像"我们,是;冠军"这样的字符串拆分为{我们,是,冠军}

$slices_filtered = preg_split("/[,; 't'n]+/",$string);

**考虑到"选项"不会有空格;如果他们这样做了,你应该使用一些模式,比如

/[,;][ ]*/

仅仅因为您指定了正则表达式。。。这应该允许您将任何2个用分号分隔的小写字母字符串与任何数量(或类型)的空白"noise"进行匹配。

$sFullString = "app; chrome"; //or wherever you're getting your string from
//RegExp pattern to match many strings including "app;chrome"
$sRegExp = '/^'s*([a-z]+);'s*([a-z]+)'s*$/';
//first replacement
$sAppMatch = preg_replace($sRegExp, "$1", $sFullString);
//second replacement
$sChromeMatch = preg_replace($sRegExp, "$2", $sFillString);

在处理$parts

之前只需使用trim()函数

为什么选择regex?

<?php
$parts = explode(";", $search);
foreach ($parts as $k => $v) {
  $parts[$k]=trim($v);
}