匹配正则表达式中的空格

时间:2009-02-18 00:34:04

标签: php regex

我需要匹配PHP正则表达式中的空格字符。有人有任何想法吗?

我的意思是“gavin schulz”,这两个词之间的空间。我使用正则表达式来确保我只允许字母,数字和空格。但我不确定如何找到空间。这就是我现在所拥有的:

$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);

9 个答案:

答案 0 :(得分:317)

如果您正在寻找空间,那将是" "(一个空格)。

如果你正在寻找一个或多个,那就是" *"(那是两个空格和一个星号)或" +"(一个空格和一个加号)。

如果您要寻找常用的间距,请使用"[ X]""[ X][ X]*""[ X]+",其中X是物理标签字符(并且每个字符前面都有一个空格在所有这些例子中)。

这些将在我见过的每个 *正则表达式引擎中工作(其中一些甚至没有一个或多个"+"字符,呃)。

如果您知道自己将使用更现代的正则表达式引擎之一"\s",那么它的变化是可行的。另外,我相信单词边界也匹配行的开头和结尾,当你在寻找可能没有前后空格的单词时,这很重要。

对于PHP,this page可能有所帮助。

从您的编辑中,您似乎想要删除所有无效字符。这是开头(请注意正则表达式中的空格):

$newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag);
#                                    ^ space here

如果你也想要欺骗以确保每个单词之间只有一个空格,并且在开头或结尾都没有空格,那就更复杂了(可能是另一个问题),但基本的想法是:

$newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space
$newtag = preg_replace ("/^ /", "", $tag);  # remove space from start
$newtag = preg_replace ("/ $/", "", $tag);  # and end

答案 1 :(得分:41)

\040完全匹配空格字符。

Regexp PHP reference

新链接
Escape sequences for Regex PHP

答案 2 :(得分:15)

以下是您需要了解的关于正则表达式中空格的所有内容:

  • [[:space:]]仅限空格或标签
  • \s空白
  • \v任何空格字符
  • \h垂直空白
  • x水平空格
  • import org.artifactory.exception.CancelException import org.artifactory.repo.RepoPathFactory import org.artifactory.util.StringInputStream storage { afterCreate { item -> def SourcePath = RepoPathFactory.create('stage-release', item.repoPath.path) def DestPath = RepoPathFactory.create('release', item.repoPath.path) if (item.repoPath.repoKey == 'stage-release') { echo " ID is " + item.repoPath.id if (repositories.exists(DestPath)) { echo "FOUND the artifact in the release repo so no need to copy" } else { echo "MISSING artifact in the release repo so copying it over" repositories.copy (SourcePath, DestPath) } } } } def echo(str) { log.warn "########################### " + str; } 忽略空格

答案 3 :(得分:6)

在Perl中,开关是\s(空格)。

答案 4 :(得分:5)

在我看来,在这种情况下使用REGEX会有点矫枉过正。为什么不只是strpos来找到空格字符。此外,正则表达式中的空格字符没有什么特别之处,您应该能够像搜索任何其他字符一样搜索它。也就是说,除非你禁用了模式空格,在这种情况下几乎不需要。

答案 5 :(得分:4)

  

我正在使用正则表达式来确保我   只允许字母,数字和空格

然后就像为你已经拥有的东西添加一个空格一样简单:

$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);

(请注意,我删除了s|似乎是无意的?当然s是多余的;如果需要,您可以恢复|

如果你特别想要* a *空格,就像一个空格一样,你需要一个比这更复杂的表达式,并且可能想要考虑一个单独的非正则表达式逻辑。

答案 6 :(得分:3)

您也可以使用\ b作为单词边界。对于名称,我会使用这样的东西:

[^\b]+\b[^\b]+(\b|$)

编辑在Perl示例中将其修改为正则表达式

if( $fullname =~ /([^\b]+)\b[^\b]+([^\b]+)(\b|$)/ ) {
 $first_name = $1;
 $last_name = $2;
}

再次编辑根据您的需要:

$new_tag = preg_replace("/[\s\t]/","",$tag);

答案 7 :(得分:1)

我在一个看起来像WordPress中的博客使用非标准空格字符的实例中尝试[[:space:]]。看起来它会起作用。

答案 8 :(得分:1)

像这样使用它以允许单个空格。

$newtag = preg_replace("/[^a-zA-Z0-9\s]/", "", $tag)