2016-10-25 8 views
1

У меня есть шаблон типа anystring_OPCtarget_anystring. Могу ли я получить некоторую помощь, как проверить, соответствует ли строка между двумя символами подчеркивания типа "OPC(target)" и вытаскивает цель с помощью регулярного выражения.Regex вытащить строку между двумя символами подчеркивания

Предположит, если моя строка: MP700000001_OPC32_812345643 первым, мне нужно проверить, если строка между подчеркиванием начинается с OPC, а затем получить целевой текст после OPC и до 2-ой подчеркивания.

Помогите оценить !!!

Спасибо

ответ

1

Вы можете использовать это регулярное выражение:

^[^_]*_OPC\K[^_]+ 

и захватить соответствие данных.

  • ^[^_]*_OPC будет соответствовать любой текст Шифрование до первого _ с последующим OPC.
  • \K сбросит все ранее согласованные данные
  • [^_]+ будет соответствовать данным после OPC Перед 2-ем _

RegEx Demo

Код:

$str = 'MP700000001_OPC32_812345643'; 

preg_match('/^[^_]*_OPC\K[^_]+/', $str, $matches); 

echo $matches[0] . "\n"; 
//=> 32 
2

Используйте следующий подход, чтобы получить необходимую "цель":

$str = 'MP700000001_OPC32_812345643'; 
$target = ''; 
if (preg_match('/^[^_]+_OPC(\w+)_\w*$/', $str, $matches)) { 
    $target = $matches[1]; 
} 

print_r($target); // 32 
1
_([^_]+)_ 

Первый capturegroup является текст между двумя символами подчеркивания
Объяснение:

_([^_]+)_ 
_    First underscore 
( )   Capture group 
    [^ ]   Everything but this character class 
    _   No underscores 
     +   One or more times 
     _  Closing underscore 
0

Если вы используете язык, который поддерживает предпросмотр и назад 'вы можете сделать что-то вроде этого:

Pattern p = Pattern.compile("(?<=_)OPC[0-9]+(?=_)"); 
    Matcher m = p.matcher("MP700000001_OPC32_812345643"); 

    if (m.find()) { 
     String target = m.group(0); 
     System.out.println(target); 
    } 
Смежные вопросы