你能帮我使用PHP函数/regex吗?该函数在给定的文本中查找所有以字符":"开头的单词?
换句话说,所有以":"开头并以"(空格)分隔的子字符串
由于:word
可能是有效的,我想:word:another
应该被视为两个词,所以不能说总是有空格。
自然语言中的单词后面可以跟点和其他字符
在数字输入中,它们后面可以跟行的末尾。
我建议使用以下正则表达式:
~:'w+~
它采用任何:
字符,后跟至少一个alpha字符,并将以任何无效字母的字符结束。
示例:在RegExr.com 上
您也可以尝试~:'w+'b~
,其中'b
是单词边界(字面意思是单词的末尾),但我认为这里没有必要。
注意:'w
代表[a-zA-Z0-9_]
,这意味着它捕获下划线_
和数字0-9
。它的工作原理与PHP中的变量/函数命名非常相似
EDIT(一些用法说明):
你说在给定的文本中(我理解这就像用随机事物输入一样),你想提取所有以:
开头的单词,例如:word
。要轻松地做到这一点,您应该使用带有PREG_PATTERN_ORDER
标志的preg_match_all()
函数。
示例:
$regex = '~(:'w+)~';
if (preg_match_all($regex, $input, $matches, PREG_PATTERN_ORDER)) {
foreach ($matches[1] as $word) {
echo $word .'<br/>';
}
}
正则表达式:/:'w+'s/g
- ''w匹配任何单词字符
- ''s Matchs空白字符
这将起作用:
preg_match('/^:'w*'s$/g', $var);
对不起,因为我不使用PHP。但我想你的问题是,PHP在其regex实现中出于某种原因保留了字符":"?好吧,在这种情况下,你仍然可以捕捉到任何以":"开头、以某种空格结尾的单词:
(…)
match('^'x3A[.]*['s]');
("3A"是58的十六进制值,是":"的ASCII码)
我认为这应该有效。。。