Вы должны read the manual несколько сотен раз, и в конце концов придет к вам.
В противном случае, что вы пытаетесь захватить можно выразить как «найти„JAC“следует 0 или более букв * и убедитесь, что он не предшествует буква», которая дает вам: /(?<!\\w)(jac\\w*)/i
Вот пример с preg_match_all()
, так что вы можете захватить все на вхождений шаблона, а не только первый:
$q = "/(?<!\\w)(jac\\w*)/i";
$str = "I bought a jacket yesterday.
Jack is going home.
I want to go to Jacksonville.";
preg_match_all($q,$str,$matches);
print_r($matches[1]);
- Примечание: по «букве» Я имею в виду любое «слово символ.» Официально это включает числа и другие «текстовые символы». В зависимости от конкретных обстоятельств, один может предпочесть \ ш (слово символа) или \ Ь (границу слова.)
Вы можете включать в себя дополнительные символы, с помощью character class.Например, для того, чтобы соответствовать любое слово символа, а также одинарные кавычки, вы можете использовать [\w']
и ваше регулярное выражение становится:
$q = "/(?<!\\w)(jac[\\w']*)/i";
В качестве альтернативы, вы можете добавить дополнительный 's
к существующей модели, так что вы захватить " JAC»с последующим любым количеством символов слова, возможно, с последующим«'s»
$q = "/(?<!\\w)(jac\\w*(?:'s)?)/i";
Здесь ?:
в скобках означает, что вы на самом деле не нужно, чтобы захватить их содержание (потому что они уже внутри пара круглых скобок, это необязательно), а ?
после В скобках указано, что совпадение является необязательным.
показать существующий код :-) – Erik 2010-12-03 03:41:11
Особенно регулярное выражение, которое вы пытались использовать! – GWW 2010-12-03 03:43:12