PHP测试如果字符串包含三个字符串之一?

mat*_*att 3 php string

实现以下目标的最佳方法是什么:

我有一个$img包含例如myimage_left.jgp,someimage_center.jpg或的变量img_right.jpg

测试的最佳方法是什么_left,_right_center文件名和提取此值并将其存储在变量中的最佳方法是什么?

所以我$img已经包含了该文件的完整基本名称.我需要有$pos哪些应该持有_center_left_right.

这样做的方法是什么?preg_match,strpos等?

Jon*_*Jon 12

正则表达式最简单:

$input = 'foo_left.jpg';
if(!preg_match('/_(left|right|center)/', $input, $matches)) {
    // no match
}

$pos = $matches[0]; // "_left", "_right" or "_center"
Run Code Online (Sandbox Code Playgroud)

看到它在行动.

更新:

对于更具防御意识的方法(如果"_left"文件名中可能有多个实例和朋友),您可以考虑添加到正则表达式.

仅当l/r/c后跟一个点时才会匹配:

preg_match('/(_(left|right|center))\./', $input, $matches);
Run Code Online (Sandbox Code Playgroud)

仅当l/r/c后跟文件名中的最后一个点时才会匹配(这实际上意味着基本名称以l/r/c规范结束):

preg_match('/(_(left|right|center))\\.[^\\.]*$/', $input, $matches);
Run Code Online (Sandbox Code Playgroud)

等等.

如果使用这些正则表达式,您将找到结果$matches[1]而不是$matches[0].