php test, если строка содержит одну из трех строк?

Каков наилучший способ добиться следующего:

У меня есть переменная $img содержащая, например, myimage_left.jgp , someimage_center.jpg или img_right.jpg

Каков наилучший способ проверить для _left , _right или _center имя файла и извлечь это значение и сохранить его в переменной?

Поэтому у меня есть $img который уже содержит полное базовое имя файла. И мне нужно иметь $pos который должен содержать _center или _left или _right .

Каков способ сделать это? preg_match, strpos и т. д.?

Solutions Collecting From Web of "php test, если строка содержит одну из трех строк?"

Регулярное выражение было бы простым:

 $input = 'foo_left.jpg'; if(!preg_match('/_(left|right|center)/', $input, $matches)) { // no match } $pos = $matches[0]; // "_left", "_right" or "_center" 

Смотрите в действии .

Обновить:

Для более защищенного подхода (если в имени файла могут быть несколько экземпляров "_left" и друзей), вы можете рассмотреть возможность добавления в регулярное выражение.

Это будет соответствовать только если за l / r / c следует точка:

 preg_match('/(_(left|right|center))\./', $input, $matches); 

Это будет соответствовать только, если за l / r / c следует последняя точка в имени файла (что практически означает, что базовое имя заканчивается спецификацией l / r / c):

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

И так далее.

Если вы используете эти регулярные выражения, вы найдете результат в $matches[1] вместо $matches[0] .

У кого-то, вероятно, будет более элегантное решение, но я бы использовал strpos, как вы предлагаете.

 if (strpos(strtoupper($img), '_LEFT') > 0) $pos = '_LEFT' 

вы можете затем расширить его до

 $needleArray = arra('_LEFT', '_CENTER', '_RIGHT'); foreach ($needleArray as $needle) { if (strpos(strtoupper($img), $needle) > 0) $pos = $needle } 

Предполагается, что для pos не может быть более одного значения.

Опция без регулярного выражения

 $img = 'myimage_left.jpg'; $find = array( 'left', 'center', 'right' ); if ( in_array( $pos = end( explode( '_', basename( $img, '.jpg' ) ) ), $find ) ) { echo $pos; } 

Если вы хотите избежать регулярных выражений, вы можете просто сделать

  $underScores = explode("_", $img); $endOfFileName = end($underScores); $withoutExtensionArr = explode(".", $img); $leftRightOrCenter = $withoutExtensionArr[0]; 

Затем проверьте содержимое влево или вправо