这是我的字符串:
"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\gacutil" /i "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130\Microsoft.SqlServer.TransactSql.ScriptDom.dll
这是我的模式:
$str = "somethingtestsomethingtestsomething123something
somethingtestsomethingtestsomething123something
somethingtestsomethingtestsomething123something
somethingtestsomethingtestsomething123something";
当前结果: /test.*?123/
,testsomethingtestsomething123
等于$1
预期结果: somethingtestsomething
,testsomething123
等于$1
如您所见,我希望匹配最近的something
到test
和123
之间的所有内容。我怎么能这样做?
答案 0 :(得分:2)
懒惰的量词并不一定能给你最短的匹配 - 只有最短的匹配从匹配的字符串中最左边的位置开始。
您需要使用negative lookahead assertion来确保所有分隔符都不属于"之间的"文本:
#ifndef LIST_H
#define LIST_H
template <typename ListType> class List{
public:
enum ListPosition{LIST_START=-2,LIST_END=-1};
enum Order{ASCENDANT,DESCENDANT};
template <typename NodeType> class ListNode{
public:
ListNode(const NodeType &value,const ListNode<NodeType>*const pElement, const ListNode<NodeType>*const nElement);
~ListNode();
ListNode<NodeType> *const previous() const;
ListNode<NodeType> *const next() const;
void setPrevious(const ListNode<NodeType> *const pElement);
void setNext(const ListNode<NodeType> *const nElement);
void setValue(const NodeType& value);
private:
ListNode<NodeType> *pElement;
ListNode<NodeType> *nElement;
NodeType *value;
};
List();
List(const List<ListType> &list);
~List();
bool contains(const ListType& value) const;
ListType& get(const int pos) const;
ListNode<ListType>& getNode(const int pos) const;
void add(const ListType& value);
void add(const int pos, const ListType& value);
void addAll(const int pos, const List<ListType>& list);
void set(const int pos, const ListType& value);
void remove(const int pos);
void remove(const ListType& value);
void order(Order order);
int size() const;
bool operator==(const List<ListType>& list) const;
void operator=(const List<ListType>& list);
operator const char *() const;
ListType& operator[](const int pos) const;
const ListNode<ListType>& operator[](const ListType& value) const;
protected:
ListNode<ListType> *firstNode;
ListNode<ListType> *lastNode;
int _size;
};
#include "ListCode.h"
#include "ListNodeCode.h"
#endif