Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 整词后的正则表达式finish_Php_Regex_Preg Replace - Fatal编程技术网

Php 整词后的正则表达式finish

Php 整词后的正则表达式finish,php,regex,preg-replace,Php,Regex,Preg Replace,所以我有个问题。用我的正则表达式代码。所以我试着制作一个通知系统,希望它更直观。我的问题在于,我所编写的代码是有效的,但前提是代码中有一个空格。如果你没有,它将不会工作。因此,“@test”将起作用,但不是“@test”或“@test”。,如何在找到单词后停止正则表达式 $str = preg_replace("/@(.*?) /", '<span class="label label-default">$1</span>', $str); $str=preg_repl

所以我有个问题。用我的正则表达式代码。所以我试着制作一个通知系统,希望它更直观。我的问题在于,我所编写的代码是有效的,但前提是代码中有一个空格。如果你没有,它将不会工作。因此,
“@test”
将起作用,但不是
“@test”
“@test”。
,如何在找到单词后停止正则表达式

$str = preg_replace("/@(.*?) /", '<span class="label label-default">$1</span>', $str);
$str=preg_replace(“/@(.*)/”、“$1”、$str);

要替换不包含任何空格的单个字符串,请使用

@\S+
如果只允许使用字母,请使用:

@[a-zA-Z]+
如果您还希望允许数字,请使用:

@[a-zA-Z0-9]+
根据您喜欢的选项,您的PHP将类似于:

$str = preg_replace("/@([a-zA-Z]+)/", '<span class="label label-default">$1</span>', $str);
$str=preg_replace(“/@([a-zA-Z]+)/”,“$1”,$str);
解释

  • \S
    表示一个非空白字符的字符
  • [a-zA-Z]
    是一个字符类,允许范围
    a-Z
    a-Z
  • +
    量词表示前面标记或组的“一个或多个”

要替换不包含任何空格的单根字符串,请使用

@\S+
如果只允许使用字母,请使用:

@[a-zA-Z]+
如果您还希望允许数字,请使用:

@[a-zA-Z0-9]+
根据您喜欢的选项,您的PHP将类似于:

$str = preg_replace("/@([a-zA-Z]+)/", '<span class="label label-default">$1</span>', $str);
$str=preg_replace(“/@([a-zA-Z]+)/”,“$1”,$str);
解释

  • \S
    表示一个非空白字符的字符
  • [a-zA-Z]
    是一个字符类,允许范围
    a-Z
    a-Z
  • +
    量词表示前面标记或组的“一个或多个”
我还没弄明白,这是可行的,但前提是你有一个空间。如果你没有,它将不会工作

因为在正则表达式模式中有一个额外的空间

/@(.*?) /
      ^^^

找到单词后,如何使RegEx停止

$str = preg_replace("/@(.*?) /", '<span class="label label-default">$1</span>', $str);
您只能对大小写字母匹配使用
/@([a-zA-Z]+)/

我还没弄明白,这是可行的,但前提是你有一个空间。如果你没有,它将不会工作

因为在正则表达式模式中有一个额外的空间

/@(.*?) /
      ^^^

找到单词后,如何使RegEx停止

$str = preg_replace("/@(.*?) /", '<span class="label label-default">$1</span>', $str);
您可以使用
/@([a-zA-Z]+)/
只匹配大小写字母。

为什么不多次搜索“非空格”

/@[^ ]+/
另外,
*
表示0到无限次。所以不需要在
*?

中搜索
,为什么不多次搜索“nota space”

/@[^ ]+/

另外,
*
表示0到无限次。因此,在
*?

中不需要
,这也将匹配
@测试。
案例。也许改用
\w
会更好。在Braj指出的正则表达式模式中,您仍然有尾随空格。仅供参考,我在cast中添加了一个选项“您只需要字母”。@JonathanKuhn感谢您的深思熟虑的评论。我不完全确定我是否理解他想要匹配什么,所以添加了其他选项。@adamdc78谢谢,我没有注意到。那是他原来的正则表达式的复制粘贴错误。仍然醒着。:)这也将匹配
@测试。
案例。也许改用
\w
会更好。在Braj指出的正则表达式模式中,您仍然有尾随空格。仅供参考,我在cast中添加了一个选项“您只需要字母”。@JonathanKuhn感谢您的深思熟虑的评论。我不完全确定我是否理解他想要匹配什么,所以添加了其他选项。@adamdc78谢谢,我没有注意到。那是他原来的正则表达式的复制粘贴错误。仍然醒着。:)可能的副本:可能的副本: