Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP提取字符前和字符后的字符串_Php - Fatal编程技术网

PHP提取字符前和字符后的字符串

PHP提取字符前和字符后的字符串,php,Php,我正在尝试创建一个验证类,但我需要获取选项并将它们放入“[”之后和“]”之前的数组中。例如: $dropdown = 'required|valid_option[general,recruitment,activities]'; 然后我有这样的东西: if(strops($str, '[')) { // this string contains options so grab them before ] and after [ } 我需要抓取常规、招募、活动,然后我知道如何使用exp

我正在尝试创建一个验证类,但我需要获取选项并将它们放入“[”之后和“]”之前的数组中。例如:

$dropdown = 'required|valid_option[general,recruitment,activities]';
然后我有这样的东西:

if(strops($str, '[')) {
   // this string contains options so grab them before ] and after [
}
我需要抓取常规、招募、活动,然后我知道如何使用explode将它们拆分,然后使用array_push或类似的方法将它们放入数组中,但我真的需要弄清楚如何在某种程度上在之后[和之前]抓取该字符串。我想不出来。我猜它使用了某种preg_匹配

任何帮助都将不胜感激

编辑:你是对的,抱歉忘了澄清这一点。我将$rules作为一个数组,其中包含必需的、有效的\u选项[options here]。。。每一个都在| so$规则包含“valid_option[option,option,option]”上分解——我正在尝试使用如何

$pos1 = strpos($dropdown, '[');
$pos2 = strpos($dropdown, ']');
$options = substr($dropdown, $pos1, $pos2 - $pos1); 
对于方括号之前的部分,将是substr$下拉列表,0,$pos1-1;然后爆炸|

编辑:然后在“,”和|上分解$options,如您第一次提到的。

您可以

preg_match_all("~(.*)\[(.*?)\]~", $valid_options, $matches);
$matches将是regexp匹配的内容的数组

该阵列将如下所示:

array
  0 => string 'valid_option[general,test,test2,recruitment,activities]'
  1 => string 'valid_option'
  2 => string 'general,test,test2,recruitment,activities'

你应该研究的是正则表达式。这是最简单的选择。不要写五行分解解决方法。OP应该在|上分解,然后使用此代码。你的代码让人觉得他应该做这件事,这就是为什么我认为在我投票支持你之后,有人投票反对你。等等,我编辑了我的问题。我已经提取了规则。。必选是一条规则,有效的_选项[此处的选项]是另一条规则。假设我们在一个名为$rule的变量中有有效的_选项[…]。。我们如何获得有效的_选项部件?在[?感谢您的澄清,我编辑了我的答案。但是,OP明确表示,一旦找到方括号中包含的字符串,他知道如何操作爆炸。Peanon:substr$下拉列表,0,$strpsoffirstleftbracket-1哇,您的解决方案非常短。那么preg_match会自动创建新的_str变量吗?还是我必须初始化你知道如何在字符串的'valid_option'之前获取字符串的'valid_option'部分吗['在一个像你刚才那样简单的解决方案中?是的,它会为你初始化它。对于问题的第二部分,我不知道你到底想抓住哪一部分?我做了一个编辑,因为$new_str实际上是一个数组。啊$new_str将是一个数组?怎么会这样?它只包含0=>'option1',1=>'option2',2=>'option3'第二部分,$valid_options将在发生任何事情之前包含这个精确的字符串'valid_option[option1,option2,option3]。因此您的preg_match语句将获取'option1,option2,option3',并将其放入数组中,对吗?我想知道如何获取'valid_option'…没有选项部分的实际规则名称[option1,option2,option3]“.无论如何,这是preg_match返回的结果:
array
  0 => string 'valid_option[general,test,test2,recruitment,activities]'
  1 => string 'valid_option'
  2 => string 'general,test,test2,recruitment,activities'