2014-12-14 4 views
-2

Я пытаюсь найти регулярное выражение для описания части имени файла между первым и последним подчеркиванием. Подчеркивание может также встречаться в середине строки. Я получил то, что мне нужно с JavaScript, но предпочел бы чистое регулярное выражение.регулярное выражение для захвата между подчеркиваниями

 
Sample file name         Desired Result 
=============================================== ============================= 
12345_something goes here_54321     something goes here 
23456_sometimes_an_underscore there_endGoesHere sometimes_an_underscore there 

Любая помощь будет принята с благодарностью. Я могу решить это, если не используются другие символы подчеркивания, но я застрял, когда есть встроенные подчеркивания.

+0

Что вы подразумеваете под «чистым регулярным выражением», в отличие от использования регулярного выражения с помощью javascript? – qrikko

ответ

0

Это регулярное выражение будет удовлетворять ваши потребности ;-)

^(?:[^_]*_)?(.*?)(?:_[^_]*)?$ 

Regular expression visualization

Debuggex Demo

+0

'^ [^ _] * _ (. *) _ [^ _] * $' Должно быть достаточно. Необязательные группы и не-жадные '. *?' Не служат никакой цели, кроме как замедлить совпадение. –

0

вы можете сделать это без regax, как this-

$array = explode(" ", $your_string); 

массива $ [0] будет первая строка & массива $ [1] будет вторая строка

1

Обычно вы определяете регулярное выражение, состоящее из 3 групп. Первой группой будет любое число, если символы нечеркнутого символа заканчиваются символом подчеркивания. Второе - любое количество символов, а последнее - знак подчеркивания, за которым следует любое количество символов без подчеркивания, за которыми следует конец строки. Затем вы использовали бы только вторую группу.

Смежные вопросы