Regex 用于匹配以特定单词开头的字符串的正则表达式

Regex 用于匹配以特定单词开头的字符串的正则表达式,regex,Regex,如何创建正则表达式以匹配字符串开头的单词。我们希望在字符串的开头匹配stop,任何东西都可以跟随它 例如,表达式应匹配: stop stop random stopping 谢谢。如果您只想匹配以“停止使用”开头的行 ^stop 如果要匹配以单词stop开头,后跟空格的行 ^stop\s 或者,如果您希望匹配以单词stop开头但后跟空格或任何其他可以使用的非单词字符的行(您的正则表达式允许) 另一方面,在大多数正则表达式风格中,后面的内容与字符串开头的单词匹配(在这些风格中\w与\w相反)

如何创建正则表达式以匹配字符串开头的单词。我们希望在字符串的开头匹配
stop
,任何东西都可以跟随它

例如,表达式应匹配:

stop
stop random
stopping

谢谢。

如果您只想匹配以“停止使用”开头的行

^stop
如果要匹配以单词stop开头,后跟空格的行

^stop\s
或者,如果您希望匹配以单词stop开头但后跟空格或任何其他可以使用的非单词字符的行(您的正则表达式允许)

另一方面,在大多数正则表达式风格中,后面的内容与字符串开头的单词匹配(在这些风格中\w与\w相反)

如果您的口味没有\w快捷方式,您可以使用

^[a-zA-Z0-9]+
请注意,第二个习语只匹配字母和数字,而不匹配任何符号

查看您的regex flavor手册,了解允许哪些快捷方式,它们到底匹配什么(以及它们如何处理Unicode)

将匹配任何停止字(停止、停止、停止等)

但是,如果您只想匹配字符串开头的“stop”

/^stop/
将执行以下操作:D

尝试以下操作:

/^stop.*$/
说明:

  • /字符分隔正则表达式(即它们本身不是正则表达式的一部分)
  • ^表示在行首匹配
  • 后跟*表示匹配任意字符(.),任意次数(*)
  • $表示到行尾
如果您希望强制在stop后面加一个空格,可以修改RegEx,如下所示:

/^stop\s+.*$/
  • \s表示任何空白字符
  • +后面的\s表示停止字后面必须至少有一个空格字符

注意:还要记住,上面的正则表达式要求停止字后面跟一个空格!因此,如果要匹配以“stop”(停止)开头的任何内容,包括“stop go”、“stop”(停止)和“stop”(停止),则它不会匹配仅包含:stop(停止)的行。请使用:

如果您想匹配单词stop后跟“停止前进”、“停止此操作”,但不是“停止”和“停止”,请使用:


我建议不要用简单的正则表达式方法来解决这个问题。有太多的单词是其他不相关单词的子字符串,你可能会疯狂地试图过度适应已经提供的简单解决方案

您至少需要一个简单的词干算法(试试Porter词干分析器;在大多数语言中都有可用的免费代码)来首先处理文本。将此已处理文本和预处理文本保留在两个单独的空间分割数组中。确保每个非字母字符在此数组中也有自己的索引。不管你过滤的是哪一个单词,也要把它们删掉

下一步是找到与词干“stop”单词列表匹配的数组索引。从未处理的数组中删除这些,然后在空格上重新联接


这只是稍微复杂一点,但作为一种方法将更加可靠。如果您对更面向NLP的方法的价值有任何疑问,您可能需要对其进行一些研究。

如果您想匹配单词后的任何内容,请不要仅在行首使用:
\bstop.*\b
-

或者,如果要匹配字符串中的单词,请使用
\bstop[a-zA-Z]*
-

或仅对单词使用stop
^stop[a-zA-Z]*
作为行的开头-
整行
^stop.*
-


如果要匹配以stop开头的每个字符串(包括换行符),请使用:
/^stop.*/s
-

如果希望单词以“stop”开头,可以使用以下模式。 “^stop.*”


这将匹配以stop开头的单词,后跟任何单词。

就像@SharadHolani说的那样。这不会匹配以“stop开头的每个单词

。只有在像“停止前进”这样的行的开头。 @瓦索给出了正确的答案:

如果您想匹配任何以“stop”开头的单词,并且只包含从A到Z的字母,那么这个单词会稍微好一些

\bstop[a-zA-Z]*\b
这将符合所有的要求

停止(1)

停止随机(2)

停止(3)

想要停止(4)

请停止(5)

但是


将只匹配(1)到(3),但不匹配(4)和(5)

这将匹配“不要停止前进”这将不匹配stop123或stop,.+1来概括您的答案。我希望在堆栈溢出上看到更多这方面的内容。在我看来,这是一个更好的学习资源。如何使它不区分大小写,即匹配停止或停止或停止?取决于您的语言。。。Perl compatible可以使用I修饰符/regex/i.NET RegexOptions.IgnoreCase等不要忘记
^stop\b
,它允许任何边界,包括行尾。这很好,但不适合我的情况。我问了一个特定于我具体情况的问题,但有人告诉我这是一个“类似”的问题。不幸的是,这并不相似,因为这个问题的答案没有满足我的具体要求。那么,如果我需要一个完全像这样的词(短语)
https://www.example.com/c/
?c/part后面可以有任何内容,但开头必须如此处所述。并非所有语言都使用前斜杠来分隔正则表达式。@Cat Megex:这正是我添加解释的原因。如果您的语言使用其他内容来分隔正则表达式,请使用适当的character@Mez是的,这样的冗余可以提高清晰度和性能。您能不能不使用
“^stop”
/^stop.*$/
/^stop\s+.*$/
^stop
^stop\W
\bstop[a-zA-Z]*\b
/^stop[a-zA-Z]*/