Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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 正则表达式,用于搜索后跟某个集合的任何符号的单词_Php_Regex - Fatal编程技术网

Php 正则表达式,用于搜索后跟某个集合的任何符号的单词

Php 正则表达式,用于搜索后跟某个集合的任何符号的单词,php,regex,Php,Regex,我想写一个正则表达式来检查字符串中后跟?,:但是我尝试了很多东西,但似乎没有任何东西能正常工作。。 我想到的最好的方法是:\\b([a-zA-Z]*)([\:]\124;[\?])\ 测试短语?就是这样!测试是否一切正常?工作 我正在编写一个函数,它来自上面的示例语句,结果如下: array( [0] => phrase, [1] => array( [0] => something, [1] => like this

我想写一个正则表达式来检查字符串中后跟
?,:但是我尝试了很多东西,但似乎没有任何东西能正常工作。。
我想到的最好的方法是:
\\b([a-zA-Z]*)([\:]\124;[\?])\

测试短语?就是这样!测试是否一切正常?工作

我正在编写一个函数,它来自上面的示例语句,结果如下:

array(
[0] => phrase,
[1] => array(
             [0] => something, 
             [1] => like this,
[2] => everything
)

您可以尝试以下方法:

\b\w+\b(?=[!:?])
这将为您的测试句子生成以下结果:

'phrase', 'something', 'this', 'everything'
您有一个初始单词边界(
\b
),但在查找
之前您没有完成单词
。这些标点符号在给定的单词中不匹配

此外,
[!:?]
默认情况下只匹配这三个标点符号中的任何一个,因此您不需要or(
|

如果要匹配这三个标点符号之前的每个完整短语/句子,可以尝试以下正则表达式:

\w[\w\s]+?(?=[!:?])
这将给你:

'The test phrase', 'is something', 'like this', 'to test whether everything'
我会去的

(\w+)[?!:]
如果您只想确保一个单词后面跟着一个
?!:。不需要前瞻,检查单词边界或其他事情(永远记住:保持简单和愚蠢!)。

关于您对以下内容的评论:

一个正则表达式,如果单词有一个值,它只返回单个单词?当有一个带“:”的单词时,它会返回几个单词?当有一个带“:”的单词时,我想把这个单词和后面的每个单词都记下来,直到下一个

这是完全可能的:

(\w+)\?|(\w+):\s?(.+?)!


再次强调:保持它的简单和愚蠢,但是请注意,如果有嵌套的
:?,这将失败在a
:abc
例如句子
i:will?失败
不会给你单曲
will
,它会给你
i
will?失败

说明:

  (\w+)\?   #every word which is followed by a ?
|           #OR
  (\w+)    #every word
  :         #which is followed by a : 
  \s?       #and an optional whitespace
  (.+?)     #every character
  !         #until a ! is encountered

好吧,你已经帮了我很大的忙了!尽管我还有一个问题:是否有可能创建一个结合了您给出的两个结果的正则表达式。我的意思是,一个正则表达式,如果单词有?当有一个带“:”的单词时,它会返回几个单词?当有一个带“:”的单词时,我想把这个单词和后面的每个单词都记下来,直到下一个!我可以用两个正则表达式和一些操作编写一个函数,但我想知道这是否可以用一个正则表达式来完成。@user3156386那么你的意思是你只需要(1)问号前面的每个单词,(2)冒号和感叹号之间的每个短语/句子吗?因为这是你在这里提出的第五个问题,我会开始接受答案(答案左边的复选标记就在投票下面),因为当许多用户看到你不接受问题的给定答案时,他们不会帮助你。但请记住:永远接受对你帮助最大的答案!如果没有一个答案解决了你的问题,那么不接受答案是完全正确的!