PHP:查找所有以“:&”;


PHP: Find all words starting with ":"

你能帮我使用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码)

我认为这应该有效。。。