Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 preg_匹配需要确保单词之间只允许一个空格字符_Php_Regex - Fatal编程技术网

PHP preg_匹配需要确保单词之间只允许一个空格字符

PHP preg_匹配需要确保单词之间只允许一个空格字符,php,regex,Php,Regex,基本上,我需要一个preg_匹配,确保每个单词之间只允许有一个空格字符(如果有多个单词) 我现时的规则是: (^[A-Za-z\s]+$) 谢谢。这取决于你所说的“单词”是什么意思,但假设你指的是A-Z或A-Z中的字母,你可以试试这个: ^[a-zA-Z]+( [a-zA-Z]+)*$ 请注意,\s并不表示空格字符-它表示任何空格,包括新行。我想指定一些匹配出现的次数,例如{1}{1,5}(仅匹配1或介于1和5之间,包括1和5之间),因此类似于 ^[A-Za-z]+({1})$ 将搜索任何后

基本上,我需要一个preg_匹配,确保每个单词之间只允许有一个空格字符(如果有多个单词)

我现时的规则是:

(^[A-Za-z\s]+$)

谢谢。

这取决于你所说的“单词”是什么意思,但假设你指的是A-Z或A-Z中的字母,你可以试试这个:

^[a-zA-Z]+( [a-zA-Z]+)*$

请注意,
\s
并不表示空格字符-它表示任何空格,包括新行。

我想指定一些匹配出现的次数,例如{1}{1,5}(仅匹配1或介于1和5之间,包括1和5之间),因此类似于

^[A-Za-z]+({1})$

将搜索任何后面有一个空格的单词,而不是后面有一个空格的单词

/\s?\S+\s/

将搜索任一侧有空格或仅在末尾有空格的任何字符。

此外,标志是否与单词匹配?这很有效,但在正则表达式中并不重要,除非您想重复。所有正则表达式都假定行中每个字符都有一个匹配项,这意味着{1}是多余的。第一个正则表达式可以工作,但当只有一个字(没有前导/尾随空格)时,它也会失败。
/^[\S]+\S?[^\S]?/
匹配以一个或多个非空白字符开头的字符串,仅此而已。如果后跟空白字符,
\s?
将与之匹配,如果后跟非空白字符,
[^\s]?
将与之匹配。但两个正则表达式都不会阻止两个或多个连续空格的匹配。
/^[\S]+\S?[^\S]?/
表示如果非空格字符后有空格,则强制该字符仅为一个,否则不匹配。这听起来和OP要求的完全一样。如果从来没有一种情况下你会允许多个空格,比如说在句子之间,你可以用一个空格替换所有多个空格,而不用担心它们与单词的接近。e、 g.
/{SPACECHAR}+/{SPACECHAR}/
。(我使用了{SPACECHAR}而不是空格来表达我的意思。)
/\s?\S+\s/