Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 正则表达式查找两边都没有空格的符号AND_Php_Regex - Fatal编程技术网

Php 正则表达式查找两边都没有空格的符号AND

Php 正则表达式查找两边都没有空格的符号AND,php,regex,Php,Regex,我只是想找出正则表达式来找到任何没有紧跟空格的符号。例如,它会找到“asdf&asdf”和“asdf&asdf”,但不会找到“asdf&asdf” 这将在preg_替换中用于在前后添加空格。(如果你想知道的话,问题是我遇到了一个所见即所得的问题,它有一个bug,在这个bug中,它会在安培数的两边去掉空格,我需要在事后手动将它们添加回去)。思想?如果两边都没有空间,可以这样做 echo preg_replace('/ ?& ?/',' & ','asdf&asdf asdf

我只是想找出正则表达式来找到任何没有紧跟空格的符号。例如,它会找到“asdf&asdf”和“asdf&asdf”,但不会找到“asdf&asdf”


这将在preg_替换中用于在前后添加空格。(如果你想知道的话,问题是我遇到了一个所见即所得的问题,它有一个bug,在这个bug中,它会在安培数的两边去掉空格,我需要在事后手动将它们添加回去)。思想?

如果两边都没有空间,可以这样做

echo preg_replace('/ ?& ?/',' & ','asdf&asdf asdf& asdf asdf & asdf');
//asdf & asdf asdf & asdf asdf & asdf
如果两边都没有空格(回答问题标题),则在
asdf和asdf上失败

echo preg_replace('/(?<! )&(?! )/',' & ','asdf&asdf asdf& asdf asdf & asdf');
//asdf & asdf asdf& asdf asdf & asdf

echo preg_替换('/(?在以下内容之后或之前带有非空格的与号):

(&[^ ]|[^ ]&)
此正则表达式确保
&
字符的左侧或右侧没有空格

(\S&\S|\s&\S|\S&\s)
  • 非空格字符,后跟&和另一个非空格字符
  • 空格后跟&,后跟非空格字符
  • 非空白字符后跟&,后跟另一个空白字符

符号和宽度不在空格后或符号后,也不在空格前,但不能两者兼而有之:

(?<!\s)&|&(?!\s)
(?

使用lookaround,这样就只捕获了符号and。

我建议首先查找所有与左右字符无关的符号and,然后使用否定lookbehind断言来确保不是两个字符都是空格

.&.(?<! & )

&.(?它应该有效(未经测试):
/([^\s]&&[^\s])/
。如果您只关心空格而不关心“任何空白字符”:
/([^]&&[^])/

(?我的尝试与此类似,但是,OP声明模式也应该匹配“asdf&asdf”。我相信这不会。请注意,OP需要一个正则表达式,该正则表达式与一个符号AND匹配,且一侧或另一侧没有空格(不一定两者都有).根据我的测试,我只找到了前后都没有空格的字符串。他想要的是没有空格的安培数,而不是没有空格的安培数。我已将所有三个测试字符串放入RegexBuddy,它只匹配没有空格的字符串(第一个)。添加了另一个,问题标题实际上令人困惑。要完成答案,我相信解决方案将是:
preg_replace('/(\S&\S|S&\S&\S)/','&',$str)
很好的一个,与我的类似,但简单得多,不需要四处张望。你也可以做
\S&&\S
。再想一想——如果你想替换并添加空间,也许你可以搜索
\S?&\S?
,然后用“&”替换。即使你有空间,它仍然可以工作。。。
.&.(?<! & )
(?<=\s)\&\&\s