删除正则表达式匹配中的空格

时间:2018-08-28 07:08:52

标签: regex

我正在使用正则表达式从合同中读取所有函数名称。 例子

[['c', 1], ['b', 1], ['c', 2], ['b', 2], ['c', 3], ['b', 3]]

预期输出:

(void) function_name1(int, int);
(void) function_name2(int, int);
(void) function_name3(int, int);
(void) function_name4(int, int);

我正在使用正则表达式function_name1 function_name2 function_name3 function_name4 通过此表达式,我在函数的开头将函数名称与空格分组。 请帮助我如何忽略此空间。

3 个答案:

答案 0 :(得分:1)

正则表达式中的any space(空格,制表符或换行符)为\s,因此您可以使用

\)\s*(.*?)\(

答案 1 :(得分:1)

这应该有效

(\w+)\s*\([^()]*\)

请参阅https://regex101.com/r/CzjFWt/1

<?php
$i = '(void) function_name1(int, int);
(void) function_name2(int, int);
(void) function_name3(int, int);
(void) function_name4(int, int);';

$r = '(\w_+)\s*\([^()]*\)';

preg_match_all('|' . $r . '|sm',
    $i,
    $o, PREG_PATTERN_ORDER);



foreach($o[1] as $v)echo  $v;

结果:

function_name1function_name2function_name3function_name4

或输出完整的结果数组:

echo var_export($o[1]);

php中的示例: http://sandbox.onlinephpfunctions.com/code/b3e387797e12853be040e00fcfd1d804629797b6

结果是:

array (
  0 => 'function_name1',
  1 => 'function_name2',
  2 => 'function_name3',
  3 => 'function_name4',
)

答案 2 :(得分:0)

尝试一下并参加分组1

(?:\)\s*)(\w+)

demo

非捕获组 (?:\)\s)

\)从字面上匹配字符)(区分大小写)

\s匹配任何空白字符(等于[\r\n\t\f\v ]

第一个捕获组 (\w+)

\w+匹配任何单词字符(等于[a-zA-Z0-9_]