我正在尝试从各种字符串中提取与特定模式匹配的单词。
字符串的长度和内容各不相同。
例如:
我想从以下字符串中提取以jac开头的任何单词,并使用完整的单词填充数组:
结果阵列应该是[夹克,杰克,杰克逊维尔]
我一直在尝试使用preg_match()但由于某种原因它无法正常工作。任何建议???
$q = "jac";
$str = "jacket";
preg_match($q,$str,$matches);
print $matches[1];
返回null:S。我不知道问题是什么。
答案 0 :(得分:4)
答案 1 :(得分:1)
你必须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";
这里,括号内的?:
表示您实际上并不需要捕获它们的内容(因为它们已经在一对括号内,这是不必要的),而?
之后括号表示匹配是可选的。