我需要匹配PHP正则表达式中的空格字符。有人有任何想法吗?
我的意思是“gavin schulz”,这两个词之间的空间。我使用正则表达式来确保我只允许字母,数字和空格。但我不确定如何找到空间。这就是我现在所拥有的:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
答案 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)
答案 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)