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
Regex 用于基本语法格式的正则表达式_Regex_Actionscript 3_Grep - Fatal编程技术网

Regex 用于基本语法格式的正则表达式

Regex 用于基本语法格式的正则表达式,regex,actionscript-3,grep,Regex,Actionscript 3,Grep,我试图用基于一些简单语法概念的正则表达式替换/匹配。时间不早了,我带着通常的自信来到正则表达式网站,相信我可以在一个晚上学会这件事。我大约每六个月做一次。是的,我很傻 不管怎样,万一有人在这个时候(或者确实是在池塘的另一边)接电话,请有人给我一个支持一些简单语法规则的正则表达式: 逗号(,)句点(.)和单引号(')前面永远不会有一个或多个空格 逗号(,)句点(.)后面总是跟一个空格(不多也不少) 逗号(,)句点(.)和空格()不会重复多次 一对中的第一个双引号(“)后面从不跟一个或多个空格,最

我试图用基于一些简单语法概念的正则表达式替换/匹配。时间不早了,我带着通常的自信来到正则表达式网站,相信我可以在一个晚上学会这件事。我大约每六个月做一次。是的,我很傻

不管怎样,万一有人在这个时候(或者确实是在池塘的另一边)接电话,请有人给我一个支持一些简单语法规则的正则表达式:

  • 逗号(,)句点(.)和单引号(')前面永远不会有一个或多个空格
  • 逗号(,)句点(.)后面总是跟一个空格(不多也不少)
  • 逗号(,)句点(.)和空格()不会重复多次
  • 一对中的第一个双引号(“)后面从不跟一个或多个空格,最后一个双引号后面总是跟一个空格或句点(.)字符
  • 最后一个双引号前面不应有任何空格()
一些一般性的解释肯定会保证投票结果,因为我相信这将有助于我对正则表达式的理解

很抱歉,我在使用ActionScript3来实现这一点。不确定它使用的是哪个正则表达式引擎,但毫无疑问它会有一些怪癖。在任何正则表达式中都值得一试 不过,你已经习惯了

这是一个视觉:

// string before

var string:String = '" Hello ,my name is Shennan ,, "he said  .  ';

string = string.replace(/* your regex magic */, /* replace with */);

trace(string); /* output: "Hello, my name is Shennan," he said. */

这将处理逗号和句点前后的空格:

var pattern:RegExp = / *([,.]) */g;
string.replace(pattern, "$1 ");

这将处理单引号前的空格:

var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
这将处理重复的逗号、句点和单引号:

var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
处理成对引号没有简单的方法,因为,例如,被分成段落的引用材料(如演讲稿)通常会在前面段落中重新打开引号,而不会关闭引号。如果且仅当引号保证均匀成对,则可以使用:

var pattern:RegExp = /" *([^"]*)"/g;
string.replace(pattern, '"$1"');


ActionScript3支持反向引用和负面外观标题,因此上述所有功能都应该可以使用,但无可否认,我还没有对它们进行测试(因为我需要用完)。

这将处理逗号和句点前后的空格:

var pattern:RegExp = / *([,.]) */g;
string.replace(pattern, "$1 ");

这将处理单引号前的空格:

var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
这将处理重复的逗号、句点和单引号:

var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
处理成对引号没有简单的方法,因为,例如,被分成段落的引用材料(如演讲稿)通常会在前面段落中重新打开引号,而不会关闭引号。如果且仅当引号保证均匀成对,则可以使用:

var pattern:RegExp = /" *([^"]*)"/g;
string.replace(pattern, '"$1"');


ActionScript3支持反向引用和负面外观头,因此上述所有功能都应该可以使用,但无可否认,我还没有对它们进行测试(因为我需要用完)。

我已经根据您的规则将该过程分解为一系列正则表达式替换。我还没有测试过这些,但与acheong87的答案相比,它们看起来很适合我:

--

规则1:逗号(,)句点(.)和单引号(')前面不能有一个或多个空格。

简单,只需匹配一个或多个空格(
\s+
),后跟逗号、句点或单引号(
[,.]
)。用括号(
()
)捕获逗号、句点或单引号,以便在替换中使用它作为
$1

var pattern:RegExp = /\s+([.,'])/g;
string.replace(pattern, '$1');
--

规则2:逗号(,)句点(.)后面总是跟一个空格(不多也不少)。

让我们将其分成两个正则表达式。首先,匹配逗号或句点(
[,]
),后跟一个或多个空格(
\s+
),并用一个空格替换这些空格:

var pattern:RegExp = /([.,])\s+)/g;
string.replace(pattern, '$1 ');
然后,匹配逗号或句点,后跟任何非空格的内容(
\s
)-在这里,我使用负前瞻进行匹配,但也有其他方法将其替换为逗号或句点,后跟单个空格:

var pattern:RegExp = /([.,])(?!\s)/g;
string.replace(pattern, '$1 ');
--

规则3:逗号(,)句点(.)和空格()的重复次数不得超过一次。

很简单:

var pattern:RegExp = /([,.\s])+/g;
string.replace(pattern, '$1');
--

规则4+5:一对中的第一个双引号(“)后面永远不会跟一个或多个空格,最后一个总是跟一个空格或句点(.)字符。最后一个双引号前面不应有空格()。

正如acheong87所说,这有点棘手。假设您只有成对的引号,可以使用以下规则:

var pattern:RegExp = /"\s*([^"]*)"/g;
string.replace(pattern, '"$1"');

var pattern2:RegExp = /"([^"]*)\s*"(?![.\s])/g;
string.replace(pattern2, '"$1".');
这假设您希望在任何未后跟空格或句点的收盘报价之后添加句点。如果您想在这种情况下使用空格,可以将最后一个参数更改为“$1”


如果您愿意,可以大大简化这些规则。例如,如果首先应用规则3正则表达式,则不需要考虑其他规则中重复的空格。这意味着您不需要规则2中的第一个正则表达式,只需使用第二个正则表达式即可


另外,请参阅acheong87的伟大答案,以获得一些很好的示例。

我已经根据您的规则将该过程分解为一系列正则表达式替换。我还没有测试过这些,但与acheong87的答案相比,我觉得它们很合适:

--

规则1:逗号(,)句点(.)和单引号(')前面不能有一个或多个空格。

简单,只需匹配一个或多个空格(
\s+
),后跟逗号、句点或单引号(
[,.]
)。用括号(
()
)捕获逗号、句点或单引号,以便在替换中使用它作为
$1

var pattern:RegExp = /\s+([.,'])/g;
string.replace(pattern, '$1');
--

规则2:逗号(,)句点(.)后面总是跟一个空格(不多也不少)。

让我们把它分成两个正则表达式。首先,匹配逗号或句点(
[,.]
),后跟一个或多个空格(
\s+
),并用一个空格替换这些空格:

var pattern:RegExp = /([.,])\s+)/g;
string.replace(pattern, '$1 ');
然后,匹配一个逗号或句点,后跟任何不是空格的东西(
\s
)-在这里,我用一个否定的前瞻来做这件事,但是还有其他方法,用com替换它