Получить все между двумя персонажами - PullRequest
2 голосов
/ 07 августа 2010

Я использую PHP.Я пытаюсь получить шаблон Regex, чтобы сопоставить все между значением = "и", то есть строка 1, строка 2, ..., строка 4.

value="Line 1
Line 2
Line 3
Line 4"

Я пробовал /.*?/, но этоне похоже на работу.

Буду признателен за помощь.

Спасибо.

PS Я бы хотел добавить, в ответ на некоторые комментарии, чтовсе строки между первым и последним допустимы.Я просто пытаюсь найти способ получить все между самым первым "и самым последним", даже когда между ними есть ". Надеюсь, это имеет смысл. Спасибо.

Ответы [ 7 ]

4 голосов
/ 07 августа 2010

Предполагая, что желаемым символом является "двойная кавычка":

$pat = '/\"([^\"]*?)\"/'; // text between quotes excluding quotes
$value='"Line 1 Line 2 Line 3 Line 4"';

preg_match($pat, $value, $matches);

echo $matches[1]; // $matches[0] is string with the outer quotes
1 голос
/ 07 августа 2010

Вам нужен s модификатор шаблона. Что-то вроде: /value="(.*)"/s

1 голос
/ 07 августа 2010

Если вы должны использовать регулярное выражение:

if (preg_match('!"([^"]+)"!', $value, $m))
    echo $m[1];
1 голос
/ 07 августа 2010

/.*?/ имеет эффект не соответствовать символам новой строки. Если вы тоже хотите сопоставить их, вам нужно использовать регулярное выражение типа /([^"]*)/.

Я согласен с Джошем К., что в этом случае регулярное выражение не требуется (особенно если вы знаете, что не будет никаких вершин, кроме той, которая разделяет строку). Вы также можете принять решение, данное им.

1 голос
/ 07 августа 2010

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

    <?php
$str='value="Line 1
Line 2
Line 3
Line 4"';
$need=explode("\"",$str);
var_dump($need[1]);
?>
0 голосов
/ 07 августа 2010

Спецификация не ясна, но вы можете попробовать что-то вроде этого:

/value="[^"]*"/

Объяснение:

  • Во-первых, value=" соответствует буквально
  • Затем, сопоставьте [^"]*, то есть все, кроме ", возможно, охватывая несколько строк
  • Наконец, сопоставьте " буквально

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

* […] - это класс символов .Нечто вроде [aeiou] соответствует одному из строчных гласных.[^…] - это отрицательный класс символов.[^aeiou] соответствует одному из всего, кроме строчных гласных.

Ссылки

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

0 голосов
/ 07 августа 2010

Я не regex гуру, но почему бы просто не взорвать его?

// Say $var contains this value="..." string
$arr = explode('value="');
$mid = explode('"', $arr[1]);
$fin = $mid[0]; // Contains what you're looking for.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...